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 configureddead-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.