微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式相关的知识,希望对你有一定的参考价值。

微信公众号:趣编程ACE
关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码;
[如果觉得本公众号对您有帮助,欢迎关注]

前文回顾

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

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


RabbitMQ中直接路由模式

路由模式就是生产者与消费者之间基于交换机通信的时候,生产者指定路由发送数据,消费者绑定路由接收数据。这个与前文讲解的发布/订阅模式有一定的区分,发布订阅模式只要绑定了交换机的队列(queue)都会收到生产者通过交换机发送过来的数据,而路由模式增加了一个指定路由的设置,会声明发送到交换机下的哪个路由,而接受的消费者只有绑定了队列并且声明了该路由才会接受到数据。

代码演示

生产者代码:
1public static void Send(IModel channel)
 2        
 3            channel.ExchangeDeclare( "hello-direct-exchange",ExchangeType.Direct);
 4            var count = 0;
 5            while (true)
 6            
 7                Thread.Sleep(1000);
 8                // 发送的消息
 9                string message = $"Hello World count";
10                var body = Encoding.UTF8.GetBytes(message);
11                var body2 = Encoding.UTF8.GetBytes(message+"body2");
12
13                // 基本发布 不指定交换
14                channel.BasicPublish(exchange: "hello-direct-exchange",
15                                     // 路由键   就是队列名称
16                                     routingKey: "route1",
17                                     // 基础属性
18                                     basicProperties: null,
19                                     // 传递的消息体
20                                     body: body);
21
22                channel.BasicPublish(exchange: "hello-direct-exchange",
23                                     // 路由键   就是队列名称
24                                     routingKey: "route2",
25                                     // 基础属性
26                                     basicProperties: null,
27                                     // 传递的消息体
28                                     body: body2);
29                count++;
30                Console.WriteLine(" [x] sent 0", message);
31            
32        

消费者代码

1public static void Receive(IModel channel)
 2        
 3            channel.ExchangeDeclare("hello-direct-exchange", ExchangeType.Direct);
 4            channel.QueueDeclare(queue: "hello-direct-queue",
 5                        durable: true,
 6                        exclusive: false,
 7                        autoDelete: false,
 8                        arguments: null);
 9            channel.QueueBind("hello-direct-queue", "hello-direct-exchange", "route1");
10            channel.QueueBind("hello", "hello-direct-exchange", "route2");
11
12            // 创建一个消费者基本事件
13            var consumer = new EventingBasicConsumer(channel);
14            consumer.Received += (model, ea) =>
15            
16                var body = ea.Body.ToArray();
17                var message = Encoding.UTF8.GetString(body);
18                Console.WriteLine(" [x] Received 0", message);
19            ;
20            channel.BasicConsume(queue: "hello-direct-queue",
21                                 // 自动确认
22                                 autoAck: true,
23                                 consumer: consumer);
24
25            channel.BasicConsume(queue: "hello",
26                                 // 自动确认
27                                 autoAck: true,
28                                 consumer: consumer);
29
30            Console.WriteLine(" Press [enter] to exit.");
31            Console.ReadLine();
32        

效果展示


PS:代码详解见视频~

高性能云服务器 精品线路独享带宽,毫秒延迟,年中盛惠 1 折起

以上是关于微服务专题之.Net6中集成消息队列-RabbitMQ中直接路由模式的主要内容,如果未能解决你的问题,请参考以下文章

微服务专题之.Net6下集成消息队列-RabbitMQ交换机模式代码演示(全)

微服务专题之.Net6下集成消息队列-RabbitMQ交换机模式代码演示(全)

微服务专题之.Net6下集成微服务网关-Ocelot

微服务专题之.Net6下集成微服务网关-Ocelot

spring cloudgradle父子项目微服务框架搭建---rabbitMQ延时队列

flask 之 rabbit