...
AMQP 0-8...0-9-1 message | AMQP 0-10 message | Implemented | |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | type | Header entry | Property name | Type | Comments | |
message property | delivery mode | octet | delivery-properties | delivery-mode | uint8 |
| Y |
message property | priority | octet | delivery-properties | priority | uint8 |
| Y |
message property | expiration | short-string | delivery-properties | expiration | datetime | this is currently modeled as a long | Y |
message property | expiration | short-string | delivery-properties | ttl | uint64 | expiration - 'arrival-time' | Y |
message property | timestamp | long | delivery-properties | timestamp | datetime | this is currently modeled as a long | Y |
message property | content type | short-string | message-properties | content-type | str8 |
| Y |
message property | encoding | short-string | message-properties | content-encoding | str8 |
| Y |
message property | message id | short-string | message-properties | message-id | uuid | removes 'ID:', if value cannot be converted into uuida new uuid is generated from the existing messageId | Y |
message property | correlation id | short-string | message-properties | correlation-id | vbin16 |
| Y |
message property | user id | short-string | message-properties | user-id | vbin16 |
| Y |
message property | reply to | short-string | message-properties | reply-to | reply-to | if BURL we set the exchange and routingKey otherwise the entire string is copied to the routingKey | Y |
message property | application id | short-string | message-properties | app-id | vbin16 |
| Y |
message property | headers | field-table | message-properties | application-headers | map |
| Y |
message property | type | short-string | message-properties | application-headers['x-jms-type'] | str16 |
| Y |
message content | long | message-properties | content-length | uint64 |
| Y | |
entry delivery count | int | delivery-properties | redelivered | bit | dynamically set on sending |
| |
basic.publish | routing-key | short-string | delivery-properties | routing-key | str8 |
| Y |
basic.publish | exchange | short-string | delivery-properties | exchange | str8 |
| Y |
basic.publish | immediate | bit | delivery-properties | immediate | bit |
| Y |
basic.publish | mandatory | bit | delivery-properties | discard-unroutable | bit |
| Y |
...
AMQP 0-10 message | AMQP 1.0 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Section name | Property name | Type | Comments | |
delivery-properties | delivery-mode | uint8 | header | durable | unsigned byte |
| Y |
delivery-properties | priority | uint8 | header | priority | unsigned byte |
| Y |
delivery-properties | ttl | uint64 | header | ttl | milliseconds | the 'ttl' delivery-property takes precedence over 'expiration' | Y |
delivery-properties | expiration | datetime | header | ttl | milliseconds | the 'ttl' delivery-property takes precedence over 'expiration'; 'absolute-expiry-time' is not used. see QPID-7872 | Y |
delivery-properties | timestamp | datetime | properties | creation-time | timestamp |
| Y |
delivery-properties | redelivered | bit | header | first-acquirer | boolean |
| N |
delivery-properties | routing-key | str8 | properties | to | string |
| Y |
delivery-properties | exchange | str8 | properties | to | string |
| Y |
delivery-properties | immediate | bit |
|
|
|
|
|
delivery-properties | discard-unroutable | bit |
|
| |||
message-properties | content-type | str8 | properties | content-type | symbol | "application/java-object-stream" replaced with "application/x-java-serialized-object" | Y |
message-properties | content-encoding | str8 | properties | content-encoding | symbol |
| Y |
message-properties | message-id | uuid | properties | message-id | uuid |
| Y |
message-properties | correlation-id | vbin16 | properties | correlation-id | binary |
| Y |
message-properties | user-id | vbin16 | properties | user-id | binary |
| Y |
message-properties | reply-to | reply-to | properties | reply-to | string | either <exchange> or <exchange>/<routingKey> or <routingKey> | Y |
message-properties | app-id | vbin16 |
|
|
|
|
|
message-properties | application-headers | map | application-properties | * | MessageConversionException is thrown when string or key is invalid | Y | |
message-properties | content-length | uint64 |
|
|
|
|
|
message-properies headers | qpid.subject | str8 | properties | subject | string |
| YY |
message properies headers | JMSXGroupID | str8 | properties | group-id | string |
| YY |
message properties headers | JMSXGroupSeq | int | properties | group-sequence | sequence number |
| Y |
message-properties | content-type | str8 | message-annotation | x-opt-jms-msg-type | string | N | |
message-properties | application-headers['x-jms-type'] | str16 | properties | subject | string | Y |
...
AMQP 0-10 message | AMQP 0-9 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Section name | Property name | Type | Comments | |
delivery-properties | delivery-mode | uint8 | message property | delivery mode | octet |
| Y |
delivery-properties | priority | uint8 | message property | priority | octet |
| Y |
delivery-properties | ttl | uint64 | message property | expiration | short-string | the 'ttl' delivery-property takes precedence over 'expiration' | Y |
delivery-properties | expiration | datetime | message property | expiration | short-string | the 'ttl' delivery-property takes precedence over 'expiration' | Y |
delivery-properties | timestamp | datetime | message property | timestamp | long |
| Y |
delivery-properties | redelivered | bit | |||||
delivery-properties | routing-key | str8 | basic.publish | routing-key | short-string | Y | |
delivery-properties | exchange | str8 | basic.publish | exchange | short-string | Y | |
delivery-properties | immediate | bit | basic.publish | immediate | bit |
| Y |
delivery-properties | discard-unroutable | bit | basic.publish | mandatory | bit | Y | |
message-properties | content-type | str8 | message property | content type | short-string |
| Y |
message-properties | content-encoding | str8 | message property | encoding | short-string |
| Y |
message-properties | message-id | uuid | message property | message id | short-string |
| Y |
message-properties | correlation-id | vbin16 | message property | correlation id | short-string |
| Y |
message-properties | user-id | vbin16 | message property | user id | short-string | if conversion to AMQShortString fails the field is not set | Y |
message-properties | reply-to | reply-to | message property | reply to | short-string | convert to BURL if conversion to AMQShortString fails the MessageConversionException is thrown | Y |
message-properties | app-id | vbin16 | message property | application-id | short-string | if conversion to AMQShortString fails the field is not set | Y |
message-properties | application-headers | map | message property | headers | field-table |
| Y |
message-properties | content-length | uint64 |
|
|
|
|
|
message-properties | application-headers['x-jms-type'] | str16 | message property | type | short string | throw MessageConversionException if it does not fit into short string | Y |
...
AMQP 1.0 message | AMQP 0-8...0-9-1 message |
|
|
| Implemented
| ||
---|---|---|---|---|---|---|---|
Section name | Property name | Type | Properties | Property name | Type | Comments | |
header | durable | boolean | message property | delivery mode | unsigned byte |
| Y |
header | priority | unsigned byte | message property | priority | unsigned byte |
| Y |
header | ttl | milliseconds/uint | message property | expiration | short-string | 'absolute-expiry-time' takes precedence over 'ttl' | Y |
properties | absolute-expiry-time | timestamp /ulong | message property | expiration | short-string | 'absolute-expiry-time' takes precedence over 'ttl' | Y |
header | delivery-count | uint |
|
|
|
|
|
header | first-acquirer | boolean |
|
|
|
|
|
message-annotations | x-opt-jms-msg-type | byte | message property | content type | short-string | see table for content conversion below | Y |
header | content-type | symbol | message property | content type | short-string | see table for content conversion below | Y |
properties | content-encoding | symbol | message property | encoding | short-string | MCE is thrown on content-encoding length > 255 | Y |
properties | message-id | binary, uuid, ulong, string | message property | message id | short-string | if conversion to AMQShortString fails the field is not set. when converting from binary no restrictions are applied to the bytes. May contain invalid UTF-8 and/or zero-bytes. | Y |
properties | correlation-id | binary, uuid, ulong, string | message property | correlation id | short-string | if conversion to AMQShortString fails the MCE is thrown. when converting from binary no restrictions are applied to the bytes. May contain invalid UTF-8 and/or zero-bytes. | Y |
properties | user-id | binary | message property | user id | short-string | if conversion to AMQShortString fails the field is not set | Y |
properties | reply-to | string | message property | reply to | short-string | See section Address Conversion if conversion to AMQShortString fails the MCE is thrownif global address (starts with '/'), the MCE is thrown | Y |
properties | creation-time | timestamp /ulong | message property | timestamp | long | if creation-time is not set arrival time will be used | Y |
properties | subject | string | message property | headers['qpid.subject'] | long-string |
| Y |
properties | subject | string | message property | type | short-string | MCE is thrown on subject length > 255 | Y |
properties | subject | string | publish property | routing-key | short-stringMCE is thrown on subject length > 255 | See conversion of 'to' below. | Y |
properties | group-id | string | message property | headers['JMSXGroupID'] | long-string | specified in JMS bindmap | Y |
properties | group-sequence | sequence number | message property | headers['JMSXGroupSeq'] | int | specified in JMS bindmap | Y |
properties | to | string | basic.publish | exchange, routingKey | short string if 'to' starts with "/" throw MCE | See section Address Conversion. If an exchange is specified without routingKey the properties.subject is used as routingKey. Throw MCE if exchange or routingKey conversion to AMQShortString Throw MCE if exchange or routingKey conversion to AMQShortString fails | Y |
application-properties | * | * | message property | headers | field-table | If conversion fails a MCE is thrown | Y |
...
AMQP 1.0 message | AMQP 0-10 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Section name | Property name | Type | Property segment | Property name | type | Comments | |
header | durable | boolean | delivery-properties | delivery-mode | uint8 |
| Y |
header | priority | unsigned byte | delivery-properties | priority | uint8 |
| Y |
header/properties | ttl /absolute-expiry-time | milliseconds/ulong | delivery-properties | ttl | uint64 |
| Y |
header/properties | ttl /absolute-expiry-time | milliseconds/ulong | delivery-properties | expiration | datetime | Y | |
message-annotations | x-opt-jms-msg-type | byte | message-properties | content-type | str8 | see table for content conversion below | Y |
properties | content-type | symbol | message-properties | content-type | str8 | see table for content conversion below | Y |
properties | content-encoding | symbol | message-properties | content-encoding | str8 | Throw MCE if conversion to str8 fails | Y |
properties | message-id | binary, uuid, ulong, string | message-properties | message-id | uuid | When converting from string direct conversion to UUID is attempted. If that fails a type 3 UUID is created. When converting from non-UUID a type 3 UUID is created from the source bytes. | Y |
properties | correlation-id | binary, uuid, ulong, string | message-properties | correlation-id | vbin16 | Throw MCE if conversion to vbin16 fails | Y |
properties | user-id | binary | message-properties | user-id | vbin16 | if conversion to vbin16 fails do not set this field | Y |
properties | reply-to | string | message-properties | reply-to | reply-to | See secton Address Conversion Throw MCE if conversion of exchange or routingKey to str8 fails | PartialY |
properties | creation-time | timestamp /ulong | delivery-properties | timestamp | datetime | when creation-time is not set, arrival-time is set as a timestamp | Y |
properties | subject | string | message-properies | headers['qpid.subject'] | str16 | if 'qpid.subject' is already in the application-properties it will not be overridden | Y |
properties | subject | string | message-properties | headers['x-jms-type'] | str16 | if 'x-jms-type' is already in the application-properties it will not be overridden | Y |
properties | subject | string | delivery-properties | routing-key | str8 | Throw MCE if conversion to str8 fails | Y |
properties | group-id | string | message-properies | headers['JMSXGroupID'] | str16 | if 'JMSXGroupId' is already in the application-properties it will not be overridden | Y |
properties | group-sequence | sequence number | message properies | headers['JMSXGroupSeq'] | int | if 'JMSXGroupSeq' is already in the application-properties it will not be overridden | Y |
properties | to | string | delivery-properties | exchange | str8 if 'to' starts with "/" throw MCE | See section Address Conversion Throw MCE if exchange or routingKey conversion to str8 fails | Y |
properties | to | string | delivery-properties | routing-key | str8 | see above | Y |
application-properties | - | map | message-properties | application-headers | map |
| Y |
content | message-properties | content-length | uint64 |
| Y | ||
header | delivery-count | delivery-properties | redelivered | N |
...
AMQP 1.0 message | internal message | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Section name | Property name | Type | Property class | Property name | type | Comments | Implemented | ||||||||
header | durable | boolean | InternalMessage InternalMessageMetaData | isPersistent() isPersistent() | boolean boolean |
| Y Y | ||||||||
header | priority | unsigned byte | MessageHeader | getPriority() | byte |
| Y | ||||||||
header/properties | ttl /absolute-expiry-time | milliseconds/ulong | MessageHeader | getExpiration() | long | Currently 'absolute-expiry-time' is used but we should change this to 'ttl' (see QPID-7872) | Y | Y | |||||||
properties | content-type | symbol | MessageHeader | getMimeType() | String |
| Y | properties | content-type | symbol |
|
|
|
| TODO |
properties | content-encoding | symbol | MessageHeader | getEncoding() | String | Y | |||||||||
properties | message-id | binary, uuid, ulong, string | MessageHeader | getMessageId() | String | toString() is used for the conversion | Y | ||||||||
properties | correlation-id | binary, uuid, ulong, string | MessageHeader | getCorrelationId() | String | toString() is used for the conversion | Y | ||||||||
properties | user-id | binary | MessageHeader | getUserId() | String | expects 'user-id' to contain UTF-8 bytes. results in mojibake otherwise. | Y | ||||||||
properties | reply-to | string | MessageHeader | getReplyTo() | String | Y | |||||||||
properties | creation-time | timestamp /ulong | MessageHeader | getTimestamp() | long | when creation-time is not set, arrival-time should be set as a timestampis used | YPartial | ||||||||
properties | subject | string | MessageHeader | HeaderMap['qpid.subject'] | String | should this be done?N | properties | subject | string | InternalMessage | getInitialRoutingAddress() | String | related: QPID-7868 | N | |
properties | group-id | string |
|
| N | ||||||||||
properties | group-sequence | sequence number |
|
| N | ||||||||||
properties | to | string | InternalMessage | getTo() | String | | Y | ||||||||
application-properties | - | map | MessageHeader | HeaderMap | Map |
| Y | ||||||||
header | delivery-count | MessageHeader | redelivered | N |
...
Internal message | AMQP 1.0 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Section name | Property name | Type | Comments | |
InternalMessage InternalMessageMetaData | isPersistent() isPersistent() | boolean | header | durable | unsigned byte |
| Y |
MessageHeader | getPriority() | byte | header | priority | unsigned byte |
| Y |
MessageHeader | getExpiration() | long | header | ttl | milliseconds |
| Y |
MessageHeader | getExpiration() | long | properties | absolute-expiry-time | timestamp | N | |
MessageHeader | getMessageId() | String | properties | message-id | uuid/string/ulong |
| Y |
MessageHeader | getCorrelationId() | String | properties | correlation-id | binary |
| Y |
MessageHeader | getUserId() | String | properties | user-id | binary |
| Y |
MessageHeader | getTimestamp() | datetime | properties | creation-time | timestamp |
| Y |
MessageHeader | getReplyTo() | String | properties | reply-to | string |
| Y |
InternalMessage | getTo() | String | properties | to | string |
| TODOY |
InternalMessage | getEncoding() | String | properties | content-encoding | symbol |
| Y |
MessageHeader | getContentType() | str8 | properties | content-type | symbol |
| TODOY |
properties | subject | string | N | ||||
MessageHeader | getHeader(String)/getHeaderNames() | String/Enumeration | application-properties | * | MessageConversionException is thrown when string or key is invalid | Y |
...
Internal message | AMQP 0-8...0-9-1 message | Implemented
| |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Section name | Property name | Type | Comments | |||||||||||||||
InternalMessage InternalMessageMetaData | isPersistent() isPersistent() | boolean | message property | delivery mode | unsigned byte |
| Y | ||||||||||||||
MessageHeader | getPriority() | byte | message property | priority | unsigned byte |
| Y | ||||||||||||||
MessageHeader | getExpiration() | long | message property | expiration | short-string | Y | |||||||||||||||
MessageHeader | getMessageId() | String | message property | message-id | short-string | if conversion to short-string fails 'message-id' is not set | Y | ||||||||||||||
MessageHeader | getCorrelationId() | String | message property | correlation-id | short-string | MessageConversionException is thrown when conversion to short-string fails | Y | ||||||||||||||
MessageHeader | getUserId() | String | message property | user-id | short-string | if conversion to short-string fails 'user-id' is not set | Y | ||||||||||||||
MessageHeader | getTimestamp() | datetime | message property | timestamp | long |
| Y | ||||||||||||||
MessageHeader | getReplyTo() | String | message property | reply-to | short-string | shoud potentially See section Address Conversion then convert to BURL. MessageConversionException should be is thrown when conversion to short-string fails | TODO | ||||||||||||||
InternalMessage | getTo() | String | message property | to | string |
| TODO | ||||||||||||||
Y | |||||||||||||||||||||
InternalMessage | getEncoding() | String | message property | encoding | short-string | MessageConversionException is thrown when conversion to short-string fails | Y | ||||||||||||||
MessageHeader | getMimeType() | String | message property | content-type | short-string |
| TODOY | ||||||||||||||
MessageHeader | getContentTypegetHeader(String)/getHeaderNames() | String/Enumeration | message propertycontent-type | headers | shortfield-string |
| TODO | ||||||||||||||
message property | subject | string | N | ||||||||||||||||||
MessageHeader | getHeader(String)/getHeaderNames() | String/Enumeration | message property | headers | field-table | MessageConversionException is thrown when key or value is invalid | Y | ||||||||||||||
table | MessageConversionException is thrown when key or value is invalid | Y | |||||||||||||||||||
InternalMessage | getTo() / getInitialRoutingAddress() | basic.publish | exchange, | basic.publish | routing-key | short-string | TODO | basic.publish | exchange | short-string | If getTo() is null or the empty string getInitialRoutingAddress() is used instead. Throw MessageConversionException if conversion to short-string fails. | YTODO | |||||||||
basic.publish | immediate | bit | always set to false | N | |||||||||||||||||
basic.publish | mandatory | bit | always set to false | N |
AMQP 0-10 message properties conversion into internal message properties
AMQP 0-10 message | Internal message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Class name | Property name | Type | Comments | |
delivery-properties | delivery-mode | uint8 | InternalMessage InternalMessageMetaData | isPersistent() | boolean |
| Y |
delivery-properties | priority | uint8 | MessageHeader | getPriority() | byte |
| Y |
delivery-properties | ttl | uint64 | MessageHeader | getExpiration() | long | the 'ttl' delivery-property takes precedence over 'expiration' | Y |
delivery-properties | expiration | datetime | MessageHeader | getExpiration() | long | the 'ttl' delivery-property takes precedence over 'expiration' | Y |
delivery-properties | timestamp | datetime | MessageHeader | getTimestamp() | long | if not set, the arrival time is used as timestamp | Y |
delivery-properties | redelivered | bit | N | ||||
delivery-properties | routing-key | str8 | InternalMessage | getInitialRoutingAddress() | String | TODOY | |
delivery-properties | exchange | str8 | InternalMessage | getTo() | String | TODOY | |
delivery-properties | immediate | bit |
|
| N | ||
delivery-properties | discard-unroutable | bit |
| N | |||
message-properties | content-type | str8 | InternalMessage | getContentTypegetMimeType() | String |
| TODOY |
message-properties | content-encoding | str8 | MessageHeader | getEncoding() | string |
| Y |
message-properties | message-id | uuid | MessageHeader | getMessageId() | String |
| Y |
message-properties | correlation-id | vbin16 | MessageHeader | getCorrelationId() | String |
| Y |
message-properties | user-id | vbin16 | MessageHeader | getUserId() | String |
| Y |
message-properties | reply-to | reply-to | MessageHeader | getReplyTo() | String | <exchange name>/<routing key> | TODOY |
message-properties | app-id | vbin16 | MessageHeader | getAppId() | String |
| Y |
message-properties | application-headers | map | MessageHeader | getHeadersMap() | Map<String,Object> |
| Y |
message-properties | content-length | uint64 |
|
|
|
|
|
message-properties | application-headers['x-jms-type'] | str16 | MessageHeader | getType() | String | 'x-jms-type' is not removed from application headers | Y |
...
Internal message | AMQP 0-10 message | Implemented
| ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Segment name | Property name | Type | Comments | ||||
InternalMessage InternalMessageMetaData | isPersistent() isPersistent() | boolean | delivery-properties | delivery-mode | uint8 |
| Y | |||
MessageHeader | getPriority() | byte | delivery-properties | priority | uint8 |
| Y | |||
MessageHeader | getExpiration() | long | delivery-properties | ttl | uint64 | getExpiration() - arrivalTime | Y | |||
MessageHeader | getExpiration() | long | delivery-properties | expiration | datetime | Y | ||||
MessageHeader | getMessageId() | String | message-properties | message-id | uuid | if conversion to uuid fails 'message-id' is not set | Y | |||
MessageHeader | getCorrelationId() | String | message-properties | correlation-id | vbin16 | MessageConversionException is thrown when conversion to vbin16 fails | Y | |||
MessageHeader | getUserId() | String | message-properties | user-id | vbin16 | if conversion to vbin16 fails 'user-id' is not set | Y | |||
MessageHeader | getTimestamp() | datetime | delivery-properties | timestamp | datetime | if timestamp is not set arrivalTime will be used as timestamp | Y | |||
MessageHeader | getReplyTo() | String | message-properties | reply-to | reply-to | See section Address Conversion MessageConversionException should be is thrown when conversion to str8 fails. | TODOY | |||
InternalMessage | getTo()/getInitialRoutingKey() | String | delivery-properties |
|
| exchange, routing-key | str8 | If getTo() is null or the empty string getInitialRoutingAddress() is used instead. MessageConversionException is thrown when conversion to str8 fails. | YTODO | |
InternalMessage | getEncoding() | String | message-properties | content-encoding | str8 | MessageConversionException is thrown when conversion to str8 fails | Y | |||
MessageHeader | getMimeType() | String | message-properties | content-type | str8 |
| TODO | |||
MessageHeader | getContentType() | String | message-properties | content-type | str8 |
| TODO | |||
T | ||||||||||
MessageHeader | getHeader(String)/getHeaderNames() | String/Enumeration | message-properties | application-headers | map | MessageConversionException is thrown when key or value is invalid | Y | |||
InternalMessage | message-properties | content-length | uint64 | Y | ||||||
delivery-propertiesrouting-key | immediate | str8bit | TODON | |||||||
delivery-properties | exchangediscard-unroutable | str8bit | NTODO |
Anchor |
---|
...
delivery-properties
...
|
This applies to conversion of an address modeled as a simple string (e.g., 'to' and 'reply-to' in AMQP 1.0) to a more structured format like 0-10 (exchange, routingKey) or 0-9 (BURL).
We follow this algorithm:
- if the address starts with a global domain prefix matching the virtual host's it is stripped before the following steps
- if it contains "/" split on first "/" and if first part refers to existing exchange consider it the exchange and the second part as the routingKey
- if it does not contain "/" and it refers to an existing exchange consider it the exchange and the routingKey as the empty string
- else consider the address as the routingKey the exchange to the empty string.
...
delivery-properties
...
Content conversion
Conversion of message content from AMQP 0-8...0-9-1 into AMQP 0-10 and back is simply a matter of copying the content bytes.
...
The approaches above can be configured on broker or virtual host using context variables.
Closing the connections should be a default behaviour.
none | null | amqp-value | null | 0 (Message) | copied verbatim |
empty body |
...