- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
- API参考
- SDK参考
-
常见问题
-
实例问题
- RabbitMQ使用的版本是多少?
- RabbitMQ实例SSL连接的协议版本号是多少?
- 创建实例时为什么无法查看子网和安全组等信息?
- RabbitMQ集群实例如何均衡分发请求到每个虚拟机?
- RabbitMQ实例集群内部的队列是否有冗余备份?
- RabbitMQ实例是否支持持久化,如何定时备份数据?
- RabbitMQ实例开启SSL后,证书怎么获取?
- RabbitMQ实例的SSL开关是否支持修改?
- RabbitMQ实例是否支持扩容?
- RabbitMQ支持双向认证吗?
- RabbitMQ支持升级CPU和内存吗?
- 如何关闭RabbitMQ的WebUI?
- 实例是否支持修改可用区?
- 如何获取region id?
- 为什么不能选择2个可用区?
- 单机RabbitMQ实例如何变更为集群实例?
- RabbitMQ实例创建后,能修改VPC和子网吗?
- 连接问题
- 消息问题
- 监控告警问题
-
实例问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
Exchange类型介绍
Exchange主要包含6种类型:Direct、Fanout、Topic、Header、x-delayed-message和x-consistent-hash。
Direct Exchange
工作原理:
- 将一个Queue绑定到某个Direct Exchange上,并赋予该绑定一个Routing Key。
- 当一个携带着Routing Key的消息被发送给Direct Exchange时,Direct Exchange会将它路由给与绑定Queue时设置的Routing Key完全匹配的Queue。
路由规则:
Direct Exchange会将消息路由到Routing Key完全匹配的Queue中。
应用场景:
Direct Exchange常用于单播路由。
应用示例:

如上图所示,Message A将会发送到Queue 1和Queue 2中,Message B将会发送到Queue 3中。
Fanout Exchange
工作原理:
如果有N个Queue绑定了Fanout Exchange,当Fanout Exchange接收到一个消息时,会将它分别路由到这N个Queue中。Fanout Exchange是所有Exchange类型中转发消息最快的。
路由规则:
Fanout Exchange将消息路由到所有与其绑定的Queue中。
应用场景:
Fanout Exchange常用于广播消息。
应用示例:

如上图所示,Message A将会发送到Queue 1和Queue 2中。
Topic Exchange
工作原理:
- 将一个Queue绑定到某个Topic Exchange上,并赋予该绑定一个Routing Key,此Routing Key包含通配符。
- 当一个携带着Routing Key的消息被发送给Topic Exchange时,Topic Exchange会将Routing Key进行通配符匹配,如果匹配成功,则将它路由给对应的Queue。
Topic Exchange的通配符包括“*”和“#”,单词间通过“.”隔开,例如test.#。
- *表示一个单词。
- #表示零个、一个或者多个单词。
路由规则:
Topic Exchange会将Routing Key进行通配符匹配,然后将消息路由到匹配成功的Queue中。
应用场景:
Topic Exchange常用于多播路由。
应用示例:

如上图所示,Message A将会发送到Queue 1和Queue 2,Message B将会发送到Queue 1、Queue 2和Queue 3,Message C将会发送到Queue 3。
Header Exchange
工作原理:
- 将一个Queue绑定到某个Header Exchange上,并设置绑定属性键值对。
- 将消息发送给Header Exchange时,需要设置消息的Header属性键值对,Header Exchange根据消息Headers属性键值对和绑定属性键值对的匹配情况路由消息。
匹配算法由一个特殊的绑定属性键值对控制。该属性为“x-match”,它的取值如下:
- x-match=all,表示所有的消息Headers属性键值对和绑定属性键值对都匹配才会路由消息。
- x-match=any,表示只要有一组消息Headers属性键值对和绑定属性键值对匹配,就会路由消息。
路由规则:
Header Exchange根据消息Headers属性键值对和绑定属性键值对的匹配情况路由消息。
应用示例:

如上图所示,Message A将会发送到Queue 1和Queue 2,Message B将会发送到Queue 2。
x-delayed-message Exchange
工作原理:
- 创建x-delayed-message Exchange,并指定Exchange类型,Exchange类型用于确定路由规则。支持x-delayed-message的Exchange类型为:Direct Exchange、Fanout Exchange、Topic Exchange和Header Exchange。
- 将一个Queue绑定到某个x-delayed-message Exchange。
- 将消息发送给x-delayed-message Exchange时,需要设置消息的Header属性“x-delay”,“x-delay”用于指定消息延迟投递的时间,单位为毫秒。
- x-delayed-message Exchange接收到消息后,不会立刻投递,而是在到达延迟投递时间后才会根据Exchange类型的路由规则路由消息。
路由规则:
根据创建x-delayed-message Exchange时设定的Exchange类型的路由规则路由消息。
应用场景:
x-delayed-message Exchange适用于需要延时投递消息的场景。
应用示例:
以Exchange类型为“direct”介绍。

如上图所示,x-delayed-message Exchange在接收到Message A后,等待100毫秒,然后将Message A发送到Queue 1和Queue 2。
x-consistent-hash Exchange
工作原理:
- 将一个Queue绑定到某个x-consistent-hash Exchange上,并赋予该绑定一个Routing Key,此Routing Key需要设置为正整数。Routing Key表示Queue的权重。数值越大,Queue的权重越大,分发消息时接收到的消息越多。
- 当一个携带着Routing Key的消息被发送给x-consistent-hash Exchange时,x-consistent-hash Exchange会根据Routing Key计算出一个hash值,并按照hash值将消息分发给对应的Queue。
路由规则:
x-consistent-hash Exchange会根据Routing Key计算出一个hash值,按照hash值将消息路由到对应的Queue中。
应用示例:

如上图所示,x-consistent-hash Exchange在接收到Message A和Message B后,会根据它们携带的Routing Key计算出一个hash值,根据hash值将消息路由到对应的Queue中。Queue 1的权重为1,Queue 2的权重为2,因此Queue 2接收到的消息数量会是Queue 1的2倍。