在代理程式內,有幾種操作會導致訊息被複製。這些操作包括:

  • 將訊息從一個位址轉送到另一個位址。

  • 將過期的訊息從佇列移至設定的 expiry-address

  • 將超過其 max-delivery-attempts 的訊息從佇列移至設定的 dead-letter-address

  • 使用管理 API 以管理方式將訊息從一個佇列移至另一個佇列。

當發生這些情況時,原始訊息的內容和屬性會被複製到一個新的訊息中。然而,複製過程會移除一些可能重要的資料片段,因此這些資料會保留在以下特殊的訊息屬性中:

_AMQ_ORIG_ADDRESS

一個字串屬性,包含訊息的原始位址

_AMQ_ORIG_QUEUE

一個字串屬性,包含訊息的原始佇列

_AMQ_ORIG_MESSAGE_ID

一個字串屬性,包含訊息的原始訊息 ID

上述操作有可能會組合在一起。例如,一個訊息可能從一個位址轉送到另一個位址,並進入一個佇列,而消費者嘗試並未能成功消費該訊息,導致該訊息被傳送到死信位址。或者,一個訊息可能以管理方式從一個佇列移至另一個佇列,然後過期。

在這些情況下,ORIG 屬性將包含最後一次(即最近一次)操作的資訊。