NetCore 注册Channel消费者,实现消息队列,替代RabbitMQ

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

创建相关类

using Newtonsoft.Json;
using swapCommon.Enums;
using swapModels.TcpModels;
using swapService.Service.Power;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Channels;
using System.Threading.Tasks;

namespace swapService.Service.business
{
    public class ChannelConsumeSvc
    { 
        static Channel<string> channel = Channel.CreateBounded<string>(100); // 创建一个有界的通道,最大容量10条待处理消息(当通道满时,生产  
        public static async Task Producer(string msg)
        {
            await channel.Writer.WriteAsync(msg); // 异步写入通道   
        }

        static async Task Consumer()
        {
            while (await channel.Reader.WaitToReadAsync())
            {
                await foreach (var message in channel.Reader.ReadAllAsync()) // 异步读取所有消息  
                {
                    //Console.WriteLine($"Consumed: {message}");
                    var dto = JsonConvert.DeserializeObject<RdsPowerOpenDoorDtls>(message);
                   //你的业务逻辑
                } 
            } 
        }
        public static async Task StartConsumer()
        {
            //启动消费者任务  
            await Consumer();
        }
  }
}

2、在staartUp.cs中注册消费者,完成侦听

Task.Run(async () => {await ChannelConsumeSvc.StartConsumer(); });

image

 3、生产消息:

     var rabbit = new RdsPowerOpenDoorDtls() { DEVICE = order.PwDeviceno, BtSn = order.PowerSn, Port = order.Rek2.Value, orderId = order.Uid };

     await ChannelConsumeSvc.Producer(JsonConvert.SerializeObject(rabbit));

over

posted @ 2025-08-11 17:07  天才卧龙  阅读(14)  评论(0)    收藏  举报