Table of Contents |
---|
Qpid Broker-J supports message conversion from one protocol into another. For example, when message is published with AMQP 0-9-1 and consumed using AMQP 1.0, the Broker takes care about converting the message from AMQP 0-9-1 format into AMQP 1.0. This page provides a summary of how conversion from one protocol into another works.
...
Various types can be used to set values of message properties and values in Map, List messages, etc. The matrices below show how the types are converted. The red colour is used to highlight the types where conversion is unsupported yet. The orange/yellow colours are used to highlight the types for which conversion is implemented but the target type does not correspond to the original one even when protocol supports such type. The green colour is used to highlight the types where conversion is implemented into correct corresponding type on another protocol.
X - used to indicate indicates the corresponding type to convert to
? - used to indicate indicates the type which is currently used to convert but the type differs from the original type
AMQP 0-8
...
...0-9
...
-1 types conversion into AMQP 1
...
-0 types
AMQP 0-9.-1 type | Used in JMS typeClient | AMQP 1.-0 types | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
null | boolean | ubyte | ushort | uint | ulong | byte | short | int | long | float | double | decimal32 | decimal64 | decimal128 | char | timestamp | uuid | binary | string | symbol | list | map | array | ||
short-string | -yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
long-string | Stringyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
field-array | -no *** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
field-table | -yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
float | floatyes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
double | doubleyes |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
void | nullyes | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean | booleanyes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte (short-short-int) | byteyes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
short (short-int) | shortyes |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
integer (long-int) | intyes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long (long-long-int) | longyes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned byte (short-short-uint) - | no |
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned short (short-uint) - | no |
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned integer (long-uint) - | no |
|
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long (long-long-unit) - | no |
|
|
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timestamp - | no **** |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
decimal (decimal-value) | no ***** |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
binary * | byte[]yes ** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
ascii string * | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
wide string * | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
ascii character * | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
* - types are not defined in 0-98...1/0-9/0-8 1 specifications
** - can be used as a Binary type is used to encode byte[] in Map message value. JMS does not allow using byte[] in values for message properties
...
but Qpid Jms implementation allows setting byte[] as property values.
*** Implementation of Message#setObjectProperty(String,Object) allows to pass objects of types java.util.Map and java.util.List which would be encoded using FieldTable and FiledArray accordingly.
**** Timestamp type is used for specifying message timestamp as part of message properties. Values of type "java.util.Date" are not allowed to be used into Message#setObjectProperty(String,Object) where they are encoded as timestamps
***** Decimal types is used to encoded java.math.BigDecimal in Message#setObjectProperty(String,Object)
AMQP 0-8...0-9.
...
1 types conversion into AMQP 0-10 types
AMQP 0-9.1 type | Used in JMS typeClient | AMQP 0-10 types | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
void | boolean | char | int8 | int16 | int32 | int64 | float | double | map | list | uuid | str16 | vbin32 | datetime | dec32 | dec64 | uint8 | uint16 | uint32 | uint64 | ||
short-string | -yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
long-string | Stringyes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
field-array | -no *** |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| |
field-table | -yes *** |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| |
float | floatyes |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| |
double | doubleyes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| |
void | nullyes | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
boolean | booleanyes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
byte (short-short-int) | byteyes |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
short (short-int) | shortyes |
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
integer (long-int) | integeryes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
long (long-long-int) | longyes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| |
unsigned byte(short-short-uint) - | no |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
| |
unsigned short (short-uint) - | no |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
| |
unsigned integer (long-uint) - | no |
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
unsigned long (long-long-unit) | -no |
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
timestamp - | no **** |
|
|
|
|
|
| ? |
|
|
|
|
|
|
| X |
|
|
|
|
| |
decimal (decimal-value) - | no ***** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| |
binary * | byte[]yes ** |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| |
ascii string * | -no |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
wide string * | -no |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
ascii character * | -no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* - types are not defined in 0-9.-1/0-9/0-8 specifications
** - Binary type is used to encode byte[] can be used as a in Map message value. JMS does not allow using byte[] in values for message properties
AMQP 0-10 types conversion into AMQP 0-8/0-9.x
but Qpid Jms implementation allows setting byte[] as property values.
*** Implementation of Message#setObjectProperty(String,Object) allows to pass objects of types java.util.Map and java.util.List which would be encoded using FieldTable and FiledArray accordingly.
**** Timestamp type is used for specifying message timestamp as part of message properties. Values of type "java.util.Date" are allowed to be passed into Message#setObjectProperty(String,Object) where they are encoded as timestamps
***** Decimal type java.math.BigDecimal is allowed to pass into Message#setObjectProperty(String,Object). It is encoded as decimal
AMQP 0-10 types conversion into AMQP 0-8...0-9-1
0-10 0-10 defines the following mandatory types: uint8, uint16, uint32, sequence-no, uint64, datetime, uuid, vbin8, str8, vbin16, str16, byte-ranges, sequence-set, vbin32,map, array, struct32, bit.
AMQP 0-10 type
| Used in JMS TypeClients | 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 | byteyes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| |
uint8 | -no |
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
|
| |
char | -no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
boolean | booleanyes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| |
bin16 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
| X |
|
|
| |
int16 | shortyes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| |
uint16 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
| |
bin32 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
| X |
|
|
| |
int32 | intyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
uint32 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
| |
float | floatyes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
char-utf32 | -no |
| X*** |
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| | |
sequence-no | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin64 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
| X |
|
|
| |
int64 | longyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| |
uint64 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? | X |
|
|
|
| |
double | doubleyes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
datetime | -no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
| |
bin128 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
uuid ** | -no ****** |
| XX |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bin256 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin512 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin1024 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
bin40 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
dec32 | -no |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| ? |
|
|
| |
bin72 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
dec64 | -no |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
void | nullyes |
|
|
|
|
|
|
|
| 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 | Stringyes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
byte-ranges | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
sequence-se | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
vbin32 | byte[] yes **** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
map | -no ***** |
|
|
|
| X* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
list | -no ***** |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
array | -no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
struct32 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
* - the type of keys in AMQP 0-10 map is utf8 encoded str8 whilst earlier protocols's FiledTable key type is short-string which allows only ASCII characters. Thus, conversion of UTF characters into ASCII characters would change the keys.
** - 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.
**** - byte[] can be used as a Map message value. JMS does not allow using in values for message properties
***** Qpid Client JMS extensions like ListMessage and MapMesssage allows specifying instances of java.util.Collection in parts of the messages. As result, the corresponding collections are encoded as AMQP 0-10
...
maps and lists.
****** Instances of java.util.UUID and java.lang.Character can be specified as part of ListMessage. They are encoded into AMQP 0-10 types "uuid" and "char" (one byte) accordingly.
****** Values of type java.lang.Character are allowed to be set in Message#setObjectProperty(String,Object). They are encoded using type AMQP 0-10 type
...
JMS Type
"char" (one byte).
AMQP 0-10 types conversion into AMQP
...
1.0 types
AMQP 0-10 type | Used in JMS Client | AMQP 1.0 types | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
null | boolean | ubyte | ushort | uint | ulong | byte | short | int | long | float | double | decimal32 | decimal64 | decimal128 | char | timestamp | uuid | binary | string | symbol | list | map | array | ||
bin8 | -no |
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int8 | byteyes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8 | -no |
|
| X |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char | -no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
boolean | booleanyes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bin16 | -no |
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int16 | shortyes |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint16 | -no |
|
|
| X |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bin32 | -no |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int32 | intyes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32 | -no |
|
|
|
| X |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float | floatyes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
char-utf32 | -no |
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
sequence-no | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin64 | -no |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int64 | longyes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint64 | -no |
|
|
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double | doubleyes |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
datetime | -no |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
bin128 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
uuid | -no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
bin256 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin512 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin1024 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin40 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
dec32 | -no |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| ? |
|
|
|
|
|
bin72 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
dec64 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| ? |
|
|
|
|
|
void | nullyes | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bit | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
vbin8 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
str8-latin | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str8 | -yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str8-utf16 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
vbin16 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
str16-latin | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str16 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str16-utf16 | Stringyes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
byte-ranges | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
sequence-se | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
vbin32 | byte[]yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
map | -no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
list | -no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
array | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
struct32 | -no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
AMQP 1-0 types conversion into AMQP 0-8/0-9.x
**** byte[] can be used as a Map message value. JMS does not allow using in values for message properties
***** Qpid Client JMS extensions like ListMessage and MapMesssage allows specifying instances of java.util.Collection in parts of the messages. As result, the corresponding collections are encoded as AMQP 0-10 maps and lists.
****** Instances of java.util.UUID and java.lang.Character can be specified as part of ListMessage. They are encoded into AMQP 0-10 types "uui" and "char" (one byte) accordingly.
****** Values of type java.lang.Character are allowed to be set in Message#setObjectProperty(String,Object). They are encoded using type AMQP 0-10 type "char" (one byte).
AMQP 1-0 types conversion into AMQP 0-8...0-9.1
AMQP 1-0 type | Used in JMS Client | AMQP 0-9-1 types | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
short-string | long-string | timestamp | field-array | field-table | float | double | decimal | void | boolean | byte | ubyte | short | ushort | int | uint | long | ulong | binary | ascii str | wide str | ascii char | ||
null | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean | yes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
ubyte | no |
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
|
|
ushort | no |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
uint | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
ulong | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? | X |
|
|
|
|
byte | yes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
short | yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
int | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
long | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
float | yes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal32 | no |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal64 | no |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal128 | no |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? **** |
timestamp | no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
uuid *** | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
binary | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
string | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
symbol | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list | no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
map | no |
|
|
|
| X * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
array | no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* - 1.0 map allows any type in keys whilst 0-8...0-9-1 FiledTable type supports only short-string as a key type. For string keys with length greater than 256, an exception is thrown on conversion.
*** - 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?
**** - char in 1-0 is a UTF-32BE encoded unicode character but char in 0-10 is an octet. Should it be converted into string?
AMQP 1-0 types conversion into AMQP 0-10 types
AMQP 1-0 type | Used in JMS Client | AMQP 0-10 types | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
void | boolean | char | char-utf32 | int8 | int16 | int32 | int64 | float | double | map | list | uuid | str16 | vbin32 | datetime | dec32 | dec64 | uint8 | uint16 | uint32 | unit64 | ||
null | null | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
boolean | boolean |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
ubyte | - |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
| ||
ushort | - |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
| ||
uint | - |
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ||
ulong | - |
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
byte | byte |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
short | short |
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
int | int |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
long | long |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ||
float | float |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| ||
double | double |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| ||
decimal32 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| ||
decimal64 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| ||
decimal128 | - |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| ||
char | - |
|
| ? | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
timestamp | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| ? | |
uuid | - |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
| ||
binary | byte[] |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| ||
string | String |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||
symbol | - |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||
list | - |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| ||
map | - |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| ||
array | - |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
Message properties conversion matrices
AMQP 0-8...0-9-1 message properties conversion into AMQP 1.0 message properties
AMQP 0-8...0-9-1 message | AMQP 1.0 message | ||||||
---|---|---|---|---|---|---|---|
Property origin | Property name | type | Section name | Property name | Type | Comments | Implemented |
message property | delivery mode | octet | header | durable | boolean | true when 'delivery mode'=2, otherwise false | Y |
message property | priority | octet | header | priority | unsigned byte |
| Y |
message property | expiration | short-string | header | ttl | milliseconds | expiration - 'arrival-time'; absolute-expiry-time is not used. see QPID-7872 | Y |
message property | content type | short-string | properties | content-type | symbol | value '"application/java-object-stream' changed to 'application/x-java-serialized-object' | Y |
message property | encoding | short-string | properties | content-encoding | symbol |
| Y |
message property | message id | short-string | properties | message-id | string | used to convert to binary in AMQP 1.0 | Y |
message property | correlation id | short-string | properties | correlation-id | string | used to convert to binary in AMQP 1.0 | Y |
message property | user id | short-string | properties | user-id | binary |
| Y |
message property | reply to | short-string | properties | reply-to | string | if binding url the value is changed to <exchange name>/<routing key> or <exchange_name>/<queue_name> or <exchange_name> or <queue name> or <routing key> depending on whether <exchange name>, <routing key> or <queue name> is specified. Original value if not a valid BURL. No address support. | Y |
message property | timestamp | timestamp | properties | creation-time | timestamp |
| Y |
message property | type | short-string | properties | subject | string | See JMS bindmap spec. setting "qpid.subject" in the message properties takes precedence over this. | Y |
message property | application id | short-string |
|
|
|
| N |
message property | cluster id | short-string |
|
|
|
| N |
message property | headers | field-table | application-properties | * | every entry except for 'qpid.subject' is put into application-properties as separate property. | Y | |
message property 'headers' | qpid.subject | short-string | properties | subject | string | This takes precedence over the message property "type". | Y |
message property 'headers' | JMSXGroupID | short-string | properties | group-id | string | see JMS bindmap | Y |
message property 'headers' | JMSXGroupSeq | int | properties | group-sequence | sequence number | see JMS bindmap | Y |
message delivery count | int | header | delivery-count | uint | dynamically set on sending | Y | |
message delivery count | int | header | first-acquirer | boolean |
| N | |
basic.publish | routing-key | short-string | properties | to | string | "to" property should be set to <exchange>/<routing-key> | Y |
basic.publish | exchange | short-string | properties | to | string | "to" property should be set to <exchange>/<routing-key> | Y |
basic.publish | mandatory | bit | N | ||||
basic.publish | immediate | bit | N | ||||
message property | content-type | short-string | message-annotations | x-opt-jms-msg-typ | string | N |
AMQP 0-8...0-9-1 message properties conversion into AMQP 0-10 message properties
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 properties conversion into AMQP 1.0 message properties
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 | |||||||||||||||||||||||||||||||
AMQP 1-0 type | JMS type | AMQP 0-9.1 types | |||||||||||||||||||||||||||||||
short-string | long-string | timestamp | field-array | field-table | float | double | decimal | void | boolean | byte | ubyte | short | ushort | int | uint | long | ulong | binary | ascii str | wide str | ascii char | ||||||||||||
null | null
|
| |||||||||||||||||||||||||||||||
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 |
| X |
|
|
| Y |
|
|
|
|
| |||||||||||||||||
message-properties | user-id | vbin16 | properties | user-id | binary |
| Y | boolean | boolean |
|
|
|
|
|
|
|
|
| |||||||||||||||
message-properties | reply-to | reply-to | properties | reply-to | string | either <exchange> or <exchange>/<routingKey> or <routingKey> | Y | ||||||||||||||||||||||||||
message-properties | app-id | vbin16 | X
|
|
|
|
| ||||||||||||||||||||||||||
message-properties | application-headers | map | application-properties | * | MessageConversionException is thrown when string or key is invalid | Y | |||||||||||||||||||||||||||
message-properties | content-length | uint64 |
|
|
|
|
|
|
| ubyte | - |
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
|
| |
ushort | - |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
| ||||||||||
uint | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
| ||||||||||
ulong | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? | X |
|
|
|
| ||||||||||
message-properies headers | qpid.subject | str8 | properties | subject | string |
| Y | ||||||||||||||||||||||||||
message properies headers | JMSXGroupID | str8 | properties | group-id | string |
| Y | ||||||||||||||||||||||||||
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 properties conversion into AMQP 0-8...0-9-1 message properties
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 | byte | byte |
|
|
|
| X |
|
|
|
| ||||||||||||||||||||||||||||||||||||||||
delivery-properties | routing-key | str8 | basic.publish | routing-key | short-string | Y | |||||||||||||||||||||||||||||||||||||||||||||||
delivery-properties | exchange | str8 | basic.publish | shortexchange | short-string | Y | |||||||||||||||||||||||||||||||||||||||||||||||
delivery-properties | immediate | bit | basic.publish | immediate | bit |
| Y |
|
| X |
|
| |||||||||||||||||||||||||||||||||||||||||
delivery-properties | discard-unroutable | bit | basic.publish | mandatory | bit | Y |
|
|
|
| int | int||||||||||||||||||||||||||||||||||||||||||
message-properties | content-type | str8 | message property | content type | short-string |
| Y | ||||||||||||||||||||||||||||||||||||||||||||||
message-properties | content-encoding | str8 | message property | encoding | short-string |
|
|
|
|
|
|
| Y |
|
|
| X |
| |||||||||||||||||||||||||||||||||||
message-properties | message-id | uuid | message property | message id | short-string |
| Y |
|
|
| long | long | |||||||||||||||||||||||||||||||||||||||||
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 |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| float | float |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| double | double |
|
|
|
|
|
| X|
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 properties conversion into AMQP 0-8...0-9-1 message properties
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 | decimal32message property | -delivery mode | unsigned byte |
| Y | ||||||||||||||||||||||||
header | priority | unsigned byte | message property | Xpriority | 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 |
|
|
|
|
|
|
|
|
| decimal64 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||
header |
|
| Xfirst-acquirer | boolean |
|
|
| decimal128 | -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| |
char | - |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? **** | ||||||||
timestamp | - |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
| ||||||||
uuid *** | - | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||
binary | byte[] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| ||||||||
string | String |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||
symbol | - |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||
list | - |
|
|
| X** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||
map | - |
|
|
|
| X * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||||||||
array | - |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* - 1.0 map allows any type in keys whilst 0-8...0-9-1 FiledTable type only allows short-strings as key type. For string keys with length greater than 256, an exception is thrown on conversion.
** - list in AMQP 1.0 is a sequence of polymorphic values valued FieldArray is not.
*** - 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?
**** - char in 1-0 is a UTF-32BE encoded unicode character but char in 0-10 is an octet. Should it be converted into string?
AMQP 1-0 types conversion into AMQP 0-10 types
AMQP 1-0 type | JMS type | AMQP 0-10 types | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
void | boolean | char | char-utf32 | int8 | int16 | int32 | int64 | float | double | map | list | uuid | str16 | vbin32 | datetime | dec32 | dec64 | uint8 | uint16 | uint32 | unit64 | ||
null | null | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
boolean | boolean |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
ubyte | - |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
| ||
ushort | - |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
| ||
uint | - |
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ||
ulong | - |
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
byte | byte |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
short | short |
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
int | int |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
long | long |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ||
float | float |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| ||
double | double |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| ||
decimal32 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| ||
decimal64 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| ||
decimal128 | - |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| ||
char | - |
|
| ? | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
timestamp | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| ? | |
uuid | - |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
| ||
binary | byte[] |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| ||
string | String |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||
symbol | - |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||
list | - |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| ||
map | - |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| ||
array | - |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
Message properties conversion matrices
AMQP 0-8..0-9-1 message properties conversion into AMQP 1-0 message properties
AMQP 0-8..0-9-1 message | AMQP 1-0 message | Implemented
| ||||||
---|---|---|---|---|---|---|---|---|
Property origin | Property name | Bit | type | Section name | Property name | Type | Comments | |
message propery | delivery mode | 12 | unsigned byte | header | durable | boolean | true when 'delivery mode'=2, otherwise false | Y |
message propery | priority | 11 | unsigned byte | header | priority | unsigned byte |
| Y |
message propery | expiration | 8 | short-string | header | ttl | milliseconds/ulong | expiration - 'arrival-time' | Y |
message propery | expiration | 8 | short-string | header | absolute-expiry-time | timestamp /ulong |
| Y |
message propery | content type | 15 | short-string | properties | content-type | symbol | value '"application/java-object-stream' changed to 'application/x-java-serialized-object' | Y |
message propery | encoding | 14 | short-string | properties | content-encoding | symbol | only 'gzip' encoding is stored, null otherwise | Y |
message propery | message id | 7 | short-string | properties | message-id | binary |
| Y |
message propery | correlation id | 10 | short-string | properties | correlation-id | binary |
| Y |
message propery | user id | 4 | short-string | properties | user-id | binary |
| Y |
message propery | reply to | 9 | short-string | properties | reply-to | string | if binding url the value is changed to <exchange name>/<routing key> or <queue name> or <routing key> if either <exchange name>, <routing key> or <queue name> is sepcified, otherwise original value. No address support. | Y |
message propery | timestamp | 6 | long | properties | creation-time | timestamp /ulong |
| N |
message propery | type | 5 | short-string | message-annotation | x-opt-jms-type | string |
| N |
message propery | application id | 3 | short-string | application-properties | application-id | string |
| N |
message propery | cluster id | 2 | short-string | application-properties | cluster-id | string |
| N |
message propery | headers | 13 | field-table | application-properties | every entry except for 'qpid.subject' is put into application-properties as separate property. | Y | ||
message propery headers | qpid.subject | short-string | properties | subject | string |
| Y | |
message propery headers | JMSXGroupID | short-string | properties | group-id | string |
| N | |
message propery headers | JMSXGroupSeq | int | properties | group-sequence | sequence number |
| N | |
message delivery count | int | header | delivery-count | uint | dynamically set on sending | Y | ||
message delivery count | int | header | first-acquirer | boolean | dynamically set on sending | Y | ||
basic.publish | routing-key | short-string | properties | subject | string |
| Y | |
basic.publish | exchange | short-string | properties | to | string | Should it be included into 'properties->to' in a |
AMQP 0-8..0-9-1 message properties conversion into AMQP 0-10 message properties
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 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-string | 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 | 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 properties conversion into AMQP 0-10 message properties
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 | Y |
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 | 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 properties conversion to internal message
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 | ttl | milliseconds/ulong | MessageHeader | getExpiration() | long | Y | |
properties | content-type | symbol | MessageHeader | getMimeType() | String |
| Y |
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 is used | Y |
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 properties conversion into AMQP 1.0 message properties
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 |
| Y |
InternalMessage | getEncoding() | String | properties | content-encoding | symbol |
| Y |
MessageHeader | getContentType() | str8 | properties | content-type | symbol |
| Y |
properties | subject | string | N | ||||
MessageHeader | getHeader(String)/getHeaderNames() | String/Enumeration | application-properties | * | MessageConversionException is thrown when string or key is invalid | Y |
AMQP 0-8...0-9-1 message properties conversion into internal message properties
AMQP 0-8...0-9-1 message | Internal message | Implemented | |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | type | Property class | Property name | Type | Comments | |
message property | delivery mode | octet | InternalMessage InternalMessageMetaData | isPeristent() | boolean |
| Y |
message property | priority | octet | MessageHeader | priority | byte |
| Y |
message property | expiration | short-string | MessageHeader | expiration | long | Y | |
message property | timestamp | long | MessageHeader | timestamp | long | Y | |
message property | content type | short-string | MessageHeader | contentType | String |
| Y |
message property | encoding | short-string | MessageHeader | encoding | String |
| Y |
message property | message id | short-string | MessageHeader | messageId | String |
| Y |
message property | correlation id | short-string | MessageHeader | correlationId | String |
| Y |
message property | user id | short-string | MessageHeader | userId | String |
| Y |
message property | reply to | short-string | MessageHeader | getReplyTo() | String | If 'reply to' is a BURL parses it and converts it into <exchange>/<routingKey> format | Y |
message property | application id | short-string | MessageHeader | appId | String |
| Y |
message property | headers | field-table | MessageHeader | getHeadersMap() | Map<String,Object> |
| Y |
message property | type | short-string | MessageHeader | getType() | String |
| Y |
entry delivery count | int | MessageHeader | redelivered | bit | dynamically set on sending |
| |
basic.publish | routing-key | short-string | InternalMessage | initialRoutingAddress | String |
| N |
basic.publish | exchange | short-string | InternalMessage | to | String |
| Y |
basic.publish | immediate | bit |
|
|
|
| N |
basic.publish | mandatory | bit |
|
|
|
| N |
Internal message properties conversion into AMQP 0-8 message properties
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 | See section Address Conversion then convert to BURL. MessageConversionException is thrown when conversion to short-string fails | 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 |
| Y |
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 | 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 | ||||
basic.publish | mandatory | bit | always set to false |
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 | Y | |
delivery-properties | exchange | str8 | InternalMessage | getTo() | String | Y | |
delivery-properties | immediate | bit |
|
| N | ||
delivery-properties | discard-unroutable | bit |
| N | |||
message-properties | content-type | str8 | InternalMessage | getMimeType() | String |
| Y |
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> | Y |
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 properties conversion into AMQP 0-10 message properties
Internal message | AMQP 0-10 message | Implemented
| |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Segment name | Property name | Type | Comments | |||||||||
InternalMessage InternalMessageMetaData | isPersistent() isPersistent() | boolean | |||||||||||||
AMQP 0-8..0-9-1 message | AMQP 0-10 message | Implemeneted | |||||||||||||
Property origin | Property name | Bit | type | Header entry | Property name | Type | Comments | ||||||||
message propery | delivery mode | 12 | unsigned byte | delivery-properties | delivery-mode | uint8 |
| N | |||||||
message propery | priority | 11 | unsigned byte | delivery-properties | priority | uint8 |
| Y | |||||||
Y | |||||||||||||||
MessageHeader | getPriority() | byte | message propery | expiration | 8 | short-stringdelivery-properties | expirationpriority | datetime | dynamically set on sendinguint8 |
| Y | message propery | expiration | 8 | |
MessageHeader | getExpiration() | longshort-string | delivery-properties | ttl | uint64 | getExpiration() - arrivalTime | Y | message propery | timestamp | ||||||
MessageHeader | getExpiration() | 6long | delivery-properties | timestampexpiration | datetime | Y | |||||||||
MessageHeader | getMessageId() | String | message | properycontent type | 15 | -properties | message-id | uuid | if conversion to uuid fails 'message-id' is not set | Y | |||||
MessageHeader | getCorrelationId() | String | short-stringmessage-properties | contentcorrelation- | typeid | str8 | vbin16 | MessageConversionException is thrown when conversion to vbin16 fails | Y | message propery | encoding | 14 | short-string|||
MessageHeader | getUserId() | String | message-properties | contentuser- | encodingstr8 |
| Y | ||||||||
message propery | message id | 7 | short-string | message-properties | message-id | uuid | removes 'ID:', if value cannpt be converted into uuid, null is used . Is it correct? | Y | |||||||
message propery | correlation id | 10 | short-string | message-properties | correlation-id | vbin16 |
| Y | |||||||
message propery | user id | 4 | short-string | message-properties | user-id | vbin16 |
| Y | |||||||
message propery | reply to | 9 | short-string | message-properties | reply-to | reply-to |
| Y | |||||||
message propery | application id | 3 | short-string | message-properties | app-id | vbin16 |
| Y | |||||||
message propery | headers | 13 | field-table | message-properties | application-headers | map |
| Y | |||||||
message propery | type | 5 | short-string | message-properties | application-headers['x-jms-type'] | str8 |
| Y | |||||||
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 thrown when conversion to str8 fails. | Y | ||||||||
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. | Y | ||||||||
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 |
| T | ||||||||
MessageHeader | getHeader(String)/getHeaderNames() | String/Enumeration | message-properties | application-headers | map | MessageConversionException is thrown when key or value is invalid | Y | ||||||||
InternalMessage | message content | long | message-properties | content-length | uint64 | Y | |||||||||
int | delivery-properties | redeliveredimmediate | bit | dynamically set on sending | Y | basic.publish | routing-key | N | |||||||
short-string | delivery-properties | routingdiscard- | keyunroutable | 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 |
| N |
AMQP 0-10 message properties conversion into AMQP 1-0 message properties
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/ulong |
| Y |
delivery-properties | expiration | datetime | header | absolute-expiry-time | timestamp /ulong |
| Y |
delivery-properties | timestamp | datetime | properties | creation-time | timestamp /ulong |
| N |
delivery-properties | redelivered | bit | header | first-acquirer | boolean |
| N |
delivery-properties | routing-key | str8 | properties | subject | string |
| N |
delivery-properties | exchange | str8 | properties | to | string |
| N |
delivery-properties | immediate | bit |
|
|
|
|
|
delivery-properties | discard-unroutable | bit | header | first-acquirer | boolean |
| N |
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 | binary |
| 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 |
| Y |
message-properties | app-id | vbin16 | application-properties | application-id | string |
| N |
message-properties | application-headers | map | application-properties |
| Y | ||
message-properties | content-length | uint64 |
|
|
|
|
|
message-properies headers | qpid.subject |
| properties | subject | string | Y | |
message properies headers | JMSXGroupID | str | properties | group-id | string | N | |
message properties headers | JMSXGroupSeq | int | properties | group-sequence | sequence number | N |
AMQP 0-10 message properties conversion into AMQP 0-8..0-9-1 message properties
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 propery | delivery mode | boolean | true when 'delivery mode'=2, otherwise false | Y |
delivery-properties | priority | uint8 | message propery | priority | unsigned byte |
| Y |
delivery-properties | ttl | uint64 | message propery | expiration | short-string |
| Y |
delivery-properties | timestamp | datetime | message propery | timestamp | long |
| N |
delivery-properties | redelivered | bit | header | first-acquirer | boolean |
| N |
delivery-properties | routing-key | str8 | properties | subject | string |
| N |
delivery-properties | exchange | str8 | properties | to | string |
| N |
delivery-properties | immediate | bit |
|
|
|
|
|
delivery-properties | discard-unroutable | bit | header | first-acquirer | boolean |
| N |
message-properties | content-type | str8 | message propery | content type | short-string |
| Y |
message-properties | content-encoding | str8 | message propery | encoding | short-string |
| Y |
message-properties | message-id | uuid | message propery | message id | short-string |
| Y |
message-properties | correlation-id | vbin16 | message propery | correlation id | short-string |
| Y |
message-properties | user-id | vbin16 | message propery | user id | short-string |
| Y |
message-properties | reply-to | reply-to | message propery | reply to | short-string |
| Y |
message-properties | app-id | vbin16 | application-properties | application-id | string |
| N |
message-properties | application-headers | map | application-properties |
| Y | ||
message-properties | content-length | uint64 |
|
|
|
|
|
message-properies headers | qpid.subject | str | properties | subject | string |
| Y |
message properies headers | JMSXGroupID | str | properties | group-id | string |
| N |
message properties headers | JMSXGroupSeq | int | properties | group-sequence | sequence number |
| N |
AMQP 1-0 message properties conversion into AMQP 0-8..0-9-1 message properties
AMQP 1-0 message | AMQP 0-8..0-9-1 message |
|
|
|
| Implemented
| ||
---|---|---|---|---|---|---|---|---|
Section name | Property name | Type | Properties | Property name | Bit | Type | Comments | |
header | durable | boolean | message propery | delivery mode | 12 | unsigned byte |
| Y |
header | priority | unsigned byte | message propery | priority | 11 | unsigned byte |
| Y |
header | ttl | milliseconds/ulong | message propery | expiration | 8 | short-string |
| Y |
header | absolute-expiry-time | timestamp /ulong |
|
|
|
|
|
|
header | delivery-count | uint |
|
|
|
|
|
|
header | first-acquirer | boolean |
|
|
|
|
|
|
properties | content-type | symbol | message propery | content type | 15 | short-string |
| Y |
properties | content-encoding | symbol | message propery | encoding | 14 | short-string |
| Y |
properties | message-id | binary | message propery | message id | 7 | short-string |
| Y |
properties | correlation-id | binary | message propery | correlation id | 10 | short-string |
| Y |
properties | user-id | binary | message propery | user id | 4 | short-string |
| Y |
properties | reply-to | string | message propery | reply to | 9 | short-string |
| Y |
properties | creation-time | timestamp /ulong | message propery | timestamp | 6 | long |
| N |
properties | subject | string | message propery headers | qpid.subject | short-string |
| N | |
properties | group-id | string | message propery headers | JMSXGroupID | short-string |
| N | |
properties | group-sequence | sequence number | message propery headers | JMSXGroupSeq | int |
| N | |
properties | to | string |
|
|
|
| exchange/routing-key | N |
application-properties | application-id | string |
|
|
|
|
| N |
application-properties | cluster-id | string |
|
|
|
|
| N |
application-properties |
|
| message propery | headers | 13 | fieldtable |
| Y |
message-annotation | x-opt-jms-type | string | message propery | type | 5 | short-string |
| Y |
AMQP 1-0 message properties conversion into AMQP 0-10 message properties
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 | ttl /absolute-expiry-time | milliseconds/ulong | delivery-properties | ttl | uint64 |
| Y |
properties | content-type | symbol | message-properties | content-type | str8 |
| Y |
properties | content-encoding | symbol | message-properties | content-encoding | str8 |
| Y |
properties | message-id | binary | message-properties | message-id | uuid |
| Y |
properties | correlation-id | binary | message-properties | correlation-id | vbin16 |
| Y |
properties | user-id | binary | message-properties | user-id | vbin16 |
| Y |
properties | reply-to | string | message-properties | reply-to | reply-to |
| Y |
properties | creation-time | timestamp /ulong | delivery-properties | timestamp | datetime |
| N |
properties | subject | string | message-properies | headersqpid.subject |
|
| N |
properties | group-id | string | message-properies | headersJMSXGroupID |
|
| N |
properties | group-sequence | sequence number | message properies | headersJMSXGroupSeq |
|
| N |
properties | to | string | delivery-properties | exchange | str8 |
| N |
properties | to | string | delivery-properties | routing-key | str8 |
| N |
application-properties | - | map | message-properties | application-headers | map |
| Y |
content | delivery-properties | content-length |
|
| Y |
Message types conversion matrices
TODO
bit | N |
Anchor | ||||
---|---|---|---|---|
|
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 | application/x-java-serialized-object | |||
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
Issue description | Protocols |
---|---|
Missing Type conversion (decimal, uuid (0-10 --> 0-8...0-9-1)) | All |
Inaccurate Type conversion (unsigned types are converted into types (all), timestamps are converted into long (all), utf chars are converted into ascii chars, binary types are converted into signed (0-10)) | All |
Unsupported property key or value (uuid is unsupported in 0-8...0-9-1, decimal is unsupported in 0-10, etc) | All |
Missing conversion of message properties | All |
0-10 requires uuid type for message-id. As result, a conversion of non-0-10 message-id which is not UUID can not be done. This should not prevent the conversion of entire message. | non-0-10 --> 0-10 |
Conversion of application properties from AMQP 1-0 into AMQP 0-x headers (0-8...0-9-1 FieldTable and 0-10 map) when application properties length exceeds 255 character ( or contains non-ascii characters or start with illegal characters) | 1-0 --> 0-x |
Conversion of AMQP 0.x headers (represented as 0-8...0-9-1 FieldTable or 0-10 map) into AMQP 1-0 application properties when headers values are not primitives (for example, maps, collections, etc) | 0-x --> 1-0 |
Conversion of Map content from AMQP 1-0 into AMQP 0-x Map Message when keys are not strings | 1-0 --> 0-x |
JMS message type is changed when converted from AMQP 0.x into AMQP 1.0 (jms-type annotation is not set) | 0-x --> 1-0 |
JMS message type is changed when converted from AMQP 1-0 into AMQP 0.x (jms-type annotation is not respected) | 1-0 --> 0-x |
Handling of conversion errors
The converter modules should employ the following strategies when message cannot be converted into target protocol format (for example, due to unsupported types, values, etc)
- log conversion failure and close connection with appropriate error
- log conversion failure and move message into DLQ or delete the message if no DLQ is configured
- log conversion failure and skip the message (similar as if the client rejected the message)
The approaches above can be configured on broker or virtual host using context variables.
Closing the connections should be a default behaviour.
.