...
AMQP 0-10 type
| Used in JMS Clients | AMQP 0-9-1 types | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
short-string | long-string | timestamp | field-array | field-table | float | double | decimal | void | boolean | byte | unsigned byte | short | unsigned short | int | unsigned int | long | unsigned long | binary | ascii str | wide str | ascii char | |||
bin8 | no |
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
| X |
|
|
| |
int8 | yes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| |
uint8 | no |
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
|
| |
char | no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
boolean | yes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| |
bin16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
| X |
|
|
| |
int16 | yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| |
uint16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
| |
bin32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
| X |
|
|
| |
int32 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
uint32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
| |
float | yes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
char-utf32 | no |
| X*** |
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| | |
sequence-no | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin64 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
| X |
|
|
| |
int64 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| |
uint64 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? | X |
|
|
|
| |
double | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
datetime | no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
| |
bin128 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
uuid ** | no ****** |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
bin256 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin512 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin1024 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin40 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
dec32 | no |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| ? |
|
|
| |
bin72 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
dec64 | no |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
void | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| |
bit | no |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
| ? |
|
|
| |
vbin8 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
str8-latin | no | X | ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
str8 | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
str8-utf16 | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
vbin16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
str16-latin | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
str16 | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
str16-utf16 | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
byte-ranges | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
sequence-se | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
vbin32 | yes **** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
map | no ***** |
|
|
|
| X* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
list | no ***** |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
array | no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
struct32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
...
** UUID type is unsupported by AMQP 0-8/0-9.x. An exception is thrown on attempt to convert. Should it be converted into short string?It is converted to a long string
*** there is no corresponding type in AMQP 0-8..0-9.x. Thus, the most appropriate type for conversion UTF32 char is long-string.
...
****** Instances of java.util.UUID and java.lang.Character can be specified as part of ListMessage. They are encoded into AMQP 0-10 types "uuiuuid" and "char" (one byte) accordingly.
...
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-annotationannotations | x-opt-jms-msg-type | byte | message property | content type | short-string |
| see table for content conversion below | YN | ||
header | content-type | symbol | message property | content type | short-string | see table for content conversion below | YTODO | |||
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 thrown if 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 stringif '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 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 | YTODO |
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 Throw MCE if exchange or routingKey conversion to str8 fails | 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() | longCurrently 'absolute-expiry-time' is used but we should change this to 'ttl' (see QPID-7872) | Y | ||||||||||
properties | content-type | symbol | MessageHeader | getMimeType() | String |
| TODOY | |||||||||
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 | InternalMessage | 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 |
| TODOY |
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 | getContentType() | String | message property | content-type | short-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 | ||||||||
InternalMessage | getTo() / getInitialRoutingAddress() | basic.publish | exchange, routing-key | short-string | TODO | ||||||||||
basic.publish | exchange | short-string | TODO | ||||||||||||
If getTo() is null or the empty string getInitialRoutingAddress() is used instead. Throw MessageConversionException if conversion to short-string fails. | Y | ||||||||||||||
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 is MessageConversionException should be 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 |
| TODOT | ||||||||
MessageHeader | getContentType() | String | message-properties | content-type | str8 |
| TODO | 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 | TODON |
Anchor |
---|
...
delivery-properties
...
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.
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.
Conversion of message content from AMQP 0-8...0-10 into AMQP 1-0 is based on mime-type of the message (which is set as message property 'content-type'). Depending from mime-type the message content is converted into amqp:amqp-value
or amqp:data
formats.
Conversion of message content from AMQP 1-0 to AQMQP 0-x is based on the AMQP type used in AMQP 1-0 message
AMQP 1.0 to AMQP 0-x
AMQP 1.0 Message | AMQP 0-x Message | ||||
---|---|---|---|---|---|
body section | body data type | annotation x-opt-jms-msg-type | content-type | content type | comments |
amqp-value | null | any | any | see comment | this case is treated identical to the case where there is no body section (see below) |
string | any | any | text/plain | ||
map | any | any | jms/map-message or amqp/map | if keys' length<255 and values of simple types (string, boolean, double, float, binary(byte[]), null, byte, short, integer, long ), the "jms/map-message " format is used. If keys' length<255 but non simple type value is used, than "amqp/map" format is used. Otherwise, MessageConversionException is thrown | |
list | any | any | jms/stream-message or amqp/list | if list items of simple types(string, boolean, double, float, byte[] (Binary), null, byte, short, integer, long ), otherwise conversion to "amqp/list" is attempted, otherwise MessageConversionException is thrown | |
other | any | any | MessageConversionException is thrown | ||
amqp-sequence | see comments | any | any | jms/stream-message | if amqp-sequence section values of simple types(string, boolean, double, float, byte[] (Binary), null, byte, short, integer, long ), otherwise conversion to "amqp/list" is attempted, otherwise MessageConversionException is thrown |
data | binary (bytes[]) | 0 (Message) | any | application/octet-stream | |
1 (ObjectMessage) | any | application/java-object-stream | |||
2 (MapMessage) | any | jms/map-message or amqp/map or application/octet-stream
| The content types jms/map-message and amqp/map are preserved. Otherwise, application/octet-stream | ||
3 (BytesMessage) | any | application/octet-stream | |||
4 (StreamMessage) | any | jms/stream-message or amqp/list or application/octet-stream | The content types jms/stream-message or amqp/list are preserved. Otherwise, application/octet-stream | ||
5 (TextMessage) | any | text/plain | |||
other or not set | content types listed as "common textual media types" in section 3.3.7 (Body Sections) of AMQP JMS Mapping specification (WD9) | text/plain | |||
jms/map-message or amqp/map | jms/map-message or amqp/map | the content type is preserved on converted message | |||
jms/stream-message or amqp/list | jms/stream-message or amqp/list | the content type is preserved on converted message | |||
application/x-java-serialized-object or application/java-object-stream | application/java-object-stream | ||||
other or not set | application/octet-stream | ||||
no body | N/A | 0 (Message) | any | not set | empty body |
1 (ObjectMessage) | any | application/java-object-stream | body will contain serialized null | ||
2 (MapMessage) | any | jms/map-message | body will contain a serialized empty map | ||
3 (BytesMessage) | any | application/octet-stream | empty body | ||
4 (StreamMessage) | any | jms/stream-message | empty body | ||
5 (TextMessage) | any | text/plain | empty body | ||
other or not set | content types listed as "common textual media types" in section 3.3.7 (Body Sections) of AMQP JMS Mapping specification (WD9) | text/plain | empty body | ||
jms/map-message or amqp/map | jms/map-message | body will contain a serialized empty map | |||
jms/stream-message or amqp/list | jms/stream-message | empty body | |||
application/x-java-serialized-object or application/java-object-stream | application/java-object-stream | body will contain serialized null | |||
application/octet-stream | application/octet-stream | empty body | |||
other | not set | empty body |
AMQP 0-x to AMQP 1.0
AMQP 0-x | AMQP 1.0 | comments | |||
---|---|---|---|---|---|
content type | body section | body data type | annotation x-opt-jms-msg-type | content-type | |
content types listed as "common textual media types" in section 3.3.7 (Body Sections) of AMQP JMS Mapping specification (WD9) | amqp-value | string | 5 (TextMessage) | copied verbatim | if body is empty the amqp-value will contain an empty string |
jms/map-message or amqp/map | amqp-value | map | 2 (MapMessage) | null | if body is empty the amqp-value will contain an empty map. Maps whose values fall outside the JMS restrictions must go without the annotation |
jms/stream-message or amqp/list | amqp-sequence | values | 4 (StreamMessage) | null | if body is empty the amqp-sequence will be empty. List with items that fall outside the JMS restrictions must go without the annotation |
application/java-object-stream or application/x-java-serialized-object | data-section | binary | 1 (ObjectMessage) | application/x-java-serialized-object | |
application/octet-stream | data-section | binary | 3 (BytesMessage) | application/octet-stream | |
other with body | data-section | binary | null | copied verbatim | |
none with body | data-section | binary | null | null | |
other without body | data-section | empty binary | null | copied verbatim | |
none without body | amqp-value | null | 0 (Message) | null |
Internal to AMQP 1.0
Internal | AMQP 1.0 | comments | ||||
---|---|---|---|---|---|---|
content type | body | body section | body data type | annotation x-opt-jms-msg-type | content-type | |
any | String | amqp-value | string | 5 (TextMessage) | copied verbatim if not null, otherwise text/plain | if body is empty the amqp-value will contain an empty string |
any | List | amqp-sequence | values | 4 (StreamMessage) | null | Lists with members that fall outside the JMS restrictions must go without the annotation |
any | byte[] | data-section | binary | 3 (BytesMessage) | copied verbatim if not null, otherwise application/octet-stream | |
any | Map | amqp-value | map | 2 (MapMessage) | null | Maps whose values fall outside the JMS restrictions must go without the annotation |
any | See comment | amqp-value | value | null | copied verbatim | For all Java types that are expressible with AMQP 1.0 primitive types (eg. Java Date as AMQP 1.0 Timestamp). |
any | Serializable | data-section | binary | 1 (ObjectMessage) | application/x-java-serialized-object | In the implementation, Serializable needs to be considered after the other non-null bodies. |
other | null | amqp-value | null | copied verbatim |
AMQP 1.0 to Internal
AMQP 1.0 Message | Internal Message | |||||
---|---|---|---|---|---|---|
body section | body data type | annotation x-opt-jms-msg-type | content-type | body object | content type | comments |
amqp-value | null | any | any | null | see comment | this case is treated identical to the case where there is no body section (see below) |
string | any | content types listed as "common textual media types" in section 3.3.7 (Body Sections) of AMQP JMS Mapping specification (WD9) | String | copied verbatim | ||
other | String | "text/plain" | ||||
map | any | any | Map<Object,Object> | null | ||
list | any | any | List<Object> | null | ||
other | any | any | Object | copied verbatim | ||
amqp-sequence | any | any | any | List<Object> | null | |
data | binary (byte[]) | 0 (Message) | any | byte[] | copied verbatim or "application/octet-stream" if null | |
1 (ObjectMessage) | any | byte[] | copied verbatim or "application/x-java-serialized-object" if null | |||
2 (MapMessage) | any | byte[] | copied verbatim or "application/octet-stream" if null | |||
3 (BytesMessage) | any | byte[] | copied verbatim or "application/octet-stream" if null | |||
4 (StreamMessage) | any | byte[] | copied verbatim or "application/octet-stream" if null | |||
5 (TextMessage) | any | byte[] | copied verbatim or "application/octet-stream" if null | |||
other or not set | any | byte[] | copied verbatim or "application/octet-stream" if null | |||
no body | N/A | 0 (Message) | any | null | null | |
1 (ObjectMessage) | any | null |
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.
Conversion of message content from AMQP 0-8...0-10 into AMQP 1-0 is based on mime-type of the message (which is set as message property 'content-type'). Depending from mime-type the message content is converted into amqp:amqp-value
or amqp:data
formats. The table below contains the list of mime-types and corresponding AMQP 1-0 types. *
is used to indicate any other mime type which is not listed in the table.
mime type | content type |
---|---|
text/plain | amqp:amqp-value containing string |
text/xml | amqp:amqp-value containing string |
jms/stream-message | amqp:amqp-value containing list |
jms/map-message | amqp:amqp-value containing map |
amqp/list | amqp:amqp-value containing list |
amqp/map | amqp:amqp-value containing map |
* | amqp:data containing binary |
Conversion of message content from AMQP 1-0 to AQMQP 0-x is based on the AMQP type used in AMQP 1-0 message
AMQP type | java type | Target mime-type | Comment |
---|---|---|---|
string | String | text/plain | |
list of primitive types (double,float,string,byte[],boolean,byte,short,int,long, char) | java.util.List | jms/stream-message | |
map with primitive value types (double,float,string,byte[],boolean,byte,short,int,long, char) | java.util.Map | jms/map-message | Should null be included into the allowed types? |
list | java.util.List | amqp/list | |
map | java.util.Map | amqp/map | |
binary | java.lang.Serializable | application/java-object-stream | |
binary | byte[] | application/octet-stream |
AMQP 1.0 | AMQP 0-8 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
content-type | x-opt-jms-msg-type | body type | content-type | body | Comments | Implemented | |||||||
- | - | - | application/octet-stream | - | |||||||||
- | - | data | application/octet-stream | content of data value | |||||||||
* | 3 | data | application/octet-stream | - | |||||||||
* | 3 | - | application/octet-stream | - | |||||||||
application/x-java-serialized-object | - | data | application/java-object-stream | content of data value | application/x-java-serialized-object | - | - | application/java-object-stream | - | ||||
* | 1 | data | application/java-object-stream | content of data value | |||||||||
* | 1 | - | application/java-object-stream | - | |||||||||
- | - | amqp-sequence (if simple type is used ) | jms/stream-message | list with amqp-sequence values | |||||||||
- | 4 | amqp-sequence (if simple type is used) | jms/stream-message | list with amqp-sequence values | |||||||||
- | 4 | - | jms/stream-message | empty list | |||||||||
- | -/4 | amqp-sequence (if non simple type is use) | throw MessageConversionException | ||||||||||
- | - | amqp-value with value of map with string keys (of length <255) and simple type values (string, boolean, long, integer, short, byte, float, double, byte[]) | amqp/map | 0-10 encoded map | |||||||||
- | amqp-value with value of map with either non string keys or non simple values, or string key with length > 255 | throw MessageConversionException | |||||||||||
- | 2 | - | amqp/map | empty 0-10 encoded map | |||||||||
2 | amqp-value with value of map with either non string keys or non simple values, or string key with length > 255 | throw MessageConversionException | |||||||||||
- | 5 | - | text/plain | - | |||||||||
text/plain | - | - | text/plain | - | |||||||||
- | - | amqp vallue with string or null | text/plain | string value | |||||||||
* | 5 | amqp vallue with string or null | text/plain | string value | |||||||||
text/* | - | data | text/* | data bytes as string | |||||||||
application/xml | - | data | application/xml | data bytes as string | |||||||||
application/*+xml | - | data | application/*+xml | data bytes as string | |||||||||
application/xml-dtd | - | data | application/xml-dtd | data bytes as string | |||||||||
application/json | - | data | application/json | data bytes as string | |||||||||
application/*+json | - | data | application/*+json | data bytes as string | |||||||||
application/javascript | - | data | application/javascript | data bytes as string | |||||||||
application/ecmascript | - | data | application/ecmascript | data bytes as string | |||||||||
* | * | * | throw MessageConversionException |
...
2 (MapMessage) | any | null | null | |
3 (BytesMessage) | any | null | application/octet-stream | |
4 (StreamMessage) | any | null | null | |
5 (TextMessage) | content types listed as "common textual media types" in section 3.3.7 (Body Sections) of AMQP JMS Mapping specification (WD9) | null | copied verbatim | |
other | null | text/plain | ||
other or null | any | null | copy verbatim |
AMQP 0-8...0-9-1 to AMQP 0-10 and vice versa
No conversion is necessary. Content and contentType are simply copied.
AMQP 0-x to Internal
AMQP 0-x | Internal Message | comments | |
---|---|---|---|
content type | body object | content-type | |
content types listed as "common textual media types" in section 3.3.7 (Body Sections) of AMQP JMS Mapping specification (WD9) | String | copied verbatim | if body is empty the body object will contain an empty String |
jms/map-message | Map | null | if body is empty, the body object will contain an empty Map |
amqp/map | Map | null | if body is empty, the body object will contain an empty Map |
jms/stream-message | List | null | if body is empty, the body object will contain an empty List |
amqp/list | List | null | if body is empty, the body object will contain an empty List |
application/java-object-stream | byte[] | application/x-java-serialized-object | if body is empty, the body object will contain an empty byte array |
application/x-java-serialized-object | byte[] | application/x-java-serialized-object | if body is empty, the body object will contain an empty byte array |
application/octet-stream | byte[] | application/octet-stream | if body is empty, the body object will contain an empty byte array |
other | byte[] or null | copied verbatim | if body is empty, the body object will be set to null |
Internal to AMQP 0-x
Internal | AMQP 0-x | comments | |
---|---|---|---|
content type | body | content-type | |
any | String | text/plain | if body is null, content will be empty |
any | List | jms/stream-message or amqp/list | if list items of simple types(string, boolean, double, float, byte[] (Binary), null, byte, short, integer, long ), otherwise conversion to "amqp/list" is attempted. Otherwise content is converted as per Serializable. |
any | byte[] | copied verbatim if not null, otherwise application/octet-stream | |
any | Map | jms/map-message or amqp/map | if keys' length<255 and values of simple types (string, boolean, double, float, binary(byte[]), null, byte, short, integer, long ), the "jms/map-message " format is used. If keys' length<255 but non simple type value is used, than "amqp/map" format is used. Otherwise content is converted as per Serializable. |
any | Serializable | application/java-object-stream | In the implementation, Serializable needs to be considered after the other non-null bodies. |
other | null | copied verbatim |
Conversion issues
This section summarises existing conversion issues
...