Design notes for AMQP 0-9 implemenation
- Reserved field in Request frame must be set to 0.
- Request and Response constants were added to amqp.0-9.xml
- Request ID and Response ID must start at 1 for new channels. 0 is reserved for future use, and should not be used in normal interactions between client and server.
- Response Mark must start at 0 for new channels.
- Content class encoding: For inline messages (first byte = 0), a null or empty byte array may be used.
- Content class encoding: For refs, (first byte = 1), an error or exception must be thrown if the byte array is either null or empty. It makes no sense to send a null ref.
- Content class decoding: For inline messages (first byte = 0), is is not possible to discriminate between the null array or empty array case above that encoded it. Decode as an empty byte array, not a null. (open for discussion)
- Content class: It may be possible to set a value for either/or null and empty values in the future - if a use-case can be made for it
- Possible batch-handling modes should be decided upon.
- TODO: Devise a mechanism to allow one-way requests, where no acknowledgements are sent.
AMQP 0-9 Specification Issues
- Errara will be made by adding to an amqp-errata.0-9.xml file rather than by making edits directly to the specification file. These are the advantages:
- The differences between the current specification and the spec as we use it are readily apparent.
- Different implementations share the same specification file. Thus errors that may arise as a result of a change required for one implementation (e.g. Java) on others (e.g. C++) are controled/eliminated.
- Two constants are missing and need to be inserted as an erratum:
<constant name = "frame-request" value = "9" /> <constant name = "frame-response" value = "10" />
- The Basic field
Basic.type
(ashortstr
) was omitted fromMessage.transfer
. However, after some discussion it was resolved that since thid field serves JMS messaging only, that it should be handled as a custom property rather than creating an XML erratum to insert it. The property name is "JMSXType
". - The Basic field
Basic.mandatory
(abit
) was originally omitted formMessage.transfer
because its functionality would have been handled by the availability of dead-letter queues. However, they did not make it into the AMQP 0-9 speicification. Thus,Basic.mandatory
has been temporarily added as the last field inMessage.transfer
until dead-letter queues become a reality in the specification.