C#使用RabbitMQ-3_发布订阅模式(扇形交换机)

这篇具有很好参考价值的文章主要介绍了C#使用RabbitMQ-3_发布订阅模式(扇形交换机)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

发布订阅模式允许一个生产者向多个消费者发送消息。在RabbitMQ中实现发布订阅模式通常涉及以下几个关键组件:

  1. 生产者:负责生产并发送消息到RabbitMQ的Exchange(路由器)。
  2. Exchange:作为消息的中转站,根据不同的规则将消息路由到一个或多个队列。
  3. 队列:存储消息的缓冲区,每个消费者有自己的独立队列。
  4. 消费者:从自己的队列中接收并消费消息。

在这种模式下,生产者发送的消息不是直接发送到特定的队列,而是发送给Exchange。Exchange根据配置的规则决定如何处理这些消息。例如,它可以将消息路由到一个特定的队列,也可以将消息路由到多个队列,或者在某些情况下废弃消息。

在实际应用中,发布订阅模式常用于构建实时通信系统、通知服务、日志系统等场景,其中多个消费者需要接收来自同一生产者的消息。这种模式的优势在于能够实现一对多的通信,使得消息的分发更加灵活和高效。

C#使用RabbitMQ-3_发布订阅模式(扇形交换机),RabbitMQ,rabbitmq,分布式,发布订阅模式

 生产者代码

在前面的模式中,我们使用了channel.QueueDeclare()来声明队列。这里不需要了

channel.QueueDeclare("hello", true, false, false, null);

在发布订阅模式中,生产者只需要将消息发送到交换机上,然后由交换机根据绑定规则将消息路由到一个或多个队列中。消费者则可以从自己的队列中获取并处理这些消息。

因此,我们这里只声明一个扇形交换机,并将消息发布到该交换机上即可。而具体的队列声明和绑定操作可以在消费者端进行。

在前面的第一章和第二章中,我们都没有声明交换机,这是因为RabbitMQ中有一个默认的交换机,称为空字符串名称的默认交换机。当生产者发送消息但没有指定交换机时,消息会被发送到这个默认交换机。同样,当创建队列但没有指定队列与交换机的绑定关系时,队列会自动绑定到默认交换机上。RabbitMQ提供了几种内置的交换机类型,如直接交换(direct)、扇形交换(fanout)、主题交换(topic)和头交换(headers)等,以满足不同的业务场景需求。

class MyClass
{
    public static void Main(string[] args)
    {
        var factory = new ConnectionFactory();
        factory.HostName = "localhost"; //RabbitMQ服务在本地运行
        factory.UserName = "guest"; //用户名
        factory.Password = "guest"; //密码

        //创建连接
        using (var connection = factory.CreateConnection())
        {
            //创建通道
            using (var channel = connection.CreateModel())
            {
                //声明了一个扇形交换机(fanout exchange),命名为"hello"
                channel.ExchangeDeclare("hello", "fanout");

                string msg;
                Console.WriteLine("请输入要发送的消息内容:");
                while (!string.IsNullOrEmpty(msg = Console.ReadLine()))
                {
                    var body = Encoding.UTF8.GetBytes(msg);

                    channel.BasicPublish("hello", "", null, body); //开始传递
                    Console.WriteLine("已发送: {0}", msg);
                }
            }
        }
    }
}

消费者代码

我们通过channel.QueueDeclare().QueueName;声明一个新的队列,如果这个方法声明队列,RabbitMQ会自动为你生成一个独一无二的队列名称

var queueName = channel.QueueDeclare().QueueName;
channel.QueueBind(queueName, "hello", "");

然后将队列的名称赋值给变量queueName。将该队列绑定到之前声明的扇形交换机hello上,使用空字符串作为路由键。每次运行这个项目时,都会创建一个新的队列并将其绑定到交换机上。这样,多个消费者可以同时连接到同一个交换机,并从不同的队列中接收消息。

class MyClass
{
    static void Main(string[] args)
    {
        //创建连接工厂
        var factory = new ConnectionFactory();
        factory.HostName = "localhost";
        factory.UserName = "guest";
        factory.Password = "guest";
        //创建连接
        using (var connection = factory.CreateConnection())
        {
            //创建通道
            using (var channel = connection.CreateModel())
            {
                //声明了一个扇形交换机(fanout exchange),命名为"hello"
                channel.ExchangeDeclare("hello", "fanout");
                
                //声明一个新的队列,并将这个队列的名称赋值给变量 queueName
                var queueName = channel.QueueDeclare().QueueName;
                channel.QueueBind(queueName, "hello", "");
                //事件的基本消费者
                var consumer = new EventingBasicConsumer(channel);

                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body.ToArray();
                    var message = Encoding.UTF8.GetString(body);

                    Console.WriteLine("已接收: {0}", message);
                };

                channel.BasicConsume(queueName, true, consumer);
                Console.ReadKey();
            }
        }
    }
}

代码演示

和我前面文章的步骤一样,将消费者先进行发布打包,双击.exe文件运行多次项目。

C#使用RabbitMQ-3_发布订阅模式(扇形交换机),RabbitMQ,rabbitmq,分布式,发布订阅模式

我们前面提到的使用channel.QueueDeclare().QueueName;声明一个新的队列,在RabbitMQ管理界面可以看到有三个自动生成名称的队列。

C#使用RabbitMQ-3_发布订阅模式(扇形交换机),RabbitMQ,rabbitmq,分布式,发布订阅模式

然后我们启动生产者,并随机发送几条消息

C#使用RabbitMQ-3_发布订阅模式(扇形交换机),RabbitMQ,rabbitmq,分布式,发布订阅模式

再回到消费者,我们运行的三个消费端都同时的收到了消息!

C#使用RabbitMQ-3_发布订阅模式(扇形交换机),RabbitMQ,rabbitmq,分布式,发布订阅模式文章来源地址https://www.toymoban.com/news/detail-833252.html

到了这里,关于C#使用RabbitMQ-3_发布订阅模式(扇形交换机)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring RabbitMQ那些事(1-交换机配置&消息发送订阅实操)

    在上一节 RabbitMQ中的核心概念和交换机类型 中我们介绍了RabbitMQ中的一些核心概念,尤其是各种交换机的类型,接下来我们将具体讲解各种交换机的配置和消息订阅实操。 我们先上应用启动配置文件 application.yml ,如下: 备注:这里我们指定了 RabbitListenerContainerFactory 的类型

    2024年01月17日
    浏览(30)
  • 利用消息中间件RabbitMQ创建队列以及扇出(Fanout)、订阅(Direct)、主题(Topic)交换机来完成消息的发送和监听接收(完整版)

    目录 一、前期项目环境准备 1.1父项目以及子项目 1.2配置pom.xml 1.3配置application.yml 二、扇出(Fanout) 交换机实现消息的发送和接收 2.1编写子项目consumer(消费者,接收消息)的代码实现扇出(Fanout)交换机接收消息 2.1.1consumer子项目结构 2.1.2FanoutConfig类的实现扇出(Fanout)交

    2024年02月05日
    浏览(37)
  • RabbitMQ发布与订阅模式类型

    🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Linux专栏 🔥欢迎大佬指正,一起学习!一起加油! 工作队列背后的假设是每个任务都是 只交付给一名工人。在这一部分中,我们将做一些事情 完全不同的 - 我们将向多个传递消息 消

    2024年02月02日
    浏览(31)
  • RabbitMQ学习笔记(消息发布确认,死信队列,集群,交换机,持久化,生产者、消费者)

    MQ(message queue):本质上是个队列,遵循FIFO原则,队列中存放的是message,是一种跨进程的通信机制,用于上下游传递消息。MQ提供“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后消息发送上游只需要依赖MQ,不需要依赖其它服务。 功能1:流量消峰 功能2:应用解耦 功

    2024年02月07日
    浏览(34)
  • springboot rabbitmq 发布订阅 广播模式

    根据amqp协议、rabbitmq入门、springboot集成rabbitmq 可知,rabbitmq的广播模式关键是使用fanout类型的exchange,fanout exchange会忽略message中的routing-key、queue中的binding-key,发给绑定exchange的全部queue。 实现发布订阅(广播模式)的关键在于对exchange类型的理解,可参考amqp协议、rabbitmq入门

    2024年02月02日
    浏览(30)
  • RabbitMQ入门案例之发布订阅模式

    本文章主要介绍RabbitMQ的发布订阅模式,该模式下,消息为广播形式,一经发布则会进入交换机绑定的队列中,详细介绍可以阅读官方文档。 官网文档地址:https://rabbitmq.com/getstarted.html RabbitMQ中的发布与订阅模式是一种消息传递的方式,用于在分布式系统中传递消息。 在该模

    2024年02月09日
    浏览(47)
  • RabbitMQ 发布订阅模式,routing路由模式,topic模式

    发布订阅模式 一个消息可以由多个消费者消费同一个消息  消费者1和2同时消费了该消息 举例  消费者1和2同时消费了该消息,比如说消息是发短信,发邮件,  那么1和发短息  2可以发邮件 routing路由模式 就是说哪些让谁干 哪些让谁干区分出来 也可以让所有消费者都消费 选择

    2024年02月02日
    浏览(42)
  • 【RabbitMQ四】——RabbitMQ发布订阅模式(Publish/Subscribe)

    通过本篇博客能够简单使用RabbitMQ的发布订阅模式。 本篇博客主要是博主通过官网以及学习他人的博客总结出的RabbitMQ发布订阅模式。其中如果有误欢迎大家及时指正。 发布订阅模式的核心是生产者生产的消息,其他消费者都可以收到该生产者生产的消息。 由于发布订阅模式

    2024年02月02日
    浏览(27)
  • RabbitMQ--04--发布订阅模式 (fanout)-案例

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @RabbitListener和@RabbitHandler的使用 OrderService OrderServiceImpl 在项目的test中发送请求 访问网址: http://localhost:15672/#/queues yml配置 SmsConsumerService、SmsConsumerServiceImpl EmailConsumerService、EmailConsumerServiceImpl DuanxinCo

    2024年04月14日
    浏览(33)
  • RabbitMQ的Publish/Subscribe发布订阅模式详解

    各位小伙伴很久不见了,今儿又要给大家分享干货了。我们知道RabbitMQ有简单模式、工作队列模式、发布订阅模式、路由模式、主题模式、远程过程调用模式、发布者确认模式等。这么多模式,你可能一下子很难全部吸收,今天袁老师主要给大家介绍发布订阅模式Publish/Subsc

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包