代理中有一些操作会导致消息被复制。这些操作包括:
-
将消息从一个地址转发到另一个地址。
-
将已过期的消息从队列移动到配置的
expiry-address
-
将超出
max-delivery-attempts
的消息从队列移动到配置的dead-letter-address
-
使用管理 API 将消息从一个队列管理地移动到另一个队列
发生这种情况时,原始消息的主体和属性将被复制到新消息中。但是,复制过程会删除一些可能重要的数据,因此这些数据会保存在以下特殊消息属性中:
- _AMQ_ORIG_ADDRESS
-
一个字符串属性,包含消息的原始地址
- _AMQ_ORIG_QUEUE
-
一个字符串属性,包含消息的原始队列
- _AMQ_ORIG_MESSAGE_ID
-
一个字符串属性,包含消息的原始消息 ID
上述操作可能会组合使用。例如,一条消息可能被从一个地址转发到另一个地址,然后它被放到队列中,消费者尝试消费它,但失败,因此该消息被发送到死信地址。或者一条消息可能被从一个队列管理地移动到另一个队列,然后过期。
在这些情况下,ORIG
属性将包含最后(即最新)操作的信息。