"追溯" 地址是指一个地址,它将保留发送到它的消息,用于将来在该地址上创建的队列。这在发布-订阅用例中很有用,例如,客户机希望接收在它们实际连接和创建其多播 "订阅" 队列之前发送到该地址的消息。通常,在队列在地址上创建之前发送到该地址的消息将无法用于这些队列,但是使用追溯地址,代理可以保留固定数量的消息,并将这些消息自动复制到随后在该地址上创建的队列中。这适用于任何播和多播队列。
1. 内部追溯资源
为了实现此功能,代理将为每个追溯地址创建 4 个内部资源
了解这些资源很重要,因为它们将在 Web 控制台和其他管理或指标视图中显示。它们的命名将遵循以下模式
<internal-naming-prefix><delimiter><source-address><delimiter>(divert|address|queue<delimiter>(anycast|multicast))<delimiter>retro
例如,如果名为 myAddress
的地址的 retroactive-message-count
为 10,并且使用默认 internal-naming-prefix
(即 $.artemis.internal.
)和默认分隔符(即 .
),则将创建具有以下名称的资源
-
位于
myAddress
上的转移,名为$.artemis.internal.myAddress.divert.retro
-
名为
$.artemis.internal.myAddress.address.retro
的地址 -
步骤 #2 中地址上的多播队列,名为
$.artemis.internal.myAddress.queue.multicast.retro
,ring-size
为 10。 -
步骤 #2 中地址上的任何播队列,名为
$.artemis.internal.myAddress.queue.anycast.retro
,ring-size
为 10。
重要的是要注意此模式,因为它允许在必要时配置地址设置。要配置自定义地址设置,可以使用以下匹配项
*.*.*.<source-address>.*.retro
使用与上面相同的示例,match
将为
*.*.*.myAddress.*.retro
一旦创建了这些追溯资源,更改代理的 internal-naming-prefix 将会破坏追溯功能。 |
2. 配置
要将地址配置为 "追溯",只需将 retroactive-message-count
address-setting
配置为反映您希望代理保留的消息数量,例如
<address-settings>
<address-setting match="orders">
<retroactive-message-count>100</retroactive-message-count>
</address-setting>
</address-settings>
retroactive-message-count
的值可以在运行时通过 broker.xml
或通过管理 API 更新,就像任何其他地址设置一样。但是,如果您减少 retroactive-message-count
的值,则需要额外的管理步骤,因为此功能是通过环形队列实现的。这是因为当环形队列的环形大小减小时,不会自动从队列中删除消息以满足新的环形大小,以避免意外的消息丢失。因此,在这种情况下,需要通过管理 API 手动减少环形队列中消息数量的管理操作。