在 RabbitMQ 集群中,交换机(Exchange)负责接收和分发消息。生产者发送消息时,并非直接投递到 Queue,而是先将消息发送到 Exchange。Exchange 会根据路由键(Routing Key)寻找匹配的 Queue:若找到匹配的 Queue,则将消息存入;若未找到,则丢弃消息或者发送到备用 Exchange。
约束与限制
限制类型 | 开源托管版 | Serverless 版 |
数量限制 | 一个 Vhost 下最多支持创建 1000个 Exchange。 | 一个 Vhost 下最多支持创建 100个 Exchange。 |
默认 Exchange 限制 | Vhost 创建后会预设8个默认 Exchange:(AMQP default exchange)、amq.direct、amq.fanout、amq.headers、amq.match、amq.rabbitmq.event、amq.rabbitmq.trace、amq.topic,不支持被删除。其中: AMQP default exchange 默认绑定到每个 Queue,routing key 等于 Queue 名称,其绑定关系无法取消或删除。 amq.rabbitmq.event 用于事件查询,默认与名为 tdmq_event_handle 的默认 Queue 绑定。 amq.rabbitmq.trace 用于消息追踪。 | Vhost 创建后会预设1个名为“amq.default”的默认 Exchange,不支持被删除。 |
前提条件
操作步骤
1. 登录 TDMQ RabbitMQ 控制台。
2. 在左侧导航栏选择集群管理 > Exchange 页签,选择好 Vhost 后,单击新建进入创建 Exchange 页面。
3. 在新建 Exchange 对话框中,填写以下信息。
参数 | 说明 |
当前 Vhost | 表示正在给哪个 Vhost 创建 Exchange。 |
Exchange 名称 | 填写 Exchange 名称,需符合命名规则:1-64个字符,只能包含字母、数字、“.”、“-”及“_”。 Exchange 创建后不能修改名称。 |
路由类型 | direct:该类型 Exchange 会把消息路由到 RoutingKey 和 BindingKey 完全匹配的 Queue 中。 fanout:该类型 Exchange 会将消息路由到所有与其绑定的 Queue 中。 topic:该类型 Exchange 支持多条件匹配和模糊匹配,即使用 Routing Key 模式匹配和字符串比较的方式将消息路由至与其绑定的 Queue 中。 headers:与 Routing Key 无关,匹配机制是匹配消息中的 Headers 属性信息。在绑定 Queue 与 Headers Exchange 之前声明一个 map 键值对,通过这个 map 对象实现消息队列和交换机的绑定。当消息发送到 RabbitMQ 时会取到该消息的 Headers 与 Exchange 绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。 X-Delayed-Message:这是一种自定义的 Exchange 类型,用于实现延迟消息传递。当将消息发送到 X-Delayed-Message 类型的交换机时,可以为消息设置一个延迟时间。RabbitMQ 会在延迟时间结束后,将消息路由到与其绑定的队列中。这种类型的交换机允许您在发送消息时控制消息何时被传递给消费者,从而实现消息的定时和延迟处理。 说明: 如下需要创建此类型 Exchange,请参考如下说明: X-Delayed-Message 类型并不是 RabbitMQ 的内置类型,需要通过开启插件 rabbitmq_delayed_message_exchange 来实现,详情请参见 插件管理。开启该插件后,在控制台新建 Exchange 时就可以选择 x-delayed-message 类型。 |
Durable | 是否开启 Exchange 持久化: 如果设置为 true,该 Exchange 在服务重启后仍然存在; 如果设置为 false,该 Exchange 在服务重启后会被删除,需要重建。 |
AutoDelete | 是否开启自动删除 Exchange: 如果设置为 true,当最后一个绑定到该 Exchange 上的 Queue 解除绑定后,自动删除该 Exchange。 如果设置为 false,当最后一个绑定到该 Exchange 上的 Queue 解除绑定后,不会删除该 Exchange。 |
Internal | Exchange 是否为 RabbitMQ 内部使用: 如果设置为 true,则该 Exchange 不能直接被 Producer 使用,如果直接向其发布消息,会返回错误。可以通过将其与其它的 Exchange 或者 Queue 绑定,形成路由链。 |
Exchange 说明 | 填写 Exchange 的说明信息,最多128个字符。 |
添加备用 Exchange | 可选填,默认不使用备用 Exchange。发送到主 Exchange 的消息如果无法被路由,会被发送到此处指定的备用 Exchange。 |
参数 | 说明 |
当前 Vhost | 表示正在给哪个 Vhost 创建 Exchange。 |
Exchange 名称 | 填写 Exchange 名称,需符合命名规则:1-64个字符,只能包含字母、数字、“.”、“-”及“_”。 Exchange 创建后不能修改名称。 |
路由类型 | direct:该类型 Exchange 会把消息路由到 RoutingKey 和 BindingKey 完全匹配的 Queue 中。 fanout:该类型 Exchange 会将消息路由到所有与其绑定的 Queue 中。 topic:该类型 Exchange 支持多条件匹配和模糊匹配,即使用 Routing Key 模式匹配和字符串比较的方式将消息路由至与其绑定的 Queue 中。 headers:与 Routing Key 无关,匹配机制是匹配消息中的 Headers 属性信息。在绑定 Queue 与 Headers Exchange 之前声明一个 map 键值对,通过这个 map 对象实现消息队列和交换机的绑定。当消息发送到 RabbitMQ 时会取到该消息的 Headers 与 Exchange 绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。 |
Exchange 说明 | 填写 Exchange 的说明信息,最多128个字符。 |
4. 单击提交,完成 Exchange 创建,在 Exchange 列表中即可看见创建好的 Exchange。