消息队列 RabbitMQ 版 Exchange

这篇说说TDMQ RabbitMQ版中Exchange的概念与四种类型(Direct、Fanout、Topic、Header),说明其路由规则、应用场景及使用示例,并补充X-Delayed-Message延迟消息交换机。 Direct Exchange:将消息路由到RoutingKey与BindingKey完全匹配的队列,适用于单播路由。 Fanout Exchange:将消息广播到所有绑定的队列,适用于状态更新等广。

相关产品
消息队列 RabbitMQ 版 产品页,含版本规格、价格与购买入口。

这篇说说 TDMQ RabbitMQ 版中 Exchange 的概念、类型和使用方式。

一、概念

Exchange 是 TDMQ RabbitMQ 版的消息路由代理,Producer 将消息发送到 Exchange 中,Exchange 根据消息的属性或内容将消息路由到一个或多个 Queue 中(或者丢弃),Consumer 从 Queue 中拉取消息进行消费。

TDMQ RabbitMQ 版目前支持 Direct、Fanout、Topic 和 Header 四种类型的 Exchange。

·Direct:该类型 Exchange 会把消息路由到 RoutingKey 和 BindingKey 完全匹配的 Queue 中。

·Fanout:该类型 Exchange 会将消息路由到所有与其绑定的 Queue 中。

·Topic:该类型 Exchange 支持多条件匹配和模糊匹配,即使用 RoutingKey 模式匹配和字符串比较的方式将消息路由至与其绑定的Queue中。

·Header:该类型 Exchange 与 Routing Key 无关,匹配机制是匹配消息中的 Headers 属性信息。在绑定 Queue 与 Headers Exchange 之前声明一个map键值对,通过这个map对象实现消息队列和交换机的绑定。

二、Direct Exchange

路由规则:Direct Exchange 会把消息路由到 RoutingKey 和 BindingKey 完全匹配的 Queue 中。

应用场景:该类型 Exchange 适用于通过简单字符标识符过滤消息的场景,常用于单播路由。

使用示例:

Message Routing Key Binding Key Queue
Message 1 bizA bizA Queue 1
Message 2 bizB bizB Queue 2

三、Fanout Exchange

路由规则: 该类型 Exchange 会将消息路由到所有与其绑定的 Queue 中。

应用场景:该类型 Exchange 适用于广播消息的场景。例如分发系统使用 Fanout Exchange 来广播各种状态和配置更新。

使用示例

Message Routing Key Binding Key Queue
Message 1 bazA.wechat_pay bazA.credit,bazB.credit Queue 1,Queue 2
Message 2 bazA.alipay bazA.credit,bazB.credit Queue 1,Queue 2
Message 3 bazC.credit bazA.credit,bazB.credit Queue 1,Queue 2

四、Topic Exchange

路由规则:该类型 Exchange 支持多条件匹配和模糊匹配,即使用 Routing Key 模式匹配和字符串比较的方式将消息路由至与其绑定的 Queue 中。

·Topic Exchange 支持的通配符包括星号“*”和井号“#”。

·星号“*”代表一个英文单词,例如 sh。

·井号“#”代表零个、一个或多个英文单词,单词间用英文句号"."分隔,例如 cn.hz。

应用场景

该类型 Exchange 常用于多播路由,例如需要使用 Topic Exchange 分发有关于特定地理位置的数据。

使用示例

Message Routing Key Binding Key Queue
Message 1 cn.hz cn.hz.# Queue 1
Message 2 cn.hz.store cn.hz.#、cn.*.store Queue 1、Queue 2
Message 3 cn.sz.store cn.*.store Queue 2

五、Header Exchange

与 Routing Key 无关,匹配机制是匹配消息中的 Headers 属性信息。在绑定 Queue 与 Headers Exchange 之前声明一个map键值对,通过这个map对象实现Queue 和 Exchange 的绑定。当消息发送到 RabbitMQ 时会取到该消息的 Headers 与 Exchange 绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。

匹配规则x-match有下列两种类型:

·x-match = all :表示所有的键值对都匹配才能接受到消息

·x-match = any :表示只要有键值对匹配就能接受到消息

Message 消息Headers属性 Binding Headers 属性 Queue
Message 1 key1=value1key2=value2 x-match = anykey1=value1
key2=value2
Queue 1
Message 2 key1=value1
key2=value2key3=value3
x-match = any
key1=value1
key2=value2 、x-match = all
key1=value1
key2=value2key3=value3
Queue 1、Queue 2

六、X-Delayed-Message

这是一种自定义的 Exchange 类型,用于实现延迟消息传递。当将消息发送到 X-Delayed-Message 类型的交换机时,可以为消息设置一个延迟时间。RabbitMQ 会在延迟时间结束后,将消息路由到与其绑定的队列中。这种类型的交换机允许你在发送消息时控制消息何时被传递给消费者,从而实现消息的定时和延迟处理。

赞 (0)
上一篇 4天前
下一篇 4天前