There are several operations within the broker that result in copying a message. These include:

  • Diverting a message from one address to another.

  • Moving an expired message from a queue to the configured expiry-address

  • Moving a message which has exceeded its max-delivery-attempts from a queue to the configured dead-letter-address

  • Using the management API to administratively move messages from one queue to another

When this happens the body and properties of the original message are copied to a new message. However, the copying process removes some potentially important pieces of data so those are preserved in the following special message properties:

_AMQ_ORIG_ADDRESS

a String property containing the original address of the message

_AMQ_ORIG_QUEUE

a String property containing the original queue of the message

_AMQ_ORIG_MESSAGE_ID

a String property containing the original message ID of the message

It’s possible for the aforementioned operations to be combined. For example, a message may be diverted from one address to another where it lands in a queue and a consumer tries & fails to consume it such that the message is then sent to a dead-letter address. Or a message may be administratively moved from one queue to another where it then expires.

In cases like these the ORIG properties will contain the information from the last (i.e. most recent) operation.