7.2.6. 死信策略配置属性
AMQ Broker 7 处理无法交付和过期的消息与 AMQ 6 有很大不同。死信策略应用于地址(而不是目的地),有单独的死信和到期目标(而不是单个死信队列),并且死信策略配置有很大不同。
AMQ 6 中的死信政策
在 AMQ 6 中,已过期或不交付的消息将发送到为每条消息的目的地配置的 死信队列 (DLQ)。要为目的地配置 DLQ,您可以使用以下死信策略:
sharedDeadLetterStrategy-
目的地的不可传送消息发送到共享的默认 DLQ,名为
ActiveMQ.DLQ。 individualDeadLetterStrategy- 目的地的不可传送消息发送到此目的地的专用 DLQ。
discardingDeadLetterStrategy- 目的地的不可传送消息将被丢弃。
在目标的死信策略中,您可以添加以下配置属性来控制应发送到目的地 DLQ 的信息类型:
| AMQ 6 配置属性 | 描述 |
|---|---|
|
|
是否应将非持久性消息发送到目标的 DLQ。默认值为 |
|
|
是否应将过期的消息发送到目标的 DLQ。默认值为 |
|
| 是否应将到期应用到发送到目标的 DLQ 的消息。默认值为 0。 |
AMQ 7 中的死信政策
在 AMQ Broker 7 中,不可传送的消息发送到适用的 死信地址,并将过期的消息发送到适用的 到期地址。
在 broker.xml 配置文件中,默认地址设置指定死信地址和到期地址。无法发送和过期的信息将传送到这些设置指定的目的地:
...
<address-settings>
<address-setting match="#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
...
</address-setting>
...
</address-settings>
...
默认情况下,死信和到期地址指定 DLQ 和 ExpiryQueue 目标,这些目的地在 <addresses> 部分定义:
...
<addresses>
<address name="DLQ">
<anycast>
<queue name="DLQ" />
</anycast>
</address>
<address name="ExpiryQueue">
<anycast>
<queue name="ExpiryQueue" />
</anycast>
</address>
...
</addresses>
...
要为地址配置非默认死信策略,您可以在地址的 <address-setting> 中添加 <dead-letter-address> 和 <expiry-address>,并指定它应使用的 DLQ 和到期队列。
与 AMQ 6 不同,AMQ Broker 7 中无法为发送到 DLQ 的消息设置到期时间。另外,持久和非持久性消息都发送到由地址的 <dead-letter-address> 指定的 DLQ。