【微服务专题之】.Net6下集成消息队列(下)-RabbitMQ

前文回顾

【微服务专题之】.Net6下集成消息队列上-RabbitMQ

RabbmitMQ中单一队列多个消费者场景代码演示

  • 新建一个生产者类 Producer

  • 接着1s定时发送消息到队列中。代码参考前文链接.

  • 打开多个消费者程序,查验控制台输出情况。具体参考本文视频演示

 1 public class Producer
 2    {
 3        public static void  Publish(IModel channel)
 4        {
 5            channel.QueueDeclare(queue: "hello",
 6                        // 持久性 一直保持  直到消费者 消费队列
 7                        durable: true,
 8                        // 独占
 9                        exclusive: false,
10                        autoDelete: false,
11                        arguments: null);
12            var count = 0;
13            while (true)
14            {
15                // 发送的消息
16                string message = $"Hello World {count}";
17                var body = Encoding.UTF8.GetBytes(message);
18
19                // 基本发布 不指定交换
20                channel.BasicPublish(exchange: "",
21                                     // 路由键   就是队列名称
22                                     routingKey: "hello",
23                                     // 基础属性
24                                     basicProperties: null,
25                                     // 传递的消息体
26                                     body: body);
27                count++;
28                Thread.Sleep(1000);
29                Console.WriteLine(" [x] sent {0}", message);
30            }
31
32        }
33    }

消费者程序改造:

 1public class Consumer
 2    {
 3        public static void Consume(IModel channel)
 4        {
 5            channel.QueueDeclare(queue: "hello",
 6                         durable: true,
 7                         exclusive: false,
 8                         autoDelete: false,
 9                         arguments: null);
10
11            // 创建一个消费者基本事件
12            var consumer = new EventingBasicConsumer(channel);
13            consumer.Received += (model, ea) =>
14            {
15                var body = ea.Body.ToArray();
16                var message = Encoding.UTF8.GetString(body);
17                Console.WriteLine(" [x] Received {0}", message);
18            };
19            channel.BasicConsume(queue: "hello",
20                                 // 自动确认
21                                 autoAck: true,
22                                 consumer: consumer);
23
24            Console.WriteLine(" Press [enter] to exit.");
25            Console.ReadLine();
26        }
27    }
下一篇分享RabbitMQ Exchange 的几种常见类型的代码演示~