交换机主要包括如下4种类型:

Direct exchange(直连交换机)
Fanout exchange(扇型交换机)
Topic exchange(主题交换机)
Headers exchange(头交换机)
另外RabbitMQ默认定义一些交换机:

默认交换机
amq.* exchanges
还有一类特殊的交换机:Dead Letter Exchange(死信交换机)

Direct exchange(直连交换机)
直连型交换机(direct exchange)是根据消息携带的路由键(routing key)将消息投递给对应队列的,步骤如下:

将一个队列绑定到某个交换机上,同时赋予该绑定一个绑定键(bingding key)
当一个携带着路由值为R的消息被发送给直连交换机时,交换机会把它路由给绑定值同样为R的队列。
Fanout exchange(扇型交换机)
扇型交换机(funout exchange)将消息路由给绑定到它身上的所有队列。不同于直连交换机,路由键在此类型上不启任务作用。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的发送给这所有的N个队列

Topic exchange(主题交换机)
主题交换机(topic exchanges)中,队列通过绑定键绑定到交换机上,然后,交换机根据消息里的路由值,将消息路由给一个或多个绑定队列。

扇型交换机和主题交换机异同:

对于扇型交换机路由键是没有意义的,只要有消息,它都发送到它绑定的所有队列上
对于主题交换机,路由规则由BindingKey决定,只有路由值满足BindingKey的规则,消息才可以路由到对应的队列上

匹配规则
RoutingKey 为一个 点号’.’: 分隔的字符串。比如: java.xiaoka.show
BindingKey和RoutingKey一样也是点号“.“分隔的字符串。
BindingKey可使用 * 和 # 用于做模糊匹配,*匹配一个单词,#匹配多个或者0个

Headers exchange(头交换机)
类似主题交换机,但是头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。
此交换机有个重要参数:”x-match”

当”x-match”为“any”时,消息头的任意一个值被匹配就可以满足条件
当”x-match”设置为“all”的时候,就需要消息头的所有值都匹配成功
RabbitMQ默认定义一些交换机
在RabbitMQ默认定义一些交换机,主要如下:

默认交换机
默认交换机(default exchange)实际上是一个由RabbitMQ预先声明好的名字为空字符串的直连交换机(direct exchange)。它有一个特殊的属性使得它对于简单应用特别有用处:那就是每个新建队列(queue)都会自动绑定到默认交换机上,绑定的路由键(routing key)名称与队列名称相同。

如:当你声明了一个名为”hello”的队列,RabbitMQ会自动将其绑定到默认交换机上,绑定(binding)的路由键名称也是为”hello”。因此,当携带着名为”hello”的路由键的消息被发送到默认交换机的时候,此消息会被默认交换机路由至名为”hello”的队列中。即默认交换机看起来貌似能够直接将消息投递给队列,如同我们之前文章里看到一例子。

类似amq.*的名称的交换机

这些是RabbitMQ默认创建的交换机。这些队列名称被预留做RabbitMQ内部使用,不能被应用使用,否则抛出403 (ACCESS_REFUSED)错误

Dead Letter Exchange(死信交换机)
在默认情况,如果消息在投递到交换机时,交换机发现此消息没有匹配的队列,则这个消息将被悄悄丢弃。为了解决这个问题,RabbitMQ中有一种交换机叫死信交换机。当消费者不能处理接收到的消息时,将这个消息重新发布到另外一个队列中,等待重试或者人工干预。这个过程中的exchange和queue就是所谓的”Dead Letter Exchange 和 Queue”

交换机的属性
除交换机类型外,在声明交换机时还可以附带许多其他的属性,其中最重要的几个分别是:
Name:交换机名称
Durability:是否持久化。如果持久性,则RabbitMQ重启后,交换机还存在
Auto-delete:当所有与之绑定的消息队列都完成了对此交换机的使用后,删掉它
Arguments:扩展参数

RabbitMQ之交换机的四种类型和属性相关推荐

  1. Oracle和sql语言,SQL语言的四种类型和ORACLE运算符

    数据定义语言(DDL) 数据操作语言(DML) 数据控制语言(DCL) 事务控制语言(TCL) Data Definition Language(DDL) DDL使我们有能力创建或删除表格.也可以定义 ...

  2. k8s:Service的四种类型和三种代理模式

    概念 类型 ClusterIp 会缠上一个集群内部IP,其他pod可以通过这个集群内部IP访问到该组pod. 也能被node节点本身访问 NodePort 物理机上开启一个端口30001映射到node ...

  3. RabbitMQ的交换机类型和工作模式

    RabbitMQ的交换机类型有四种 1.direct 直流交换机: 根据消息的路由键routingkey,将消息以完全匹配的方式路由到指定的队列中. 这里的匹配指的是消息本身携带的路由键和队列与交换机 ...

  4. h5 先加载小图_交互基础:加载的10种类型和应用场景分析

    原文地址:白鹭漫谈(公众号) 作者:白鹭漫谈 目录: 一.为什么需要加载 二.常见的加载场景 三.加载的10种类型和分析 四.总结 一.为什么需要加载? 1 给用户反馈 在上篇<尼尔森10大可用 ...

  5. Intent四个重要属性

    Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递.通过其自带的属性,其实可以方便的完成很多较为复杂的操作.例如直接调用拨号功能.直接自动调用合适的程序打开不同类型的 ...

  6. Intent中的四个重要属性——Action、Data、Category、Extras

    Intent中的四个重要属性--Action.Data.Category.Extras 支持原文:点击链接进入原文阅读-->http://www.cnblogs.com/wisekingokok ...

  7. RPA学习天地:艺赛旗RPA机器人的4种类型和区别介绍

    RPA学习天地为大家整理了RPA培训视频,欢迎关注,同步获取最新完整资料请关注 目前艺赛旗的有人值守机器人(助手机器人)和无人值守机器人都是需要先在控制台进行创建和配置账号才能使用,用户必须登录机器人 ...

  8. 互联网公司的3种类型和13种业务模式

    据国外媒体报道,美国社交理财投资网站Cake Financial创始人史蒂文·卡朋特(Steven Carpenter)日前在知名科技博客TechCrunch上撰文,探讨了互联网公司的3种类型和13种 ...

  9. WPF教程(四)RelativeSource属性(转)

    WPF教程(四)RelativeSource属性 2018年08月13日 15:11:56 yangwenxue1989 阅读数:749 我们进行Bingding时,如果明确知道数据源的Name,就能 ...

最新文章

  1. 揭秘:人工智能迅猛发展的本质是什么?
  2. SAP Spartacus里cx-carousel的实现
  3. Java 串口 mysql_java串口通讯
  4. C#LeetCode刷题之#824-山羊拉丁文​​​​​​​(Goat Latin)
  5. python在json文件中查找指定数据_Python中json的取值 如何使用python提取json中指定字段的数据...
  6. IE6绿色中文版,支持在Win7、Win8下完美运行
  7. 网页设计-[CSS+DIV设计实例:超酷的竖排导航栏 ]
  8. Java并发(七)——并发容器
  9. Nginx源码分析 - 核心模块初始化顺序,根据ctx创建上下文
  10. 【视频编码格式】全面解析
  11. 【优化求解】基于粒子群算法求解仓库成本控制优化问题含Matlab源码
  12. 计算机网络中的广播是指什么,计算机网络中的广播和多播指的是什么?
  13. 台大林轩田机器学习课程笔记2----机器学习的分类
  14. 厦门大学计算机科学夏令营过程,厦门大学信息学院计算机系夏令营学生见面会如期召开-厦门大学计算机科学系...
  15. Win10没有蓝牙功能怎么办 win10蓝牙图标不见了怎么办
  16. 如何在计算机桌面上添加小工具,怎么在电脑的桌面小工具里添加便签
  17. Mybatis中的OGNL使用总结=
  18. 20190401每周精品之理财
  19. Adobe Lightroom Classic 2021(LR 2021)
  20. 争对让望对思野葛对山栀注解_中华经典名著《笠翁对韵》全文解释(上卷四支)...

热门文章

  1. Team Task:DP
  2. java中无符号类型的处理[转]
  3. 基于 Docker 的现代软件供应链
  4. 用js操作table、tr、td 「字体样式及TD背景图片」
  5. 谷歌施密特:美人才签证政策让硅谷转移到中国
  6. debian 图形界面安装
  7. qt build错误
  8. JBoss EAP应用获取运行模式、相关路径及节点信息
  9. 转载:原生JavaScript实现Ajax
  10. 51Nod1556 计算