RabbitMQ Exchange中的fanout类型
fanout 多播
在之前都是使用direct直连类型的交换机,通过routingkey来决定把消息推到哪个queue中。
而fanout则是把拿到消息推到与之绑定的所有queue中。
分析业务,怎样的场景需要它呢?某个用户注册了网站的用户,一般我们需要发送短信和邮件通知,莫非要在同一个consumer中把这两件事都做了?这不符合单一职责,可是发送的消息是一样的,只是方式不一样。要使用两种routingkey都发送一次?这显然也不是我们想要的。所以fanout出现了
fanout类型的exchange会把消息推到所有的queue中,所以不需要指定routingkey,指定了也没用!
下面通过代码来看
这里有两种需求,发短信与发邮件
//创建返回一个新的频道
using (var channel = RabbitMqHelper.GetConnection().CreateModel())
{ //发布一个消息
var msg = Encoding.UTF8.GetBytes($"二狗子");
//不需要指定routingkey,指定了也没用.因为交换机是fanout类型
channel.BasicPublish("fanoutExchange", routingKey: string.Empty, basicProperties: null, body: msg); Console.Write("发布成功!"); } Console.ReadKey();
这里是consumer部分的代码
bool flag = true;
string pattern = "";
while (flag)
{
Console.WriteLine("请选择Ccnsumer模式 1(发短信)/2(发邮件)");
pattern = Console.ReadLine();
if (pattern == "1" || pattern == "2")
flag = false;
else
Console.Write("请做出正确的选择");
} using (var channel = RabbitMqHelper.GetConnection().CreateModel())
{ //声明交换机 Fanout模式
channel.ExchangeDeclare("fanoutExchange", ExchangeType.Fanout, true, false, null);
//根据声明使用的队列
var queueName = pattern == "1" ? "sms" : "emai";
channel.QueueDeclare(queueName, true, false, false, null);
//进行绑定
channel.QueueBind(queueName, "fanoutExchange", string.Empty, null); //创建consumbers
var consumer = new EventingBasicConsumer(channel); consumer.Received += (sender, e) =>
{
var msg = Encoding.UTF8.GetString(e.Body); var action = (pattern == "1" ? "发短信" : "发邮件");
Console.WriteLine($"给{msg}{action}");
}; //进行消费
channel.BasicConsume(queueName, true, consumer); Console.ReadKey(); }
下面把程序运行起来,不同的consumer进行了不同的消费

RabbitMQ Exchange中的fanout类型的更多相关文章
- RabbitMQ fanout类型的Exchange
就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中. fanout这个 ...
- RabbitMQ与.net core(三) fanout类型Exchange 与 消息的过期时间 与 队列的存活时间
上一篇我们讲了关于direct类型的Exchange,这一片我们来了解一下fanout类型的Exchange. 1.Exchange的fanout类型 fanout类型的Exchange的特点是会把消 ...
- RabbitMQ Exchange类型详解
前言 在上一篇文章中,我们知道了RabbitMQ的消息流程如下: 但在具体的使用中,我们还需知道exchange的类型,因为不同的类型对应不同的队列和路由规则. 在rabbitmq中,exchange ...
- 四、RabbitMQ Exchange类型
RabbitMQ整体上是一个生产者与消费者模型,主要负责接收.存储和转发消息.可以把消息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ就好 ...
- RabbitMQ Exchange详解以及Spring中Topic实战
前言 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦. 业务需求 ...
- 5、RabbitMQ - Exchange之 fanout \ 【direct 关键字发送】 \ topic
pytho系列之 RabbitMQ - Exchange几种模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 Rab ...
- (七)RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中
原文:(七)RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中 前面第六章我们使用的是direct直连模式来进行消息投递和分发.本章将介绍如何使用fanout模式将消息推送到多 ...
- 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...
- python---RabbitMQ(2)exchange中订阅者模式fanout<广播>,(一对多,发布一条消息,多人同时接收)
fanout:广播:所有bind到此exchange的queue都可以接受到消息 生产者: # coding:utf8 # __author: Administrator # date: // # / ...
随机推荐
- 详细学习ORACLE JOBS
一点一点学习jobs的各个方面比较长,比较烦,但是应该看完后会对jobs比较好的应用 一.学习准备 开始dbms_job学习前,先认识一个参数job_queue_processes a.job_que ...
- DispatcherHelper
DispatcherHelper 通常,WPF 应用程序从两个线程开始:一个用于处理呈现, 一个用于管理 UI.呈现线程有效地隐藏在后台运行,而 UI 线程则接收输入.处理事件.绘制屏幕 以及运行应用 ...
- jQuery学习笔记(四):attr()与prop()的区别
这一节针对attr()与prop()之间的区别进行学习. 先看看官方文档是如何解释两者之间功能差异的: attr() Get the value of an attribute for the fir ...
- Bootstrap系列 -- 10. 网格布局
一. 实现原理 网格布局是通过容器的大小,平均分为12份(可以修改),再调整内外边距,和表格布局有点类似但是也存在区别. 实现步骤如下: (1) 数据行.row 必须包含在容器.container 中 ...
- Sql server使用Merge关键字做插入或更新操作
Merge是关于对于两个表之间的数据进行操作的. 要使用Merge的场景比如: 数据同步 数据转换 基于源表对目标表做Insert,Update,Delete操作 MERGE语句的基本语法: MERG ...
- json数据转换失败json_last_error int(4)
最近在程序中使用json_decode($data,true);转换失败, 并且使用 json_last_error();方法返回最后一次转换的错误,json_last_error();返回int(4 ...
- difference between append and appendTo
if you need append some string to element and need set some attribute on these string at the same ti ...
- java 计算地球上两点间距离
/** * 计算地球上任意两点(经纬度)距离 * * @param long1 * 第一点经度 * @param lat1 * 第一点纬度 * @param long2 * 第二点经度 * @para ...
- 网页之间信息传递方式(Cookie,Session)
1.使用header()函数的重定向方式实现网页跳转. EXE:header("Location: http://www.example.com/"); 2.URL的GET ...
- git的配置
git的配置: Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量. 这些环境变量,决定了 Git 在各个环节的具体工作方式和行为.这些变量可以存放在以下三个不 ...