7.2.6. 死信策略配置属性

AMQ Broker 7 处理无法交付和过期的消息与 AMQ 6 有很大不同。死信策略应用于地址(而不是目的地),有单独的死信和到期目标(而不是单个死信队列),并且死信策略配置有很大不同。

AMQ 6 中的死信政策

在 AMQ 6 中,已过期或不交付的消息将发送到为每条消息的目的地配置的 死信队列 (DLQ)。要为目的地配置 DLQ,您可以使用以下死信策略:

sharedDeadLetterStrategy
目的地的不可传送消息发送到共享的默认 DLQ,名为 ActiveMQ.DLQ
individualDeadLetterStrategy
目的地的不可传送消息发送到此目的地的专用 DLQ。
discardingDeadLetterStrategy
目的地的不可传送消息将被丢弃。

在目标的死信策略中,您可以添加以下配置属性来控制应发送到目的地 DLQ 的信息类型:

AMQ 6 配置属性描述

processNotPersistent

是否应将非持久性消息发送到目标的 DLQ。默认值为 false

processExpired

是否应将过期的消息发送到目标的 DLQ。默认值为 true

expiration

是否应将到期应用到发送到目标的 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>
...

默认情况下,死信和到期地址指定 DLQExpiryQueue 目标,这些目的地在 <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。