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类型的更多相关文章

  1. RabbitMQ fanout类型的Exchange

    就目前来说,Exchange是与消息发送端有关的,因为它可以指定将消息发送到哪个或哪些队列中. 本篇文章介绍的fanout类型就是指定将消息群发到与Exchange绑定的所有队列中. fanout这个 ...

  2. RabbitMQ与.net core(三) fanout类型Exchange 与 消息的过期时间 与 队列的存活时间

    上一篇我们讲了关于direct类型的Exchange,这一片我们来了解一下fanout类型的Exchange. 1.Exchange的fanout类型 fanout类型的Exchange的特点是会把消 ...

  3. RabbitMQ Exchange类型详解

    前言 在上一篇文章中,我们知道了RabbitMQ的消息流程如下: 但在具体的使用中,我们还需知道exchange的类型,因为不同的类型对应不同的队列和路由规则. 在rabbitmq中,exchange ...

  4. 四、RabbitMQ Exchange类型

    RabbitMQ整体上是一个生产者与消费者模型,主要负责接收.存储和转发消息.可以把消息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ就好 ...

  5. RabbitMQ Exchange详解以及Spring中Topic实战

    前言 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦. 业务需求 ...

  6. 5、RabbitMQ - Exchange之 fanout \ 【direct 关键字发送】 \ topic

    pytho系列之 RabbitMQ - Exchange几种模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 Rab ...

  7. (七)RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中

    原文:(七)RabbitMQ消息队列-通过fanout模式将消息推送到多个Queue中 前面第六章我们使用的是direct直连模式来进行消息投递和分发.本章将介绍如何使用fanout模式将消息推送到多 ...

  8. 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...

  9. python---RabbitMQ(2)exchange中订阅者模式fanout<广播>,(一对多,发布一条消息,多人同时接收)

    fanout:广播:所有bind到此exchange的queue都可以接受到消息 生产者: # coding:utf8 # __author: Administrator # date: // # / ...

随机推荐

  1. 【LeetCode】95. Unique Binary Search Trees II

    Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) ...

  2. [MetaHook] Quake FMOD player demo

    CFMOD.h #ifndef CFMOD_H #define CFMOD_H #include "qfmod.h" struct Sound_t { char *pszName; ...

  3. 如何在 apache 中开启 gzip 压缩服务

    服务器设置 gzip 压缩是 web 开发里很普遍的做法.假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文 ...

  4. 前端程序员应该知道的15个 jQuery 小技巧

    下面这些简单的小技巧能够帮助你玩转jQuery. 返回顶部按钮 预加载图像 检查图像是否加载 自动修复破坏的图像 悬停切换类 禁用输入字段 停止加载链接 切换淡入/幻灯片 简单的手风琴 让两个div高 ...

  5. RHEL7挂载ISO做本地yum

    测试环境,网络yum源没有本地yum源下载速度快!Yum比起RPM装包的好处就是可以自己处理依赖关系,也就是自己安装相关的依赖包,用起来也是很方便,但是删包的时候也会删除依赖包,这里要非常小心 01. ...

  6. URL(待整合到HTTP书中哦)

    一:scheme://host.domain:port/path/filename scheme - 定义因特网服务的类型.最常见的类型是 http host - 定义域主机(http 的默认主机是 ...

  7. 写启动界面Splash的正确姿势,解决启动白屏(转)

    原文链接:http://www.jianshu.com/p/cd6ef8d3d74d 从我学习写第一个android项目以来,我都是这样写着启动界面: 在里面做一些事,比如:第一次启动时拷贝数据. 然 ...

  8. ESPCMS基本导航操作

    Espcms和dedecms一样,是用来建企业站的cms程序,功能强大,稳定,可以帮助您快速.便捷地新建一个企业网站.无忧主机向您推荐无忧主机php虚拟主机. 我们可以通过espcms设置来去掉比如购 ...

  9. 编写实现连接oracle数据库并返回Connection对象的Java工具类

    只需要实现一个功能,所以只写一个方法,为了方便调用,设为静态方法 package com.jv; import java.sql.Connection; import java.sql.DriverM ...

  10. 51nod 1040最大公约数和(欧拉函数)

    1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个n,求1-n这n个数,同n的最大公约数 ...