RabbitMQ~广播消息

简介:

定义

广播消息是指生产者产生的消息将分发给所有订阅这个消息的消费者,而普通的模式是:一批消息可以被多个人共同消费,如consumer1可能消费1,3,5记录,而consumer2可能消费的是2,4,6这种模块就是共同消费模块;而今天说的是广播消息,它是指一些消息同时被推送到多个订阅者,而这些订阅者收到的消息都是完整的,如consumer1收到的会是1,2,3,4,5,6,而consumer2回到的也会是1,2,3,4,5,6,这种就像广播一样,把消息广播给多人!

实质上是对Fanout类型的exchange的实现

通过我们RabbitMq的后台可以看到,它会使用fanout模式,并且会自己添加队列,当然队列名称也是动态的.

广播模式的生产者

 static void TestFanout(int _index)
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    const string EXCHANGE_NAME = "logs";
                    const string ROUTING_KEY = "";
                    channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//广播
                    var message = "hello out";
                    var body = Encoding.UTF8.GetBytes(message);
                    channel.BasicPublish(EXCHANGE_NAME, ROUTING_KEY, null, body);//不需要指定routing key,设置了fanout,指了也没有用.
                    Console.WriteLine(" [x] Sent {0}", message + _index);
                }
            }
        }

广播模式的消费者

        static void TestFanout()
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using (var connection = factory.CreateConnection())
            {
                using (var channel = connection.CreateModel())
                {
                    const string EXCHANGE_NAME = "logs";
                    const string ROUTING_KEY = "";
                    channel.ExchangeDeclare(EXCHANGE_NAME, "fanout");//广播
                    QueueDeclareOk queueOk = channel.QueueDeclare();
                    string queueName = queueOk.QueueName;
                    channel.QueueBind(queueName, EXCHANGE_NAME, ROUTING_KEY);//不需要指定routing key,设置了fanout,指了也没有用.
                    var consumer = new QueueingBasicConsumer(channel);
                    channel.BasicConsume(queueName, true, consumer);
                    Console.WriteLine(" [*] Waiting for messages." + "To exit press CTRL+C");
                    while (true)
                    {
                        var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();//挂起的操作
                        var body = ea.Body;
                        var message = Encoding.UTF8.GetString(body);
                        Console.WriteLine(" [x] Received {0}", message);
                    }
                }
            }
        }

通过测试我们发布,由producer生产的消息,已经被推送到所有消费者那边了...

以上就是RabbitMQ的广播模式,通过本讲的学习,我们知道队列的又一用法!

感谢各位的阅读!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:RabbitMQ~广播消息,如需转载请自行联系原博主。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 存储 Java
【微服务】RabbitMQ七种消息收发方式🌱
MQ全称为Message Queue,即消息队列。“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。
575 0
【微服务】RabbitMQ七种消息收发方式🌱
|
消息中间件 存储 安全
|
消息中间件 存储 JSON
RabbitMQ消息模型之FanoutExchange消息模型实战
RabbitMQ消息模型之FanoutExchange消息模型实战
RabbitMQ消息模型之FanoutExchange消息模型实战
|
消息中间件 JavaScript 前端开发
JavaScript 连接消息(RabbitMQ)
JavaScript 连接消息(RabbitMQ)
JavaScript 连接消息(RabbitMQ)
|
消息中间件 NoSQL 关系型数据库
RabbitMQ消息丢失、积压、重复等解决方案
RabbitMQ消息丢失、积压、重复等解决方案
RabbitMQ消息丢失、积压、重复等解决方案
|
消息中间件 存储 NoSQL
springcloud:springboot整合RabbitMQ|RabbitMQ保证消息可靠性(三)
上一章我们讲解了rabbitmq的四种交换机类型、七种通讯方式。本章我们将整合springboot来向大家完整演示rabbitmq的使用,并说明如何保证消息的可靠性。
605 0
springcloud:springboot整合RabbitMQ|RabbitMQ保证消息可靠性(三)
|
消息中间件
SpringBoot+RabbitMQ 实现手动消息确认(ACK)下
SpringBoot+RabbitMQ 实现手动消息确认(ACK)下
SpringBoot+RabbitMQ 实现手动消息确认(ACK)下
|
消息中间件 Java 网络架构
SpringBoot整合RabbitMQ 实现五种消息模型
SpringBoot整合RabbitMQ 实现五种消息模型
261 2
|
消息中间件 测试技术
RabbitMQ消息模型之DirectExchange消息模型实战
RabbitMQ消息模型之DirectExchange消息模型实战
RabbitMQ消息模型之DirectExchange消息模型实战
|
消息中间件
13、RabbitMQ教程-消息的顺序性
13、RabbitMQ教程-消息的顺序性
212 0