当前位置: 首页 > news >正文

建设银行天津招聘网站滨州市住房和城乡建设部网站

建设银行天津招聘网站,滨州市住房和城乡建设部网站,出入长沙今天最新通知,wordpress 文章收费简介 发布订阅模式允许一个生产者向多个消费者发送消息。在RabbitMQ中实现发布订阅模式通常涉及以下几个关键组件: 生产者:负责生产并发送消息到RabbitMQ的Exchange(路由器)。Exchange:作为消息的中转站,…

简介

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

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

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

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

 生产者代码

在前面的模式中,我们使用了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");//声明一个新的队列,并将这个队列的名称赋值给变量 queueNamevar 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文件运行多次项目。

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

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

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

http://www.yayakq.cn/news/855252/

相关文章:

  • 网站内部优化经典案例网站
  • 深圳建企业网站公司网络营销软件下载
  • 宠物网站怎么做网站维护提示怎么做
  • 网站页脚怎么做能好看点做网站怎么选择服务器的大小
  • 广元网站建设价格wordpress query_post showpost参数
  • 南沙商城网站建设做的网站显示不了背景图片
  • 合肥++网站建设网上哪个网站教做西点
  • 哪里有做营销型网站的公司潍坊住房和城乡建设厅网站电话
  • 手机电脑网站一站式仓库管理系统界面
  • 端子东莞网站建设广州市番禺区住房和建设局网站
  • 网站设计建设一般多少钱山河集团建设有限公司网站
  • 旅行社网站设计方案照片做成视频的软件
  • 光谷网站建设哪家好建设银行网站不能登录不了
  • 广州pc网站建设网站建设游戏开发
  • 百度网盟 网站定向投放wordpress支付配置
  • ftp免费网站空间网站做好怎么开始做推广
  • 湖北长城建设实业有限公司网站烟台网站建设 58
  • 正规的网站建设学习网查网站关键词工具
  • 利用html5 监控网站性能做办公设备网站
  • vs2013做登录网站室内装修效果图制作
  • 网站开发的关系图和e-r图高端品牌网站定制
  • 响应式自适应织梦网站模板购物网站模板
  • 网站建设工作进度计划表网站建设可以帮助花店怎么样
  • 做一个营销型网站有哪些内容免费的微信小程序模板
  • 官方新闻平台有哪些怀化seo快速排名
  • 什么网站可以免费做视频咸宁网站建设多少钱
  • 北京网站设计学校网站建设公司推荐万维科技
  • 网站 活动页面wordpress 数组
  • 网站维护方法插画设计
  • 做网站怎么入账wordpress链接网盘