C# Rabbitmq 多个队列多个线程消费

C# Rabbitmq 多个队列多个线程消费

猿掌柜
2023-07-21 / 1 评论 / 19 阅读 / 未收录,推送中... 🔋充电中 100%

代码如下

private async static void RunMq(BoxInfo item, string queue,int phase)
        {
            Random random = new Random();
            int rallyNumber = random.Next(1, 1000);
            await Task.Run(() =>{
                try
                {
                    Console.WriteLine(queue);
                    int asyncCount = 1;
                    List<Task<bool>> tasks = new List<Task<bool>>();
                    var connection = RabbitMQFactory.SharedConnection;
                    for (int i = 1; i <= asyncCount; i++)
                    {
                        tasks.Add(Task.Factory.StartNew(() => MessageWorkItemCallback(connection, rallyNumber, queue, item, phase)));
                    }
                    Task.WaitAll(tasks.ToArray());
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"消费异常:{ex.Message}");
                }
                
            });
            
        }

第二段

private static bool MessageWorkItemCallback(object state, int rallyNumber,string queue, BoxInfo item, int phase)
        {
            bool syncResult = false;
            IModel channel = null;
            try
            {
                IConnection connection = state as IConnection;
                //不能使用using (channel = connection.CreateModel())来创建信道,让RabbitMQ自动回收channel。
                channel = connection.CreateModel();
                channel.BasicQos(prefetchSize: 0, prefetchCount: 1, global: false);
                channel.QueueDeclare(queue, false, false, false, null);
                var consumer = new EventingBasicConsumer(channel);
                channel.BasicConsume(queue: queue, autoAck: false, consumer: consumer);
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body.ToArray();
                    if (body.Length > 1028)
                    {
                        TreatData.ConsumeData(body, item, phase);
                    }
                    else
                    {
                        string message = Encoding.UTF8.GetString(ea.Body.ToArray());
                        Console.WriteLine($"随机ID: {rallyNumber} Received  {message}");
                    }
                    channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
                };
                syncResult = true;
            }
            catch (Exception ex)
            {
                syncResult = false;
                Console.WriteLine(ex.Message);
            }
            return syncResult;
        }
2

评论 (1)

OωO
  • 爱你
  • 爱心
  • 傲慢
  • 白眼
  • 棒棒糖
  • 爆筋
  • 抱拳
  • 鄙视
  • 闭嘴
  • 擦汗
  • 菜刀
  • 吃
  • 呲牙
  • 大兵
  • 大哭
  • 蛋
  • 得意
  • doge
  • 发呆
  • 发怒
  • 奋斗
  • 尴尬
  • 勾引
  • 鼓掌
  • 害羞
  • 憨笑
  • 好棒
  • 哈欠
  • 喝彩
  • 河蟹
  • 坏笑
  • 饥饿
  • 惊恐
  • 惊喜
  • 惊讶
  • 菊花
  • 可爱
  • 可怜
  • 抠鼻
  • 酷
  • 快哭了
  • 骷髅
  • 困
  • 篮球
  • 泪奔
  • 冷汗
  • 流汗
  • 流泪
  • 难过
  • OK
  • 喷血
  • 撇嘴
  • 啤酒
  • 强
  • 敲打
  • 亲亲
  • 糗大了
  • 拳头
  • 骚扰
  • 色
  • 胜利
  • 手枪
  • 衰
  • 睡
  • 调皮
  • 偷笑
  • 吐
  • 托腮
  • 委屈
  • 微笑
  • 握手
  • 我最美
  • 无奈
  • 吓
  • 小纠结
  • 笑哭
  • 小样儿
  • 斜眼笑
  • 西瓜
  • 嘘
  • 羊驼
  • 阴险
  • 疑问
  • 右哼哼
  • 幽灵
  • 晕
  • 再见
  • 眨眼睛
  • 折磨
  • 咒骂
  • 抓狂
  • 左哼哼
经典
颜文字
取消
  1. 头像
    游客 作者
    Linux · Google Chrome

    123123

    回复