第 12 章 解除消息和分割消息流
在 AMQ Broker 中,您可以配置名为 diverts 的对象,以便您可以透明地将消息从一个地址分离到另一个地址,而无需更改任何客户端应用程序逻辑。您还可以配置 divert,将消息 的副本 转发到指定的转发地址,从而有效地分割消息流。
12.1. message diverts 的工作原理
离散的rts 可让您透明地将消息路由到一个地址到其他地址,而无需更改任何客户端应用程序逻辑。将代理服务器上的 disrts 集合视为消息的路由表类型。
breakrt 可以是 独占 的,表示消息被分解到指定的转发地址,而不进入其原始地址。
breakrt 也可以是 非独占 的,这意味着消息继续进入其原始地址,而代理会将消息的副本发送到指定的转发地址。因此,您可以使用非独占的 diverts 进行分割消息流。例如,如果要单独监控发送到订购队列的每个顺序,您可以分割消息流。
可以为单个地址配置多个 diverts。当地址同时配置了 exclusive 和 non-exclusive diverts 时,代理会首先处理 exclusive diverts。如果一个特定的消息已被一个 exclusive divert 解除了,代理不会处理该消息的任何非独占的 disrts。在这种情况下,消息永远不会进入原始地址。
当代理分离消息时,代理会分配一个新的消息 ID,并将消息地址设置为新的转发地址。您可以通过 _AMQ_ORIG_ADDRESS
(字符串类型)和 _AMQ_ORIG_MESSAGE_ID
(更多类型)消息属性来检索原始消息 ID 和地址值。如果您使用 Core API,请使用 Message.HDR_ORIGINAL_ADDRESS
和 Message.HDR_ORIG_MESSAGE_ID
属性。
您只能将消息同步到同一代理服务器上的地址。如果要区分到其他服务器上的地址,则常见的解决方案是首先将消息同步到本地存储和转发队列。然后,设置一个从该队列消耗的网桥,并将消息转发到不同代理上的地址。通过将 diverts 与网桥相结合,您可以在地理分布式代理服务器之间创建分布式路由连接网络。这样,您可以创建一个全局消息传递网格。