12.2. 配置消息 diverts
要在代理实例中配置一个 divert,在 broker.xml
配置文件的 core
元素中添加一个 divert
元素。
<core> ... <divert name= > <address> </address> <forwarding-address> </forwarding-address> <filter string= > <routing-type> </routing-type> <exclusive> </exclusive> </divert> ... </core>
- divert
-
分离的命名实例。您可以在
broker.xml
配置文件中添加多个divert
元素,只要每个 divert 都有唯一的名称。 - address
- 从中分离 消息的地址
- forward-address
- 信息转发到的地址
- filter
- 可选消息过滤器。如果您配置过滤器,则只有与过滤器字符串匹配的消息才会被分离。如果没有指定过滤器,则 divert 认为所有消息都被视为匹配项。
- routing-type
划分消息的路由类型。您可以将 divert 配置为:
-
将
anycast
或multicast
路由类型应用到消息 - 去除 (即删除)现有路由类型
- 传递 (即保留)现有路由类型
-
将
当消息设置了路由类型时,路由类型的控制很有用,但您想要将消息定向到使用不同路由类型的地址。例如,代理无法将 anycast
路由类型的消息路由到一个使用 multicast
的队列,除非您将 divert 的 routing-type
参数设置为 MULTICAST
。divert 的 routing-type
参数的有效值为 ANYCAST
、MULTICAST
、PASS
和 STRIP
。默认值为 STRIP
。
- exclusive
-
指定 divert 是 exclusive (将属性设为
true
)还是非专用(将属性设为false
)。
以下小节展示了 exclusive 和 non-exclusive diverts 的配置示例。
12.2.1. 排除 divert 示例
下面是一个排除 divert 的示例配置。排除 divert 将原始配置的地址的所有匹配消息复制到新地址。匹配消息不会路由到原始地址。
<divert name="prices-divert"> <address>priceUpdates</address> <forwarding-address>priceForwarding</forwarding-address> <filter string="office='New York'"/> <exclusive>true</exclusive> </divert>
在前面的示例中,您定义了一个名为 price-divert
的 divert,它将发送到 priceUpdates
地址的任何消息转到另外一个本地地址 priceForwarding
。您还指定了消息过滤器字符串。只有带有 office
属性以及值为 New York
的消息才会被 divert。所有其他消息都会路由到其原始地址。最后,您可以指定 divert 是 exclusive。
12.2.2. Non-exclusive divert 示例
下面是一个非排除的 divert 的示例配置。在非独占 divert 中,消息将继续进入其原始地址,而代理还会将消息副本发送到指定的转发地址。因此,非独占 divert 是一个分割消息流的方法。
<divert name="order-divert"> <address>orders</address> <forwarding-address>spyTopic</forwarding-address> <exclusive>false</exclusive> </divert>
在上例中,您定义了一个名为 order-divert
的 divert,它会获取发送到地址 orders
的每个消息的副本,并将其发送到名为 spyTopic
的本地地址。您还可以指定 divert 不是排他的。
其他资源
有关使用 exclusive 和 non-exclusive diverts 的详细示例,以及一个桥接将消息转发到另一个代理,请参阅 divert 示例 (外部)。