RabbitMQ七:交换机类型Exchange Types--Fanout 介绍
前言
最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange、Fanout exchange、Topic exchange、Headers exchange。
其中之前我们用过Direct exchange,Direct直接翻译过来就是"直接的,直的",在我们之前的案例中基本都是Direct类型。
其一:Direct Exchange – 处理路由键。需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配。这是一个完整的匹配。
如果一个队列绑定到该交换机上要求路由键 “key”,则只有被标记为“key”的消息才被转发,只会转发key。 Direct在前面案例中已经有案例,我们就不做重点了。
其二: Fanout Exchange – 不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。 (最实际开发中遇到的案例:你注册某网站,对方会给你邮箱和短信发送同样的内容.......)话不多说,今天的主角就是 Fanout Exchange,英语翻译(fanout :分列)
其三,其四,请看下回讲解,哈哈哈.....,
进入场景:::需求,某网站注册成功,同时给手机端和邮箱发同样的消息,(备注:代码中我会采用,一次性发100条消息,也是为了跟上篇文章作比较)
代码
发布端:
案例简述(比如:注册成功会有发送一百条同样的消息,这里是为了跟上篇文章做比较)
/// <summary>
/// fanout实现 模拟场景: 客户注册某某网站,消息提醒同一条消息,分别发送给短息和邮件方
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
using (var channel = HelpConnection.GetConnection().CreateModel())
{
//声明一个fanout类型的Exchange
channel.ExchangeDeclare("fanoutExchange", "fanout", true, false, null);
for (int i = ; i < ; i++)
{
var reamker = i % == ? "sms" : "emai";
var msg = Encoding.UTF8.GetBytes("内容:发送内容,我最帅" + i.ToString());
Console.WriteLine("内容:发送内容,"+i);
//不需要指定routingkey,指定了也没用.因为交换机是fanout类型
channel.BasicPublish("fanoutExchange",string.Empty, null, msg);
}
}
Console.WriteLine("发布成功");
Console.ReadKey();
}
效果图:
消费端
模拟场景:发布端已经发布100条数据,我们消费端模拟,当你输入登录邮箱的时候能看到发送的消息,你查看手机短信页面的时候查看到发送的消息;
/// <summary>
/// 消费者 fanout实现 模拟场景: 客户注册某某网站,消息提醒同一条消息,分别发送给短息和邮件方
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请选择登陆:1邮箱,2短信?");
var readline = Console.ReadLine();
//邮箱短信
if (readline == "" || readline == "")
{
var queueName = readline == "" ? "sms" : "emai";
using (var channel = HelpConnection.GetConnection().CreateModel())
{
channel.QueueDeclare(queueName, true, false, false, null);
channel.ExchangeDeclare("fanoutExchange", "fanout", true, false, null);
//不需要指定routingkey,指定了也没用.因为交换机是fanout类型
channel.QueueBind(queueName, "fanoutExchange", string.Empty, null);
var consumer = new EventingBasicConsumer(channel);
consumer.Received+=(mode,e)=>{
var msg=Encoding.UTF8.GetString(e.Body);
Console.WriteLine(queueName + "显示结果:" + msg);
};
channel.BasicConsume(queueName,true,consumer);
Console.ReadKey();
}
}
else
{
Console.WriteLine("输入有误,请重新输入!!");
}
}
}
效果图,
操作简述,由于队列消息我们在客户端创建的,所以,你启动消费端,输入邮箱和邮件的时候才能创建队列,之前案例中也有类似的demo,当然第一次创建的时候,肯定会把发布者第一发布的消息给消费了,当你发布第二次消息的时候,我们就能看消费者中代码创建的(100条)消息。整个过程最好你把代码敲一遍,很自然就能理解整个过程。
总结
我感觉这是Demo中学习运用,还需要在具体的实际项目中实践,一些代码如何去封装适合的场景,让我们一起写博文分享中前进吧;
- 博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!
- 小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。
RabbitMQ七:交换机类型Exchange Types--Fanout 介绍的更多相关文章
- RabbitMQ各种交换机类型Exchange Types介绍
最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange.Fanout exchange.Topic exchange.Headers exchange. 一.Direct E ...
- RabbitMQ的交换机类型(三)
RabbitMQ的交换机类型共有四种,是根据其路由过程的不同而划分成的 分别是Direct Exchange(直连交换机), Fanout Exchange(扇型交换机), Topic Excha ...
- RabbitMQ八:交换机类型Exchange Types--Topic介绍
前言 上一章节,我们说了两个类型,本章我们说一下其三:Topic Exchange Topic Exchange Topic Exchange – 将路由键和某模式进行匹配.此时队列需要绑定要一个模 ...
- 中间件系列三 RabbitMQ之交换机的四种类型和属性
概述本文介绍RabbitMQ中交换机类型和属性,主要内容如下: 交换机的作用交换机的类型:Direct exchange(直连交换机).Fanout exchange(扇型交换机).Topic exc ...
- RabbitMQ四种交换机类型介绍
RabbitMQ 原文地址: https://baijiahao.baidu.com/s?id=1577456875919174629&wfr=spider&for=pc 最新版本的 ...
- RabbitMQ与.net core(三) fanout类型Exchange 与 消息的过期时间 与 队列的存活时间
上一篇我们讲了关于direct类型的Exchange,这一片我们来了解一下fanout类型的Exchange. 1.Exchange的fanout类型 fanout类型的Exchange的特点是会把消 ...
- 快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示
在上一篇的最后,编写了一个C#驱动RabbitMQ的简单栗子,了解了C#驱动RabbitMQ的基本用法.本章介绍RabbitMQ的四种Exchange及各种Exchange的使用场景. 1 direc ...
- PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (二) -- Topic Exchange 和 Fanout Exchange
Topic Exchange 此模式下交换机,在推送消息时, 会根据消息的主题词和队列的主题词决定将消息推送到哪个队列. 交换机只会为 Queue 分发符合其指定的主题的消息. 向交换机发送消息时,消 ...
- RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...
随机推荐
- LruCache & DiskLruCache
在用户界面(UI)加载一张图片时很简单,然而,如果你需要加载多张较大的图像,事情就会变得更加复杂,.在许多情况下(如与像的ListView GridView或ViewPager的组件),屏幕上的图片的 ...
- Python爬虫开发【第1篇】【机器视觉及Tesseract】
ORC库概述 在读取和处理图像.图像相关的机器学习以及创建图像等任务中,Python 一直都是非常出色的语言.虽然有很多库可以进行图像处理,但在这里我们只重点介绍:Tesseract 1.Tesser ...
- [IT学习]Learn Python the Hard Way (Using Python 3)笨办法学Python3版本
黑客余弦先生在知道创宇的知道创宇研发技能表v3.1中提到了入门Python的一本好书<Learn Python the Hard Way(英文版链接)>.其中的代码全部是2.7版本. 如果 ...
- jeesite快速开发平台
兴致勃勃地下载下来准备好好研究一番,安装启动结果报错啦: java.lang.ClassNotFoundException: com.thinkgem.jeesite.modules.sys.list ...
- Win10快捷键总结
微软自发布Windows10以来,大部分的电脑系统都已更新.除了大量的新功能和界面改进,Windows 10中同样包含了一批新的键盘快捷键.熟练使用这些快捷键可以大大提高操作效率,很实用,推荐大家收藏 ...
- apache-ab并发负载压力测试 不错
ab -n 3000 -c 3000 http://www.test.com/ c 100 即:每次并发3000 个 n 10000 即: 共发送3000 个请求 ab -t 60 -c 100 ht ...
- maven项目没有错,但是在项目头上有红叉的解决方法
转自:https://blog.csdn.net/myblog_dhy/article/details/41695107 我在使用maven的过程中,要导入某个maven项目,导入的过程中会弹出一个框 ...
- combox组合框设置高度
组合框设置高度 转载 2013年10月24日 22:54:03 1033 MFC进行界面编程时,组合框CComboBox控件在可视化设计组件的时候是无法进行高度编辑的,但是我们在实际的项目中经常需要定 ...
- MVC视图中下拉框的使用
一.一般变量或对象的绑定 首先要在controller 中将选项设置成 selecList对象,并赋值给viewBag动态对象. public ActionResult Index(string mo ...
- springMVC实现基本文件夹压缩下载功能
将文件夹压缩后下载: @Slf4j public class Test { private static final String BASE_PATH = "/root/doc/" ...