前言

最新版本的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条消息,也是为了跟上篇文章作比较)

代码

发布端:

案例简述(比如:注册成功会有发送一百条同样的消息,这里是为了跟上篇文章做比较)

  1. /// <summary>
  2. /// fanout实现 模拟场景: 客户注册某某网站,消息提醒同一条消息,分别发送给短息和邮件方
  3. /// </summary>
  4. /// <param name="args"></param>
  5. static void Main(string[] args)
  6. {
  7. using (var channel = HelpConnection.GetConnection().CreateModel())
  8. {
      //声明一个fanout类型的Exchange
  9. channel.ExchangeDeclare("fanoutExchange", "fanout", true, false, null);
  10. for (int i = ; i < ; i++)
  11. {
  12. var reamker = i % == ? "sms" : "emai";
  13. var msg = Encoding.UTF8.GetBytes("内容:发送内容,我最帅" + i.ToString());
  14. Console.WriteLine("内容:发送内容,"+i);
  15. //不需要指定routingkey,指定了也没用.因为交换机是fanout类型
  16. channel.BasicPublish("fanoutExchange",string.Empty, null, msg);
  17. }
  18. }
  19. Console.WriteLine("发布成功");
  20. Console.ReadKey();
  21. }

效果图:

消费端

模拟场景:发布端已经发布100条数据,我们消费端模拟,当你输入登录邮箱的时候能看到发送的消息,你查看手机短信页面的时候查看到发送的消息;

  1. /// <summary>
  2. /// 消费者 fanout实现 模拟场景: 客户注册某某网站,消息提醒同一条消息,分别发送给短息和邮件方
  3. /// </summary>
  4. /// <param name="args"></param>
  5. static void Main(string[] args)
  6. {
  7. while (true)
  8. {
  9. Console.WriteLine("请选择登陆:1邮箱,2短信?");
  10. var readline = Console.ReadLine();
  11. //邮箱短信
  12. if (readline == "" || readline == "")
  13. {
  14. var queueName = readline == "" ? "sms" : "emai";
  15. using (var channel = HelpConnection.GetConnection().CreateModel())
  16. {
  17. channel.QueueDeclare(queueName, true, false, false, null);
  18. channel.ExchangeDeclare("fanoutExchange", "fanout", true, false, null);
  19. //不需要指定routingkey,指定了也没用.因为交换机是fanout类型
  20. channel.QueueBind(queueName, "fanoutExchange", string.Empty, null);
  21. var consumer = new EventingBasicConsumer(channel);
  22. consumer.Received+=(mode,e)=>{
  23. var msg=Encoding.UTF8.GetString(e.Body);
  24. Console.WriteLine(queueName + "显示结果:" + msg);
  25. };
  26. channel.BasicConsume(queueName,true,consumer);
  27. Console.ReadKey();
  28. }
  29. }
  30. else
  31. {
  32. Console.WriteLine("输入有误,请重新输入!!");
  33. }
  34. }
  35. }

效果图,

操作简述,由于队列消息我们在客户端创建的,所以,你启动消费端,输入邮箱和邮件的时候才能创建队列,之前案例中也有类似的demo,当然第一次创建的时候,肯定会把发布者第一发布的消息给消费了,当你发布第二次消息的时候,我们就能看消费者中代码创建的(100条)消息。整个过程最好你把代码敲一遍,很自然就能理解整个过程。

总结

我感觉这是Demo中学习运用,还需要在具体的实际项目中实践,一些代码如何去封装适合的场景,让我们一起写博文分享中前进吧;

  • 博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!
  • 小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。

RabbitMQ七:交换机类型Exchange Types--Fanout 介绍的更多相关文章

  1. RabbitMQ各种交换机类型Exchange Types介绍

    最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange.Fanout exchange.Topic exchange.Headers exchange. 一.Direct E ...

  2. RabbitMQ的交换机类型(三)

      RabbitMQ的交换机类型共有四种,是根据其路由过程的不同而划分成的 分别是Direct Exchange(直连交换机), Fanout Exchange(扇型交换机), Topic Excha ...

  3. RabbitMQ八:交换机类型Exchange Types--Topic介绍

    前言 上一章节,我们说了两个类型,本章我们说一下其三:Topic Exchange Topic Exchange  Topic Exchange – 将路由键和某模式进行匹配.此时队列需要绑定要一个模 ...

  4. 中间件系列三 RabbitMQ之交换机的四种类型和属性

    概述本文介绍RabbitMQ中交换机类型和属性,主要内容如下: 交换机的作用交换机的类型:Direct exchange(直连交换机).Fanout exchange(扇型交换机).Topic exc ...

  5. RabbitMQ四种交换机类型介绍

    RabbitMQ  原文地址: https://baijiahao.baidu.com/s?id=1577456875919174629&wfr=spider&for=pc 最新版本的 ...

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

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

  7. 快速掌握RabbitMQ(二)——四种Exchange介绍及代码演示

    在上一篇的最后,编写了一个C#驱动RabbitMQ的简单栗子,了解了C#驱动RabbitMQ的基本用法.本章介绍RabbitMQ的四种Exchange及各种Exchange的使用场景. 1 direc ...

  8. PHP 下基于 php-amqp 扩展的 RabbitMQ 简单用例 (二) -- Topic Exchange 和 Fanout Exchange

    Topic Exchange 此模式下交换机,在推送消息时, 会根据消息的主题词和队列的主题词决定将消息推送到哪个队列. 交换机只会为 Queue 分发符合其指定的主题的消息. 向交换机发送消息时,消 ...

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

    RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四种Exchange:fanout,direct, ...

随机推荐

  1. mac下配置phonegap(cordova)5.1.1开发环境

    眼下最新的cordova的版本号是5.1.1,在mac下搭建开发环境过程例如以下: 1)首先安装NODEJS环境 进入官网: http://nodejs.org/ .眼下的版本号: v0.12.7 点 ...

  2. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  3. MySql InnoDb还原工具

    通过任意文件下载找到了mysql的备份,表类型是独享式innodb,由一个frm文件和一个ibd文件组成. 本以为直接复制到本地的mysql数据目录中即可恢复数据,但在查询时却发现并不如所愿: mys ...

  4. Xcode升级插件失效解决办法-升级版

    Xcode升级插件失效解决办法 每每升级Xcode,第三方插件总是中枪.解决办法也基本是依据http://joeshang.github.io/2015/04/10/fix-xcode-upgrade ...

  5. Thinking in Java -- 类型信息RTTI

    Thinking in Java – 类型信息 个人感觉 java 中的比較难的部分了,在看了些netty源代码发现事实上这块很实用. 这章重点是RTTI和反射.先说下自己的理解 RTTI是执行时识别 ...

  6. 【IOS】启动画面

    总述: 两种方式,一种是使用系统自带的.按规则定义启动图片名称就可以,显示为1秒,要想延长时间,用[nsthread ​ sleepForTimeInterval:5.0] ,还有一种就是自己定义ui ...

  7. 借助ltp 逐步程序化实现规则库 文本生成引擎基于规则库和业务词库 去生成文本

    [哪个地方做什么的哪家靠谱?地名词库行业.业务词库]苏州做网络推广的公司哪家靠谱?苏州镭射机维修哪家最专业?昆山做账的公司哪家比较好广州称重灌装机生产厂家哪家口碑比较好 [含有专家知识]郑州律师哪个好 ...

  8. HDU4704:Sum(欧拉降幂公式)

    Input 2 Output 2 Sample Input 2 由公式,ans=2^(N-1)%Mod=2^((N-1)%(Mod-1)+(Mod-1)) %Mod. 注意:降幂的之后再加一个Mod- ...

  9. Nginx反向代理服务器、负载均衡和正向代理

    Nginx("engine x")是一个高性能的 HTTP 和反向代理服务器,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日.官方测试 nginx 能够支撑5万 ...

  10. ubuntu下7z文件的解压方法(转载)

    转自:http://qtlinux.blog.51cto.com/3052744/569406 打开终端,键入以下命令: apt-get install p7zip-full 控制台会打出以下信息: ...