前文回顾
【微服务专题之】.Net6下集成消息队列上-RabbitMQRabbmitMQ中单一队列多个消费者场景代码演示
-
新建一个生产者类 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 }