代理中有一些操作会导致消息被复制。这些操作包括:

  • 将消息从一个地址转发到另一个地址。

  • 将已过期的消息从队列移动到配置的expiry-address

  • 将超出max-delivery-attempts的消息从队列移动到配置的dead-letter-address

  • 使用管理 API 将消息从一个队列管理地移动到另一个队列

发生这种情况时,原始消息的主体和属性将被复制到新消息中。但是,复制过程会删除一些可能重要的数据,因此这些数据会保存在以下特殊消息属性中:

_AMQ_ORIG_ADDRESS

一个字符串属性,包含消息的原始地址

_AMQ_ORIG_QUEUE

一个字符串属性,包含消息的原始队列

_AMQ_ORIG_MESSAGE_ID

一个字符串属性,包含消息的原始消息 ID

上述操作可能会组合使用。例如,一条消息可能被从一个地址转发到另一个地址,然后它被放到队列中,消费者尝试消费它,但失败,因此该消息被发送到死信地址。或者一条消息可能被从一个队列管理地移动到另一个队列,然后过期。

在这些情况下,ORIG属性将包含最后(即最新)操作的信息。