相关文章推荐
愤怒的菠萝  ·  理解Java ...·  10 月前    · 
千杯不醉的脆皮肠  ·  http - ...·  1 年前    · 
空虚的西瓜  ·  electron ...·  1 年前    · 

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");
13                // 基本发布 不指定交换
14                channel.BasicPublish(exchange: "hello-direct-exchange",
15                                     // 路由键   就是队列名称
16                                     routingKey: "route1",
17                                     // 基础属性
18                                     basicProperties: null,
19                                     // 传递的消息体
20                                     body: body);
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");
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);
25            channel.BasicConsume(queue: "hello",
26                                 // 自动确认
27                                 autoAck: true,
28                                 consumer: consumer);
30            Console.WriteLine(" Press [enter] to exit.");
31            Console.ReadLine();
32        }

PS:代码详解见视频~

微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助,欢迎关注]前文回顾【微服务专题之】.Net6下集成消息队列上-RabbitMQ【微服务专题之】.Net6下集成消息队列2-RabbitMQRabbitMQ中直接路由模式路由模式就是生产者与消费者之间基于交换机通信的时候,生产者指定路由发送数据,...
微信公众号:趣编程ACE关注可了解更多的 .NET 日常实战开发技巧,如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助,欢迎关注] .Net RabbitMQ 的使用超清观看视频哦~官网链接 RabbitMQ 代码演示-详细见代码注释,操作看上文视频生产者代码1using RabbitMQ .Client; 2usingSystem.Text; 5//...
搭建 RabbitMQ 简单通用的直连方法 如果还没有MQ环境,可以参考上一篇的博客: https://www.cnblogs.com/weskynet/p/14877932.html 接下来开始 .net core操作 Rabbitmq 有关的内容。我打算使用比较简单的单机的direct直连 模式 ,来演示一下有关操作,基本套路差不多。 首先,我在我的package包项目上面,添加对 RabbitMQ .Cl...
<OutputType>Exe</OutputType> <TargetFramework> net6 .0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</N
1. 首先我要保证的是项目在启动之初,就要同时启动 队列 ,并进行消费 2. 队列 的各种配置与 RabbitMQ 连接对象必须保证单例且必须全局注入 3. 支持扩展也就是多个消费者,共同消费一个 队列 。 4. 把方法独立出来,利于以后的扩展和业务增加 5. 写入数据库 ,保存数据(由于是子线程运行 rabbitmq ,所以没办法 直接 得到主线程的容器进行注入因为这个我纠结了两个小时,具体方法看代码)
在企业应用系统领域,会面对不同系统之间的通信、 集成 与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要。其次,系统 一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信,邮件提醒,更新文章阅读计数,记录用户操作日志等等,如果实时处理的话,在用户访问量比较大的情况下,对系统压力比较大。 面对这些问题,我们一般会将这些请求,放在 消息队列 处理;异构系统之间使用消息进行...
1. Redis 消息队列 Redis 消息队列 是基于Redis的发布/ 订阅 模式 实现的。发布者将消息发送到指定的频道, 订阅 者从频道 订阅 消息。Redis的发布/ 订阅 模式 是一个简单的模型,适用于一些简单的场景,例如实时消息推送等。但是,它不支持消息的持久化,也不支持消息的 路由 和过滤,所以在一些复杂的场景下可能会有限制。 2. RabbitMQ 消息队列 RabbitMQ 消息队列 是一个完整的消息 间件,它支持多种消息传输协议和多种编程语言,包括AMQP、STOMP、MQTT等。它提供了许多高级特性,例如消息持久化、消息 路由 、消息过滤、消息确认等。 RabbitMQ 还支持集群部署和负载均衡,可以保证高可靠性和高可扩展性。但是, RabbitMQ 的实现比Redis复杂,需要更多的配置和管理。 总的来说,Redis 消息队列 适用于一些简单的场景,而 RabbitMQ 消息队列 适用于更复杂的场景,需要更高级的特性和更完善的管理。