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

RabbitMQ提供了四种Exchange:fanout,direct,topic,header。但常用的主要是fanout,direct,topic。

性能排序:fanout > direct >> topic。比例大约为11:10:6

一.Fanout Exchange

任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。

1.可以理解为路由表的模式

2.这种模式不需要RouteKey

3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。

4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。

二.Direct Exchange

任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue

1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。

2.这种模式下不需要将Exchange进行任何绑定(binding)操作

3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

三.Topic Exchange

任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上

1.这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。

2.这种模式需要RouteKey,也许要提前绑定Exchange与Queue。

3.在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。

4.“#”表示0个或若干个关键字,“*”表示一个关键字。如“log.*”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。

5.同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。

最新文章

  1. Python自动化之django URL
  2. Sass学习之路(5)——变量
  3. HtmlAgilityPack解析器在WP8.1下报错,不仅如此,社交化分享也报错。
  4. Java第一天:安装搭建Java开发环境
  5. webStorm破解说明
  6. 重新理解:ASP.NET 异步编程(转)
  7. JQuery事件的链式写法
  8. Android集成支付宝接口 实现在线支付
  9. BZOJ 3998 [TJOI 2015] 弦论 解题报告
  10. 【leetcode】Single Number II
  11. C#6.0新特性之字符串嵌入 String Interpolation
  12. 496. Next Greater Element I
  13. 阅读Java Native源码前的准备
  14. c#两个listbox怎么把内容添加到另外个listbox
  15. Python判断字符串是否xx开始或结尾
  16. Git 补丁操作
  17. 专访姚冬:All-in-One,智能时代下企业需要更快速的变革
  18. sklearn获得某个参数的不同取值在训练集和测试集上的表现的曲线刻画
  19. yocto-sumo源码解析(八): ProcessServer
  20. Error_Unix Shell_syntax error near unexpected token `fi'

热门文章

  1. CSRF攻击详解(转)
  2. SQL Server批量数据导出导入BCP&Bulk使用
  3. centos 配置redis
  4. DIY自己的GIS程序(2)——局部刷新
  5. DIY自己的GIS程序(1)——起航
  6. Spring boot 集成ckeditor
  7. CentOS 7 集群使用NTP进行时间同步
  8. rest-framework框架的基本组件
  9. Refactoring #002 Inline Method
  10. 蜻蜓FM下载文件名还原