From d8048acc7b376aabebdbaa0ed30ef65132cba4c8 Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Thu, 18 Feb 2010 21:29:59 +0000 Subject: remove extra dots from filenames so as not to confuse windows git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@911596 13f79535-47bb-0310-9956-ffa450edef68 --- python/qpid/ops.py | 3 +- python/qpid/specs/amqp-0-10-qpid-errata.xml | 6654 +++++++++++++++++++++++++++ python/qpid/specs/amqp-0-10.dtd | 246 + python/qpid/specs/amqp-0-8.xml | 3998 ++++++++++++++++ python/qpid/specs/amqp-0-9.xml | 5248 +++++++++++++++++++++ python/qpid/specs/amqp.0-10-qpid-errata.xml | 6654 --------------------------- python/qpid/specs/amqp.0-10.dtd | 246 - python/qpid/specs/amqp.0-8.xml | 3998 ---------------- python/qpid/specs/amqp.0-9.xml | 5248 --------------------- python/qpid/specs_config.py | 6 +- python/setup.py | 11 +- 11 files changed, 16158 insertions(+), 16154 deletions(-) create mode 100644 python/qpid/specs/amqp-0-10-qpid-errata.xml create mode 100644 python/qpid/specs/amqp-0-10.dtd create mode 100644 python/qpid/specs/amqp-0-8.xml create mode 100644 python/qpid/specs/amqp-0-9.xml delete mode 100644 python/qpid/specs/amqp.0-10-qpid-errata.xml delete mode 100644 python/qpid/specs/amqp.0-10.dtd delete mode 100644 python/qpid/specs/amqp.0-8.xml delete mode 100644 python/qpid/specs/amqp.0-9.xml (limited to 'python') diff --git a/python/qpid/ops.py b/python/qpid/ops.py index ac1819e6da..acb54aedc5 100644 --- a/python/qpid/ops.py +++ b/python/qpid/ops.py @@ -242,7 +242,8 @@ def load_types_from_xml(file): return types def load_types(file): - pclfile = "%s.ops.pcl" % file + base, ext = os.path.splitext(file) + pclfile = "%s.pcl" % base if os.path.exists(pclfile) and \ os.path.getmtime(pclfile) > os.path.getmtime(file): f = open(pclfile, "rb") diff --git a/python/qpid/specs/amqp-0-10-qpid-errata.xml b/python/qpid/specs/amqp-0-10-qpid-errata.xml new file mode 100644 index 0000000000..d0d9486fef --- /dev/null +++ b/python/qpid/specs/amqp-0-10-qpid-errata.xml @@ -0,0 +1,6654 @@ + + + + + + + + + + + + + + + + + The bin8 type consists of exactly one octet of opaque binary data. + + + + 1 OCTET + +----------+ + | bin8 | + +----------+ + + + + bin8 = OCTET + + + + + + The int8 type is a signed integral value encoded using an 8-bit two's complement + representation. + + + + 1 OCTET + +----------+ + | int8 | + +----------+ + + + + int8 = OCTET + + + + + + The uint8 type is an 8-bit unsigned integral value. + + + + 1 OCTET + +---------+ + | uint8 | + +---------+ + + + + uint8 = OCTET + + + + + + The char type encodes a single character from the iso-8859-15 character set. + + + + 1 OCTET + +----------+ + | char | + +----------+ + + + + char = OCTET + + + + + + The boolean type is a single octet that encodes a true or false value. If the octet is zero, + then the boolean is false. Any other value represents true. + + + + 1 OCTET + +---------+ + | boolean | + +---------+ + + + + boolean = OCTET + + + + + + + + The bin16 type consists of two consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET + +-----------+-----------+ + | octet-one | octet-two | + +-----------+-----------+ + + + + bin16 = 2 OCTET + + + + + + The int16 type is a signed integral value encoded using a 16-bit two's complement + representation in network byte order. + + + + 1 OCTET 1 OCTET + +-----------+----------+ + | high-byte | low-byte | + +-----------+----------+ + + + + int16 = high-byte low-byte + high-byte = OCTET + low-byte = OCTET + + + + + + The uint16 type is a 16-bit unsigned integral value encoded in network byte order. + + + + 1 OCTET 1 OCTET + +-----------+----------+ + | high-byte | low-byte | + +-----------+----------+ + + + + uint16 = high-byte low-byte + high-byte = OCTET + low-byte = OCTET + + + + + + + + The bin32 type consists of 4 consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-------------+------------+ + | octet-one | octet-two | octet-three | octet-four | + +-----------+-----------+-------------+------------+ + + + + bin32 = 4 OCTET + + + + + + The int32 type is a signed integral value encoded using a 32-bit two's complement + representation in network byte order. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+------------+----------+----------+ + | byte-four | byte-three | byte-two | byte-one | + +-----------+------------+----------+----------+ + MSB LSB + + + + int32 = byte-four byte-three byte-two byte-one + byte-four = OCTET ; most significant byte (MSB) + byte-three = OCTET + byte-two = OCTET + byte-one = OCTET ; least significant byte (LSB) + + + + + + The uint32 type is a 32-bit unsigned integral value encoded in network byte order. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+------------+----------+----------+ + | byte-four | byte-three | byte-two | byte-one | + +-----------+------------+----------+----------+ + MSB LSB + + + + uint32 = byte-four byte-three byte-two byte-one + byte-four = OCTET ; most significant byte (MSB) + byte-three = OCTET + byte-two = OCTET + byte-one = OCTET ; least significant byte (LSB) + + + + + + The float type encodes a single precision 32-bit floating point number. The format and + operations are defined by the IEEE 754 standard for 32-bit floating point numbers. + + + + 4 OCTETs + +-----------------------+ + | float | + +-----------------------+ + IEEE 754 32-bit float + + + + float = 4 OCTET ; IEEE 754 32-bit floating point number + + + + + + The char-utf32 type consists of a single unicode character in the UTF-32 encoding. + + + + 4 OCTETs + +------------------+ + | char-utf32 | + +------------------+ + UTF-32 character + + + + char-utf32 = 4 OCTET ; single UTF-32 character + + + + + + The sequence-no type encodes, in network byte order, a serial number as defined in RFC-1982. + The arithmetic, operators, and ranges for numbers of this type are defined by RFC-1982. + + + + 4 OCTETs + +------------------------+ + | sequence-no | + +------------------------+ + RFC-1982 serial number + + + + sequence-no = 4 OCTET ; RFC-1982 serial number + + + + + + + + The bin64 type consists of eight consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-----+-------------+-------------+ + | octet-one | octet-two | ... | octet-seven | octet-eight | + +-----------+-----------+-----+-------------+-------------+ + + + + bin64 = 8 OCTET + + + + + + The int64 type is a signed integral value encoded using a 64-bit two's complement + representation in network byte order. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +------------+------------+-----+----------+----------+ + | byte-eight | byte-seven | ... | byte-two | byte-one | + +------------+------------+-----+----------+----------+ + MSB LSB + + + + int64 = byte-eight byte-seven byte-six byte-five + byte-four byte-three byte-two byte-one + byte-eight = 1 OCTET ; most significant byte (MSB) + byte-seven = 1 OCTET + byte-six = 1 OCTET + byte-five = 1 OCTET + byte-four = 1 OCTET + byte-three = 1 OCTET + byte-two = 1 OCTET + byte-one = 1 OCTET ; least significant byte (LSB) + + + + + + The uint64 type is a 64-bit unsigned integral value encoded in network byte order. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +------------+------------+-----+----------+----------+ + | byte-eight | byte-seven | ... | byte-two | byte-one | + +------------+------------+-----+----------+----------+ + MSB LSB + + + + uint64 = byte-eight byte-seven byte-six byte-five + byte-four byte-three byte-two byte-one + byte-eight = 1 OCTET ; most significant byte (MSB) + byte-seven = 1 OCTET + byte-six = 1 OCTET + byte-five = 1 OCTET + byte-four = 1 OCTET + byte-three = 1 OCTET + byte-two = 1 OCTET + byte-one = 1 OCTET ; least significant byte (LSB) + + + + + + The double type encodes a double precision 64-bit floating point number. The format and + operations are defined by the IEEE 754 standard for 64-bit double precision floating point + numbers. + + + + 8 OCTETs + +-----------------------+ + | double | + +-----------------------+ + IEEE 754 64-bit float + + + + double = 8 OCTET ; double precision IEEE 754 floating point number + + + + + + The datetime type encodes a date and time using the 64 bit POSIX time_t format. + + + + 8 OCTETs + +---------------------+ + | datetime | + +---------------------+ + posix time_t format + + + + datetime = 8 OCTET ; 64 bit posix time_t format + + + + + + + + The bin128 type consists of 16 consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-----+---------------+---------------+ + | octet-one | octet-two | ... | octet-fifteen | octet-sixteen | + +-----------+-----------+-----+---------------+---------------+ + + + + bin128 = 16 OCTET + + + + + + The uuid type encodes a universally unique id as defined by RFC-4122. The format and + operations for this type can be found in section 4.1.2 of RFC-4122. + + + + 16 OCTETs + +---------------+ + | uuid | + +---------------+ + RFC-4122 UUID + + + + uuid = 16 OCTET ; RFC-4122 section 4.1.2 + + + + + + + + The bin256 type consists of thirty two consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-----+------------------+------------------+ + | octet-one | octet-two | ... | octet-thirty-one | octet-thirty-two | + +-----------+-----------+-----+------------------+------------------+ + + + + bin256 = 32 OCTET + + + + + + + + The bin512 type consists of sixty four consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-----+-------------------+------------------+ + | octet-one | octet-two | ... | octet-sixty-three | octet-sixty-four | + +-----------+-----------+-----+-------------------+------------------+ + + + + bin512 = 64 OCTET + + + + + + + + The bin1024 type consists of one hundred and twenty eight octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-----+------------------------+------------------------+ + | octet-one | octet-two | ... | octet-one-twenty-seven | octet-one-twenty-eight | + +-----------+-----------+-----+------------------------+------------------------+ + + + + bin1024 = 128 OCTET + + + + + + + + The vbin8 type encodes up to 255 octets of opaque binary data. The number of octets is first + encoded as an 8-bit unsigned integral value. This is followed by the actual data. + + + + 1 OCTET size OCTETs + +---------+-------------+ + | size | octets | + +---------+-------------+ + uint8 + + + + vbin8 = size octets + size = uint8 + octets = 0*255 OCTET ; size OCTETs + + + + + + The str8-latin type encodes up to 255 octets of iso-8859-15 characters. The number of octets + is first encoded as an 8-bit unsigned integral value. This is followed by the actual + characters. + + + + 1 OCTET size OCTETs + +---------+------------------------+ + | size | characters | + +---------+------------------------+ + uint16 iso-8859-15 characters + + + + str8-latin = size characters + size = uint8 + characters = 0*255 OCTET ; size OCTETs + + + + + + The str8 type encodes up to 255 octets worth of UTF-8 unicode. The number of octets of unicode + is first encoded as an 8-bit unsigned integral value. This is followed by the actual UTF-8 + unicode. Note that the encoded size refers to the number of octets of unicode, not necessarily + the number of characters since the UTF-8 unicode may include multi-byte character sequences. + + + + 1 OCTET size OCTETs + +---------+--------------+ + | size | utf8-unicode | + +---------+--------------+ + uint8 + + + + str8 = size utf8-unicode + size = uint8 + utf8-unicode = 0*255 OCTET ; size OCTETs + + + + + + The str8-utf16 type encodes up to 255 octets worth of UTF-16 unicode. The number of octets of + unicode is first encoded as an 8-bit unsigned integral value. This is followed by the actual + UTF-16 unicode. Note that the encoded size refers to the number of octets of unicode, not the + number of characters since the UTF-16 unicode will include at least two octets per unicode + character. + + + + 1 OCTET size OCTETs + +---------+---------------+ + | size | utf16-unicode | + +---------+---------------+ + uint8 + + + + str8-utf16 = size utf16-unicode + size = uint8 + utf16-unicode = 0*255 OCTET ; size OCTETs + + + + + + + + The vbin16 type encodes up to 65535 octets of opaque binary data. The number of octets is + first encoded as a 16-bit unsigned integral value in network byte order. This is followed by + the actual data. + + + + 2 OCTETs size OCTETs + +----------+-------------+ + | size | octets | + +----------+-------------+ + uint16 + + + + vbin16 = size octets + size = uint16 + octets = 0*65535 OCTET ; size OCTETs + + + + + + The str16-latin type encodes up to 65535 octets of is-8859-15 characters. The number of octets + is first encoded as a 16-bit unsigned integral value in network byte order. This is followed + by the actual characters. + + + + 2 OCTETs size OCTETs + +----------+------------------------+ + | size | characters | + +----------+------------------------+ + uint16 iso-8859-15 characters + + + + str16-latin = size characters + size = uint16 + characters = 0*65535 OCTET ; size OCTETs + + + + + + The str16 type encodes up to 65535 octets worth of UTF-8 unicode. The number of octets is + first encoded as a 16-bit unsigned integral value in network byte order. This is followed by + the actual UTF-8 unicode. Note that the encoded size refers to the number of octets of + unicode, not necessarily the number of unicode characters since the UTF-8 unicode may include + multi-byte character sequences. + + + + 2 OCTETs size OCTETs + +----------+--------------+ + | size | utf8-unicode | + +----------+--------------+ + uint16 + + + + str16 = size utf8-unicode + size = uint16 + utf8-unicode = 0*65535 OCTET ; size OCTETs + + + + + + The str16-utf16 type encodes up to 65535 octets worth of UTF-16 unicode. The number of octets + is first encoded as a 16-bit unsigned integral value in network byte order. This is followed + by the actual UTF-16 unicode. Note that the encoded size refers to the number of octets of + unicode, not the number of unicode characters since the UTF-16 unicode will include at least + two octets per unicode character. + + + + 2 OCTETs size OCTETs + +----------+---------------+ + | size | utf16-unicode | + +----------+---------------+ + uint16 + + + + str16-utf16 = size utf16-unicode + size = uint16 + utf16-unicode = 0*65535 OCTET ; size OCTETs + + + + + + The byte-ranges type encodes up to 65535 octets worth of non-overlapping, non-touching, + ascending byte ranges within a 64-bit sequence of bytes. Each range is represented as an + inclusive lower and upper bound that identifies all the byte offsets included within a given + range. + + + + The number of octets of data is first encoded as a 16-bit unsigned integral value in network + byte order. This is then followed by the encoded representation of the ranges included in the + set. These MUST be encoded in ascending order, and any two ranges included in a given set MUST + NOT include overlapping or touching byte offsets. + + + + Each range is encoded as a pair of 64-bit unsigned integral values in network byte order + respectively representing the lower and upper bounds for that range. Note that because each + range is exactly 16 octets, the size in octets of the encoded ranges will always be 16 times + the number of ranges in the set. + + + + +----= size OCTETs =----+ + | | + 2 OCTETs | 16 OCTETs | + +----------+-----+-----------+-----+ + | size | .../| range |\... | + +----------+---/ +-----------+ \---+ + uint16 / / \ \ + / / \ \ + / 8 OCTETs 8 OCTETs \ + +-----------+-----------+ + | lower | upper | + +-----------+-----------+ + uint64 uint64 + + + + byte-ranges = size *range + size = uint16 + range = lower upper + lower = uint64 + upper = uint64 + + + + + + The sequence-set type is a set of pairs of RFC-1982 numbers representing a discontinuous range + within an RFC-1982 sequence. Each pair represents a closed interval within the list. + + + + Sequence-sets can be represented as lists of pairs of positive 32-bit numbers, each pair + representing a closed interval that does not overlap or touch with any other interval in the + list. For example, a set containing words 0, 1, 2, 5, 6, and 15 can be represented: + + + + [(0, 2), (5, 6), (15, 15)] + + + + 1) The list-of-pairs representation is sorted ascending (as defined by RFC 1982 + (http://www.ietf.org/rfc/rfc1982.txt) ) by the first elements of each pair. + + + + 2) The list-of-pairs is flattened into a list-of-words. + + + + 3) Each word in the list is packed into ascending locations in memory with network byte + ordering. + + + + 4) The size in bytes, represented as a 16-bit network-byte-order unsigned value, is prepended. + + + + For instance, the example from above would be encoded: + + + + [(0, 2), (5, 6), (15, 15)] -- already sorted. + [0, 2, 5, 6, 15, 15] -- flattened. + 000000000000000200000005000000060000000F0000000F -- bytes in hex + 0018000000000000000200000005000000060000000F0000000F -- bytes in hex, + length (24) prepended + + + + +----= size OCTETs =----+ + | | + 2 OCTETs | 8 OCTETs | + +----------+-----+-----------+-----+ + | size | .../| range |\... | + +----------+---/ +-----------+ \---+ + uint16 / / \ \ + / / \ \ + / / \ \ + / / \ \ + / 4 OCTETs 4 OCTETs \ + +-------------+-------------+ + | lower | upper | + +-------------+-------------+ + sequence-no sequence-no + + + + sequence-set = size *range + size = uint16 ; length of variable portion in bytes + + range = lower upper ; inclusive + lower = sequence-no + upper = sequence-no + + + + + + + + The vbin32 type encodes up to 4294967295 octets of opaque binary data. The number of octets is + first encoded as a 32-bit unsigned integral value in network byte order. This is followed by + the actual data. + + + + 4 OCTETs size OCTETs + +----------+-------------+ + | size | octets | + +----------+-------------+ + uint32 + + + + vbin32 = size octets + size = uint32 + octets = 0*4294967295 OCTET ; size OCTETs + + + + + + A map is a set of distinct keys where each key has an associated (type,value) pair. The triple + of the key, type, and value, form an entry within a map. Each entry within a given map MUST + have a distinct key. A map is encoded as a size in octets, a count of the number of entries, + followed by the encoded entries themselves. + + + + An encoded map may contain up to (4294967295 - 4) octets worth of encoded entries. The size is + encoded as a 32-bit unsigned integral value in network byte order equal to the number of + octets worth of encoded entries plus 4. (The extra 4 octets is added for the entry count.) The + size is then followed by the number of entries encoded as a 32-bit unsigned integral value in + network byte order. Finally the entries are encoded sequentially. + + + + An entry is encoded as the key, followed by the type, and then the value. The key is always a + string encoded as a str8. The type is a single octet that may contain any valid AMQP type + code. The value is encoded according to the rules defined by the type code for that entry. + + + + +------------= size OCTETs =-----------+ + | | + 4 OCTETs | 4 OCTETs | + +----------+----------+-----+---------------+-----+ + | size | count | .../| entry |\... | + +----------+----------+---/ +---------------+ \---+ + uint32 uint32 / / \ \ + / / \ \ + / / \ \ + / / \ \ + / / \ \ + / k OCTETs 1 OCTET n OCTETs \ + +-----------+---------+-----------+ + | key | type | value | + +-----------+---------+-----------+ + str8 *type* + + + + map = size count *entry + + size = uint32 ; size of count and entries in octets + count = uint32 ; number of entries in the map + + entry = key type value + key = str8 + type = OCTET ; type code of the value + value = *OCTET ; the encoded value + + + + + + A list is an ordered sequence of (type, value) pairs. The (type, value) pair forms an item + within the list. The list may contain items of many distinct types. A list is encoded as a + size in octets, followed by a count of the number of items, followed by the items themselves + encoded in their defined order. + + + + An encoded list may contain up to (4294967295 - 4) octets worth of encoded items. The size is + encoded as a 32-bit unsigned integral value in network byte order equal to the number of + octets worth of encoded items plus 4. (The extra 4 octets is added for the item count.) The + size is then followed by the number of items encoded as a 32-bit unsigned integral value in + network byte order. Finally the items are encoded sequentially in their defined order. + + + + An item is encoded as the type followed by the value. The type is a single octet that may + contain any valid AMQP type code. The value is encoded according to the rules defined by the + type code for that item. + + + + +---------= size OCTETs =---------+ + | | + 4 OCTETs | 4 OCTETs | + +----------+----------+-----+----------+-----+ + | size | count | .../| item |\... | + +----------+----------+---/ +----------+ \---+ + uint32 uint32 / / \ \ + / / \ \ + / 1 OCTET n OCTETs \ + +----------+-----------+ + | type | value | + +----------+-----------+ + *type* + + + + list = size count *item + + size = uint32 ; size of count and items in octets + count = uint32 ; number of items in the list + + item = type value + type = OCTET ; type code of the value + value = *OCTET ; the encoded value + + + + + + An array is an ordered sequence of values of the same type. The array is encoded in as a size + in octets, followed by a type code, then a count of the number values in the array, and + finally the values encoded in their defined order. + + + + An encoded array may contain up to (4294967295 - 5) octets worth of encoded values. The size + is encoded as a 32-bit unsigned integral value in network byte order equal to the number of + octets worth of encoded values plus 5. (The extra 5 octets consist of 4 octets for the count + of the number of values, and one octet to hold the type code for the items in the array.) The + size is then followed by a single octet that may contain any valid AMQP type code. The type + code is then followed by the number of values encoded as a 32-bit unsigned integral value in + network byte order. Finally the values are encoded sequentially in their defined order + according to the rules defined by the type code for the array. + + + + 4 OCTETs 1 OCTET 4 OCTETs (size - 5) OCTETs + +----------+---------+----------+-------------------------+ + | size | type | count | values | + +----------+---------+----------+-------------------------+ + uint32 uint32 *count* encoded *types* + + + + array = size type count values + + size = uint32 ; size of type, count, and values in octets + type = OCTET ; the type of the encoded values + count = uint32 ; number of items in the array + + values = 0*4294967290 OCTET ; (size - 5) OCTETs + + + + + + The struct32 type describes any coded struct with a 32-bit (4 octet) size. The type is + restricted to be only coded structs with a 32-bit size, consequently the first six octets of + any encoded value for this type MUST always contain the size, class-code, and struct-code in + that order. + + + + The size is encoded as a 32-bit unsigned integral value in network byte order that is equal to + the size of the encoded field-data, packing-flags, class-code, and struct-code. The class-code + is a single octet that may be set to any valid class code. The struct-code is a single octet + that may be set to any valid struct code within the given class-code. + + + + The first six octets are then followed by the packing flags and encoded field data. The + presence and quantity of packing-flags, as well as the specific fields are determined by the + struct definition identified with the encoded class-code and struct-code. + + + + 4 OCTETs 1 OCTET 1 OCTET pack-width OCTETs n OCTETs + +----------+------------+-------------+-------------------+------------+ + | size | class-code | struct-code | packing-flags | field-data | + +----------+------------+-------------+-------------------+------------+ + uint32 + + n = (size - 2 - pack-width) + + + + struct32 = size class-code struct-code packing-flags field-data + + size = uint32 + + class-code = OCTET ; zero for top-level structs + struct-code = OCTET ; together with class-code identifies the struct + ; definition which determines the pack-width and + ; fields + + packing-flags = 0*4 OCTET ; pack-width OCTETs + + field-data = *OCTET ; (size - 2 - pack-width) OCTETs + + + + + + + + + + The bin40 type consists of five consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-------------+------------+------------+ + | octet-one | octet-two | octet-three | octet-four | octet-five | + +-----------+-----------+-------------+------------+------------+ + + + + bin40 = 5 OCTET + + + + + + The dec32 type is decimal value with a variable number of digits following the decimal point. + It is encoded as an 8-bit unsigned integral value representing the number of decimal places. + This is followed by the signed integral value encoded using a 32-bit two's complement + representation in network byte order. + + + + The former value is referred to as the exponent of the divisor. The latter value is the + mantissa. The decimal value is given by: mantissa / 10^exponent. + + + + 1 OCTET 4 OCTETs + +----------+----------+ + | exponent | mantissa | + +----------+----------+ + uint8 int32 + + + + dec32 = exponent mantissa + exponent = uint8 + mantissa = int32 + + + + + + + + The bin72 type consists of nine consecutive octets of opaque binary data. + + + + 1 OCTET 1 OCTET 1 OCTET 1 OCTET + +-----------+-----------+-----+-------------+------------+ + | octet-one | octet-two | ... | octet-eight | octet-nine | + +-----------+-----------+-----+-------------+------------+ + + + + bin64 = 9 OCTET + + + + + + The dec64 type is decimal value with a variable number of digits following the decimal point. + It is encoded as an 8-bit unsigned integral value representing the number of decimal places. + This is followed by the signed integral value encoded using a 64-bit two's complement + representation in network byte order. + + + + The former value is referred to as the exponent of the divisor. The latter value is the + mantissa. The decimal value is given by: mantissa / 10^exponent. + + + + 1 OCTET 8 OCTETs + +----------+----------+ + | exponent | mantissa | + +----------+----------+ + uint8 int64 + + + + dec64 = exponent mantissa + exponent = uint8 + mantissa = int64 + + + + + + + + + + The void type is used within tagged data structures such as maps and lists to indicate an + empty value. The void type has no value and is encoded as an empty sequence of octets. + + + + + + The bit type is used to indicate that a packing flag within a packed struct is being used to + represent a boolean value based on the presence of an empty value. The bit type has no value + and is encoded as an empty sequence of octets. + + + + + + + + + + During the initial connection negotiation, the two peers must agree upon a maximum frame size. + This constant defines the minimum value to which the maximum frame size can be set. By + defining this value, the peers can guarantee that they can send frames of up to this size + until they have agreed a definitive maximum frame size for that connection. + + + + + + + + + + Segments are defined in . + The segment domain defines the valid values that may be used for the segment indicator within + the frame header. + + + + + + The frame type indicator for Control segments (see ). + + + + + The frame type indicator for Command segments (see ). + + + + + The frame type indicator for Header segments (see ). + + + + + The frame type indicator for Body segments (see ). + + + + + + + + + Tracks are defined in . The + track domain defines the valid values that may used for the track indicator within the frame + header + + + + The track used for all controls. All controls defined in this specification MUST be sent + on track 0. + + + + + The track used for all commands. All commands defined in this specification MUST be sent + on track 1. + + + + + + + + + An array of values of type str16. + + + + + + + + + + The connection class provides controls for a client to establish a network connection to a + server, and for both peers to operate the connection thereafter. + + + + connection = open-connection + *use-connection + close-connection + open-connection = C:protocol-header + S:START C:START-OK + *challenge + S:TUNE C:TUNE-OK + C:OPEN S:OPEN-OK | S:REDIRECT + challenge = S:SECURE C:SECURE-OK + use-connection = *channel + close-connection = C:CLOSE S:CLOSE-OK + / S:CLOSE C:CLOSE-OK + + + + + + + + + + The connection closed normally. + + + + + + An operator intervened to close the connection for some reason. The client may retry at + some later date. + + + + + + The client tried to work with an unknown virtual host. + + + + + + A valid frame header cannot be formed from the incoming byte stream. + + + + + + + + The amqp-url domain defines a format for identifying an AMQP Server. It is used to provide + alternate hosts in the case where a client has to reconnect because of failure, or because + the server requests the client to do so upon initial connection. + + + port = number]]> + + + + + + Used to provide a list of alternate hosts. + + + + + + + + This control starts the connection negotiation process by telling the client the supported + security mechanisms and locales from which the client can choose. + + + + + If the server cannot support the protocol specified in the protocol header, it MUST close + the socket connection without sending any response control. + + + The client sends a protocol header containing an invalid protocol name. The server must + respond by closing the connection. + + + + + + If the client cannot handle the protocol version suggested by the server it MUST close the + socket connection. + + + The server sends a protocol version that is lower than any valid implementation, e.g. 0.1. + The client must respond by closing the connection. + + + + + + + + + + + The properties SHOULD contain at least these fields: "host", specifying the server host + name or address, "product", giving the name of the server product, "version", giving the + name of the server version, "platform", giving the name of the operating system, + "copyright", if appropriate, and "information", giving other general information. + + + Client connects to server and inspects the server properties. It checks for the presence + of the required fields. + + + + + + + A list of the security mechanisms that the server supports. + + + + + + A list of the message locales that the server supports. The locale defines the language in + which the server will send reply texts. + + + + + The server MUST support at least the en_US locale. + + + Client connects to server and inspects the locales field. It checks for the presence of + the required locale(s). + + + + + + + + + + This control selects a SASL security mechanism. + + + + + + + + + The properties SHOULD contain at least these fields: "product", giving the name of the + client product, "version", giving the name of the client version, "platform", giving the + name of the operating system, "copyright", if appropriate, and "information", giving + other general information. + + + + + + + A single security mechanisms selected by the client, which must be one of those specified + by the server. + + + + + The client SHOULD authenticate using the highest-level security profile it can handle + from the list provided by the server. + + + + + + If the mechanism field does not contain one of the security mechanisms proposed by the + server in the Start control, the server MUST close the connection without sending any + further data. + + + Client connects to server and sends an invalid security mechanism. The server must + respond by closing the connection (a socket close, with no connection close + negotiation). + + + + + + + A block of opaque data passed to the security mechanism. The contents of this data are + defined by the SASL security mechanism. + + + + + + A single message locale selected by the client, which must be one of those specified by + the server. + + + + + + + + + The SASL protocol works by exchanging challenges and responses until both peers have + received sufficient information to authenticate each other. This control challenges the + client to provide more information. + + + + + + + + + Challenge information, a block of opaque binary data passed to the security mechanism. + + + + + + + + + This control attempts to authenticate, passing a block of SASL data for the security + mechanism at the server side. + + + + + + + A block of opaque data passed to the security mechanism. The contents of this data are + defined by the SASL security mechanism. + + + + + + + + + This control proposes a set of connection configuration values to the client. The client can + accept and/or adjust these. + + + + + + + + + The maximum total number of channels that the server allows per connection. If this is not + set it means that the server does not impose a fixed limit, but the number of allowed + channels may be limited by available server resources. + + + + + + The largest frame size that the server proposes for the connection. The client can + negotiate a lower value. If this is not set means that the server does not impose any + specific limit but may reject very large frames if it cannot allocate resources for them. + + + + + Until the max-frame-size has been negotiated, both peers MUST accept frames of up to + MIN-MAX-FRAME-SIZE octets large, and the minimum negotiated value for max-frame-size is + also MIN-MAX-FRAME-SIZE. + + + Client connects to server and sends a large properties field, creating a frame of + MIN-MAX-FRAME-SIZE octets. The server must accept this frame. + + + + + + + The minimum delay, in seconds, of the connection heartbeat supported by the server. If + this is not set it means the server does not support sending heartbeats. + + + + + + The maximum delay, in seconds, of the connection heartbeat supported by the server. If + this is not set it means the server has no maximum. + + + + + The heartbeat-max value must be greater than or equal to the value supplied in the + heartbeat-min field. + + + + + + If no heartbeat-min is supplied, then the heartbeat-max field MUST remain empty. + + + + + + + + + + This control sends the client's connection tuning parameters to the server. Certain fields + are negotiated, others provide capability information. + + + + + + + The maximum total number of channels that the client will use per connection. + + + + + If the client specifies a channel max that is higher than the value provided by the + server, the server MUST close the connection without attempting a negotiated close. The + server may report the error in some fashion to assist implementers. + + + + + + + If the client agrees to a channel-max of N channels, then the channels available for + communication between client and server are precisely the channels numbered 0 to (N-1). + + + + + + + The largest frame size that the client and server will use for the connection. If it is + not set means that the client does not impose any specific limit but may reject very large + frames if it cannot allocate resources for them. Note that the max-frame-size limit + applies principally to content frames, where large contents can be broken into frames of + arbitrary size. + + + + + Until the max-frame-size has been negotiated, both peers MUST accept frames of up to + MIN-MAX-FRAME-SIZE octets large, and the minimum negotiated value for max-frame-size is + also MIN-MAX-FRAME-SIZE. + + + + + + If the client specifies a max-frame-size that is higher than the value provided by the + server, the server MUST close the connection without attempting a negotiated close. The + server may report the error in some fashion to assist implementers. + + + + + + A peer MUST NOT send frames larger than the agreed-upon size. A peer that receives an + oversized frame MUST close the connection with the framing-error close-code. + + + + + + + The delay, in seconds, of the connection heartbeat chosen by the client. If it is not set + it means the client does not want a heartbeat. + + + + + The chosen heartbeat MUST be in the range supplied by the heartbeat-min and + heartbeat-max fields of connection.tune. + + + + + + The heartbeat field MUST NOT be set if the heartbeat-min field of connection.tune was + not set by the server. + + + + + + + + + + This control opens a connection to a virtual host, which is a collection of resources, and + acts to separate multiple application domains within a server. The server may apply + arbitrary limits per virtual host, such as the number of each type of entity that may be + used, per connection and/or in total. + + + + + + + + + + The name of the virtual host to work with. + + + + + If the server supports multiple virtual hosts, it MUST enforce a full separation of + exchanges, queues, and all associated entities per virtual host. An application, + connected to a specific virtual host, MUST NOT be able to access resources of another + virtual host. + + + + + + The server SHOULD verify that the client has permission to access the specified virtual + host. + + + + + + + The client can specify zero or more capability names. The server can use this to determine + how to process the client's connection request. + + + + + + In a configuration with multiple collaborating servers, the server may respond to a + connection.open control with a Connection.Redirect. The insist option tells the server + that the client is insisting on a connection to the specified server. + + + + When the client uses the insist option, the server MUST NOT respond with a + Connection.Redirect control. If it cannot accept the client's connection request it + should respond by closing the connection with a suitable reply code. + + + + + + + + + + This control signals to the client that the connection is ready for use. + + + + + + + Specifies an array of equivalent or alternative hosts that the server knows about, which + will normally include the current server itself. Each entry in the array will be in the + form of an IP address or DNS name, optionally followed by a colon and a port number. + Clients can cache this information and use it when reconnecting to a server after a + failure. This field may be empty. + + + + + + + + + This control redirects the client to another server, based on the requested virtual host + and/or capabilities. + + + + + When getting the connection.redirect control, the client SHOULD reconnect to the host + specified, and if that host is not present, to any of the hosts specified in the + known-hosts list. + + + + + + + + Specifies the server to connect to. + + + + + + An array of equivalent or alternative hosts that the server knows about. + + + + + + + + + The heartbeat control may be used to generate artificial network traffic when a connection + is idle. If a connection is idle for more than twice the negotiated heartbeat delay, the + peers MAY be considered disconnected. + + + + + + + + + + This control indicates that the sender wants to close the connection. The reason for close + is indicated with the reply-code and reply-text. The channel this control is sent on MAY be + used to indicate which channel caused the connection to close. + + + + + + + + + + Indicates the reason for connection closure. + + + + + This text can be logged as an aid to resolving issues. + + + + + + + + + This control confirms a connection.close control and tells the recipient that it is safe to + release resources for the connection and close the socket. + + + + + A peer that detects a socket closure without having received a Close-Ok handshake control + SHOULD log the error. + + + + + + + + + + + + + + A session is a named interaction between two peers. Session names are chosen by the upper + layers and may be used indefinitely. The model layer may associate long-lived or durable state + with a given session name. The session layer provides transport of commands associated with + this interaction. + + + + The controls defined within this class are specified in terms of the "sender" of commands and + the "receiver" of commands. Since both client and server send and receive commands, the + overall session dialog is symmetric, however the semantics of the session controls are defined + in terms of a single sender/receiver pair, and it is assumed that the client and server will + each contain both a sender and receiver implementation. + + + + + The transport MUST be attached in order to use any control other than "attach", "attached", + "detach", or "detached". A peer receiving any other control on a detached transport MUST + discard it and send a session.detached with the "not-attached" reason code. + + + + + + + + + The sender of commands. + + + + + The receiver of commands. + + + + + + The session name uniquely identifies an interaction between two peers. It is scoped to a + given authentication principal. + + + + + + + + The session was detached by request. + + + + + The session is currently attached to another transport. + + + + + The transport is currently attached to another session. + + + + + The transport is not currently attached to any session. + + + + + Command data was received prior to any use of the command-point control. + + + + + + + + + + + The session header appears on commands after the class and command id, but prior to command + arguments. + + + + + Request notification of completion for this command. + + + + + + + + + + + + + + + + + + + Requests that the current transport be attached to the named session. Success or failure + will be indicated with an attached or detached response. This control is idempotent. + + + + + A session MUST NOT be attached to more than one transport at a time. + + + + + + A transport MUST NOT be attached to more than one session at a time. + + + + + + Attaching a session to its current transport MUST succeed and result in an attached + response. + + + + + + Attachment to the same session name from distinct authentication principals MUST succeed. + + + + + + + + + + + + Identifies the session to be attached to the current transport. + + + + + + If set then a busy session will be forcibly detached from its other transport and + reattached to the current transport. + + + + + + + Confirms successful attachment of the transport to the named session. + + + + + + + + Identifies the session now attached to the current transport. + + + + + + + Detaches the current transport from the named session. + + + + + + + + + + Identifies the session to detach. + + + + + + + Confirms detachment of the current transport from the named session. + + + + + + + + Identifies the detached session. + + + + + Identifies the reason for detaching from the named session. + + + + + + + + + This control may be sent by either the sender or receiver of commands. It requests that the + execution timeout be changed. This is the minimum amount of time that a peer must preserve + execution state for a detached session. + + + + + The handler of this request MUST set his timeout to the maximum allowed value less than or + equal to the requested timeout, and MUST convey the chosen timeout in the response. + + + + + + + + + + + The requested timeout for execution state in seconds. If not set, this control requests + that execution state is preserved indefinitely. + + + + + + + This control may be sent by the either the sender or receiver of commands. It is a + one-to-one reply to the request-timeout control that indicates the granted timeout for + execution state. + + + + + + + + The timeout for execution state. If not set, then execution state is preserved + indefinitely. + + + + + + + This control is sent by the sender of commands and handled by the receiver of commands. This + establishes the sequence numbers associated with all subsequent command data sent from the + sender to the receiver. The subsequent command data will be numbered starting with the + values supplied in this control and proceeding sequentially. This must be used at least once + prior to sending any command data on newly attached transports. + + + + + If command data is sent on a newly attached transport the session MUST be detached with an + "unknown-id" reason-code. + + + + + + If the offset is zero, the next data frame MUST have the first-frame and first-segment + flags set. Violation of this is a framing error. + + + + + + If the offset is nonzero, the next data frame MUST NOT have both the first-frame and + first-segment flag set. Violation of this is a framing error. + + + + + + + + + + + + This control is sent by the receiver of commands and handled by the sender of commands. It + informs the sender of what commands and command fragments are expected at the receiver. + This control is only sent in response to a flush control with the expected flag set. The + expected control is never sent spontaneously. + + + + + The set of expected commands MUST include the next command after the highest seen command. + + + + + + The set of expected commands MUST have zero elements if and only if the sender holds no + execution state for the session (i.e. it is a new session). + + + + + + If a command-id appears in the commands field, it MUST NOT appear in the fragments field. + + + + + + When choice is permitted, a command MUST appear in the commands field rather than the + fragments field. + + + + + + + + + + + + This control is sent by the receiver of commands and handled by the sender of commands. This + sends the set of commands that will definitely be completed by this peer to the sender. This + excludes commands known by the receiver to be considered confirmed or complete at the + sender. + + + This control must be sent if the partner requests the set of confirmed commands using the + session.flush control with the confirmed flag set. + + + This control may be sent spontaneously. One reason for separating confirmation from + completion is for large persistent messages, where the receipt (and storage to a durable + store) of part of the message will result in less data needing to be replayed in the case of + transport failure during transmission. + + + A simple implementation of an AMQP client or server may be implemented to take no action on + receipt of session.confirmed controls, and take action only when receiving + session.completed controls. + + + A simple implementation of an AMQP client or server may be implemented such that it never + spontaneously sends session.confirmed and that when requested for the set of confirmed + commands (via the session.flush control) it responds with the same set of commands as it + would to when the set of completed commands was requested (trivially all completed commands + are confirmed). + + + + + If a command has durable implications, it MUST NOT be confirmed until the fact of the + command has been recorded on durable media. + + + + + + If a command-id appears in the commands field, it MUST NOT appear in the fragments field. + + + + + + When choice is permitted, a command MUST appear in the commands field rather than the + fragments field. + + + + + + + + + Command-ids included in prior known-complete replies MUST be excluded from the set of + all confirmed commands. + + + + + + + + + This control is sent by the receiver of commands, and handled by the sender of commands. It + informs the sender of all commands completed by the receiver. This excludes commands known + by the receiver to be considered complete at the sender. + + + + + The sender MUST eventually reply with a known-completed set that covers the completed ids. + + + + + + The known-complete reply MAY be delayed at the senders discretion if the timely-reply + field is not set. + + + + + + Multiple replies may be merged by sending a single known-completed that includes the union + of the merged command-id sets. + + + + + + + + The ids of all completed commands. This excludes commands known by the receiver to be + considered complete at the sender. + + + + + The sender MUST consider any completed commands to also be confirmed. + + + + + + Command-ids included in prior known-complete replies MUST be excluded from the set of + all completed commands. + + + + + + If set, the sender is no longer free to delay the known-completed reply. + + + + + + + This control is sent by the sender of commands, and handled by the receiver of commands. It + is sent in reply to one or more completed controls from the receiver. It informs the + receiver that commands are known to be completed by the sender. + + + + + The sender need not keep state to generate this reply. It is sufficient to reply to any + completed control with an exact echo of the completed ids. + + + + + + + + The set of completed commands for one or more session.completed controls. + + + + + The receiver MUST treat any of the specified commands to be considered by the sender as + confirmed as well as completed. + + + + + + + + This control is sent by the sender of commands and handled by the receiver of commands. It + requests that the receiver produce the indicated command sets. The receiver should issue the + indicated sets at the earliest possible opportunity. + + + + + + + + + + + + This control is sent by the sender of commands and handled by the receiver of commands. It + sends command ranges for which there will be no further data forthcoming. The receiver + should proceed with the next available commands that arrive after the gap. + + + + + The command-ids covered by a session.gap MUST be added to the completed and confirmed sets + by the receiver. + + + + + + If a session.gap covers a partially received command, the receiving peer MUST treat the + command as aborted. + + + + + + If a session.gap covers a completed or confirmed command, the receiving peer MUST continue + to treat the command as completed or confirmed. + + + + + + + + The set of command-ids that are contained in this gap. + + + + + + + + + + + The execution class provides commands that carry execution information about other model level + commands. + + + + + + + + + + The client attempted to work with a server entity to which it has no access due to + security settings. + + + + + + The client attempted to work with a server entity that does not exist. + + + + + + The client attempted to work with a server entity to which it has no access because + another client is working with it. + + + + + + The client requested a command that was not allowed because some precondition failed. + + + + + + A server entity the client is working with has been deleted. + + + + + + The peer sent a command that is not permitted in the current state of the session. + + + + + + The command segments could not be decoded. + + + + + + The client exceeded its resource allocation. + + + + + + The peer tried to use a command a manner that is inconsistent with the rules described + in the specification. + + + + + + The command argument is malformed, i.e. it does not fall within the specified domain. + The illegal-argument exception can be raised on execution of any command which has + domain valued fields. + + + + + + The peer tried to use functionality that is not implemented in its partner. + + + + + + The peer could not complete the command because of an internal error. The peer may + require intervention by an operator in order to resume normal operations. + + + + + + An invalid argument was passed to a command, and the operation could not + proceed. An invalid argument is not illegal (see illegal-argument), i.e. it matches + the domain definition; however the particular value is invalid in this context. + + + + + + + + + + This command is complete when all prior commands are completed. + + + + + + + + + + + This command carries data resulting from the execution of a command. + + + + + + + + + + + + + + This command informs a peer of an execution exception. The command-id, when given, + correlates the error to a specific command. + + + + + + + + + The command-id of the command which caused the exception. If the exception was not caused + by a specific command, this value is not set. + + + + + + + The zero based index of the exceptional field within the arguments to the exceptional + command. If the exception was not caused by a specific field, this value is not set. + + + + + The description provided is implementation defined, but MUST be in the language + appropriate for the selected locale. The intention is that this description is suitable + for logging or alerting output. + + + + + + + + + + + + + The message class provides commands that support an industry-standard messaging model. + + + + START: + + The message has yet to be sent to the recipient. + + NOT-ACQUIRED: + + The message has been sent to the recipient, but is not + acquired by the recipient. + + ACQUIRED: + + The message has been sent to and acquired by the recipient. + + END: + + The transfer is complete. + + + END]]> + | /|\ + | | + +-------------------------------+ + + + + message = *:TRANSFER [ R:ACQUIRE ] [ R:ACCEPT / R:REJECT / R:RELEASE ] + / *:RESUME + / *:SET-FLOW-MODE + / *:FLOW + / *:STOP + / C:SUBSCRIBE + / C:CANCEL + / C:FLUSH + + + + + The server SHOULD respect the delivery-mode property of messages and SHOULD make a + best-effort to hold persistent messages on a reliable storage mechanism. + + + Send a persistent message to queue, stop server, restart server and then verify whether + message is still present. Assumes that queues are durable. Persistence without durable + queues makes no sense. + + + + + + The server MUST NOT discard a persistent message in case of a queue overflow. + + + Create a queue overflow situation with persistent messages and verify that messages do not + get lost (presumably the server will write them to disk). + + + + + + The server MAY use the message.flow command to slow or stop a message publisher when + necessary. + + + + + + The server MAY overflow non-persistent messages to persistent storage. + + + + + + The server MAY discard or dead-letter non-persistent messages on a priority basis if the + queue size exceeds some configured limit. + + + + + + The server MUST implement at least 2 priority levels for messages, where priorities 0 and + 9 are treated as two distinct levels. + + + + + + The server SHOULD implement distinct priority levels in the following manner: + + + If the server implements n distinct priorities then priorities 0 to 5 - ceiling(n/2) should + be treated equivalently and should be the lowest effective priority. The priorities 4 + + floor(n/2) should be treated equivalently and should be the highest effective priority. The + priorities (5 - ceiling(n/2)) to (4 + floor(n/2)) inclusive must be treated as distinct + priorities. + + + Thus, for example, if 2 distinct priorities are implemented, then levels 0 to 4 are + equivalent, and levels 5 to 9 are equivalent and levels 4 and 5 are distinct. If 3 distinct + priorities are implements the 0 to 3 are equivalent, 5 to 9 are equivalent and 3, 4 and 5 + are distinct. + + + This scheme ensures that if two priorities are distinct for a server which implements m + separate priority levels they are also distinct for a server which implements n different + priority levels where n > m. + + + + + + The server MUST deliver messages of the same priority in order irrespective of their + individual persistence. + + + Send a set of messages with the same priority but different persistence settings to a queue. + Subscribe and verify that messages arrive in same order as originally published. + + + + + + + + + Specifies the destination to which the message is to be transferred. + + + + + + Controls how the sender of messages is notified of successful transfer. + + + + + + Successful transfer is signaled by message.accept. An acquired message (whether + acquisition was implicit as in pre-acquired mode or explicit as in not-acquired mode) is + not considered transferred until a message.accept that includes the transfer command is + received. + + + + + + Successful transfer is assumed when accept-mode is "pre-acquired". Messages transferred + with an accept-mode of "not-acquired" cannot be acquired when accept-mode is "none". + + + + + + + + Indicates whether a transferred message can be considered as automatically acquired or + whether an explicit request is necessary in order to acquire it. + + + + + + the message is acquired when the transfer starts + + + + + + the message is not acquired when it arrives, and must be explicitly acquired by the + recipient + + + + + + + + Code specifying the reason for a message reject. + + + + + Rejected for an unspecified reason. + + + + + Delivery was attempted but there were no queues which the message could be routed to. + + + + + The rejected message had the immediate flag set to true, but at the time of the transfer + at least one of the queues to which it was to be routed did not have any subscriber able + to take the message. + + + + + + + + A resume-id serves to identify partially transferred message content. The id is chosen by + the sender, and must be unique to a given user. A resume-id is not expected to be unique + across users. + + + + + + + Used to set the reliability requirements for a message which is transferred to the server. + + + + + A non-persistent message may be lost in event of a failure, but the nature of the + communication is such that an occasional message loss is tolerable. This is the lowest + overhead mode. Non-persistent messages are delivered at most once only. + + + + + + A persistent message is one which must be stored on a persistent medium (usually hard + drive) at every stage of delivery so that it will not be lost in event of failure (other + than of the medium itself). This is normally accomplished with some additional overhead. + A persistent message may be delivered more than once if there is uncertainty about the + state of its delivery after a failure and recovery. + + + + + + + + Used to assign a priority to a message transfer. Priorities range from 0 (lowest) to 9 + (highest). + + + + + Lowest possible priority message. + + + + + + Very low priority message + + + + + + Low priority message. + + + + + + Below average priority message. + + + + + + Medium priority message. + + + + + + + Above average priority message + + + + + + + High priority message + + + + + + Higher priority message + + + + + + Very high priority message. + + + + + + Highest possible priority message. + + + + + + + + + If set on a message that is not routable the broker can discard it. If not set, an + unroutable message should be handled by reject when accept-mode is explicit; or by routing + to the alternate-exchange if defined when accept-mode is none. + + + + + + If the immediate flag is set to true on a message transferred to a Server, then the + message should be considered unroutable (and not delivered to any queues) if, for any + queue that it is to be routed to according to the standard routing behavior, there is not + a subscription on that queue able to receive the message. The treatment of unroutable + messages is dependent on the value of the discard-unroutable flag. + + + The immediate flag is ignored on transferred to a Client. + + + + + + This boolean flag indicates that the message may have been previously delivered to this + or another client. + + + If the redelivered flag is set on transfer to a Server, then any delivery of the message + from that Server to a Client must also have the redelivered flag set to true. + + + + The server MUST try to signal redelivered messages when it can. When redelivering a + message that was not successfully accepted, the server SHOULD deliver it to the original + client if possible. + + + Create a shared queue and publish a message to the queue. Subscribe using explicit + accept-mode, but do not accept the message. Close the session, reconnect, and subscribe + to the queue again. The message MUST arrive with the redelivered flag set. + + + + + The client should not rely on the redelivered field to detect duplicate messages where + publishers may themselves produce duplicates. A fully robust client should be able to + track duplicate received messages on non-transacted, and locally-transacted sessions. + + + + + + Message priority, which can be between 0 and 9. Messages with higher priorities may be + delivered before those with lower priorities. + + + + The delivery mode may be non-persistent or persistent. + + + + Duration in milliseconds for which the message should be considered "live". If this is + set then a message expiration time will be computed based on the current time plus this + value. Messages that live longer than their expiration time will be discarded (or dead + lettered). + + + If a message is transferred between brokers before delivery to a final subscriber the + ttl should be decremented before peer to peer transfer and both timestamp and expiration + should be cleared. + + + + + + + The timestamp is set by the broker on arrival of the message. + + + + + + The expiration header assigned by the broker. After receiving the message the broker sets + expiration to the sum of the ttl specified in the publish command and the current time. + (ttl=expiration - timestamp) + + + + + + Identifies the exchange specified in the destination field of the message.transfer used to + publish the message. This MUST be set by the broker upon receipt of a message. + + + + + + The value of the key determines to which queue the exchange will send the message. The way + in which keys are used to make this routing decision depends on the type of exchange to + which the message is sent. For example, a direct exchange will route a message to a queue + if that queue is bound to the exchange with a binding-key identical to the routing-key of + the message. + + + + + + When a resume-id is provided the recipient MAY use it to retain message data should the + session expire while the message transfer is still incomplete. + + + + + + When a resume-ttl is provided the recipient MAY use it has a guideline for how long to + retain the partially complete data when a resume-id is specified. If no resume-id is + specified then this value should be ignored. + + + + + + + These properties permit the transfer of message fragments. These may be used in conjunction + with byte level flow control to limit the rate at which large messages are received. Only + the first fragment carries the delivery-properties and message-properties. + + Syntactically each fragment appears as a complete message to the lower layers of the + protocol, however the model layer is required to treat all the fragments as a single + message. For example all fragments must be delivered to the same client. In pre-acquired + mode, no message fragments can be delivered by the broker until the entire message has been + received. + + + + True if this fragment contains the start of the message, false otherwise. + + + + True if this fragment contains the end of the message, false otherwise. + + + + This field may optionally contain the size of the fragment. + + + + + The reply-to domain provides a simple address structure for replying to to a message to a + destination within the same virtual-host. + + + + + + + + The length of the body segment in bytes. + + + + + + Message-id is an optional property of UUID type which uniquely identifies a message within + the message system. The message producer is usually responsible for setting the + message-id. The server MAY discard a message as a duplicate if the value of the message-id + matches that of a previously received message. Duplicate messages MUST still be accepted + if transferred with an accept-mode of "explicit". + + + + + A message-id MUST be unique within a given server instance. A message-id SHOULD be + globally unique (i.e. across different systems). + + + + + + A message ID is immutable. Once set, a message-id MUST NOT be changed or reassigned, + even if the message is replicated, resent or sent to multiple queues. + + + + + + + This is a client-specific id that may be used to mark or identify messages between + clients. The server ignores this field. + + + + + + The destination of any message that is sent in reply to this message. + + + + + + The RFC-2046 MIME type for the message content (such as "text/plain"). This is set by the + originating client. + + + + + + The encoding for character-based message content. This is set by the originating client. + Examples include UTF-8 and ISO-8859-15. + + + + + + The identity of the user responsible for producing the message. The client sets this + value, and it is authenticated by the broker. + + + + + The server MUST produce an unauthorized-access exception if the user-id field is set to + a principle for which the client is not authenticated. + + + + + + + The identity of the client application responsible for producing the message. + + + + + + This is a collection of user-defined headers or properties which may be set by the + producing client and retrieved by the consuming client. + + + + + + + + + Credit based flow control. + + + + + + Window based flow control. + + + + + + + + + Indicates a value specified in messages. + + + Indicates a value specified in bytes. + + + + + + + + + This command transfers a message between two peers. When a client uses this command to + publish a message to a broker, the destination identifies a specific exchange. The message + will then be routed to queues as defined by the exchange configuration. + + The client may request a broker to transfer messages to it, from a particular queue, by + issuing a subscribe command. The subscribe command specifies the destination that the broker + should use for any resulting transfers. + + + + + If a transfer to an exchange occurs within a transaction, then it is not available from + the queue until the transaction commits. It is not specified whether routing takes place + when the transfer is received or when the transaction commits. + + + + + + + + + + Specifies the destination to which the message is to be transferred. + + + + + The server MUST accept a blank destination to mean the default exchange. + + + + + + If the destination refers to an exchange that does not exist, the peer MUST raise a + session exception. + + + + + + + Indicates whether message.accept, session.complete, or nothing at all is required to + indicate successful transfer of the message. + + + + + + Indicates whether or not the transferred message has been acquired. + + + + +
+ + + +
+ +
+
+ + + + + + Accepts the message. Once a transfer is accepted, the command-id may no longer be referenced + from other commands. + + + + + The recipient MUST have acquired a message in order to accept it. + + + + + + + + + Identifies the messages previously transferred that should be accepted. + + + + + + + + + Indicates that the message transfers are unprocessable in some way. A server may reject a + message if it is unroutable. A client may reject a message if it is invalid. A message may + be rejected for other reasons as well. Once a transfer is rejected, the command-id may no + longer be referenced from other commands. + + + + + When a client rejects a message, the server MUST deliver that message to the + alternate-exchange on the queue from which it was delivered. If no alternate-exchange is + defined for that queue the broker MAY discard the message. + + + + + + The recipient MUST have acquired a message in order to reject it. If the message is not + acquired any reject MUST be ignored. + + + + + + + + + Identifies the messages previously transferred that should be rejected. + + + + + Code describing the reason for rejection. + + + + + Text describing the reason for rejection. + + + + + + + + + Release previously transferred messages. When acquired messages are released, they become + available for acquisition by any subscriber. Once a transfer is released, the command-id may + no longer be referenced from other commands. + + + + + Acquired messages that have been released MAY subsequently be delivered out of order. + Implementations SHOULD ensure that released messages keep their position with respect to + undelivered messages of the same priority. + + + + + + + + + Indicates the messages to be released. + + + + + By setting set-redelivered to true, any acquired messages released to a queue with this + command will be marked as redelivered on their next transfer from that queue. If this flag + is not set, then an acquired message will retain its original redelivered status on the + queue. Messages that are not acquired are unaffected by the value of this flag. + + + + + + + + + Acquires previously transferred messages for consumption. The acquired ids (if any) are + sent via message.acquired. + + + + + Each acquire MUST produce exactly one message.acquired even if it is empty. + + + + + + + + Indicates the messages to be acquired. + + + + + + + Identifies a set of previously transferred messages that have now been acquired. + + + + + Indicates the acquired messages. + + + + + + + + + + + This command resumes an interrupted transfer. The recipient should return the amount of + partially transferred data associated with the given resume-id, or zero if there is no data + at all. If a non-zero result is returned, the recipient should expect to receive message + fragment(s) containing the remainder of the interrupted message. + + + + + + + + The destination to which the remaining message fragments are transferred. + + + + If the destination does not exist, the recipient MUST close the session. + + + + + + The name of the transfer being resumed. + + + + If the resume-id is not known, the recipient MUST return an offset of zero. + + + + + + + + Indicates the amount of data already transferred. + + + + + + + + + + This command asks the server to start a "subscription", which is a request for messages + from a specific queue. Subscriptions last as long as the session they were created on, or + until the client cancels them. + + + The server SHOULD support at least 16 subscriptions per queue, and ideally, impose no + limit except as defined by available resources. + Create a queue and create subscriptions on that queue until the server + closes the connection. Verify that the number of subscriptions created was at least + sixteen and report the total number. + + + + The default flow mode for new subscriptions is window-mode. + + + + + If the queue for this subscription is deleted, any subscribing sessions MUST be closed. + This exception may occur at any time after the subscription has been completed. + + + + + If the queue for this subscription does not exist, then the subscribing session MUST + be closed. + + + + + Immediately after a subscription is created, the initial byte and message credit for that + destination is zero. + + + + + + + Specifies the name of the subscribed queue. + + + + The client specified name for the subscription. This is used as the destination for + all messages transferred from this subscription. The destination is scoped to the session. + + + + The client MUST NOT specify a destination that refers to an existing subscription on + the same session. + Attempt to create two subscriptions on the same session with the + same non-empty destination. + + + + + The accept-mode to use for messages transferred from this subscription. + + + + The acquire-mode to use for messages transferred from this subscription. + + + + Request an exclusive subscription. This prevents other subscribers from subscribing to + the queue. + + + The server MUST NOT grant an exclusive subscription to a queue that already has + subscribers. + Open two connections to a server, and in one connection create a + shared (non-exclusive) queue and then subscribe to the queue. In the second connection + attempt to subscribe to the same queue using the exclusive option. + + + + + Requests that the broker use the supplied resume-id when transferring messages for + this subscription. + + + + Requested duration in milliseconds for the broker use as resume-ttl when transferring + messages for this subscription. + + + + The syntax and semantics of these arguments depends on the providers implementation. + + + + + + + + + This command cancels a subscription. This does not affect already delivered messages, but it + does mean the server will not send any more messages for that subscription. The client may + receive an arbitrary number of messages in between sending the cancel command and receiving + notification that the cancel command is complete. + + + + + Canceling a subscription MUST NOT affect pending transfers. A transfer made prior to + canceling transfers to the destination MUST be able to be accepted, released, acquired, or + rejected after the subscription is canceled. + + + + + + + + + If the subscription specified by the destination is not found, the server MUST close the + session. + + + + + + + + + + Sets the mode of flow control used for a given destination to either window or credit based + flow control. + + With credit based flow control, the sender of messages continually maintains its current + credit balance with the recipient. The credit balance consists of two values, a message + count, and a byte count. Whenever message data is sent, both counts must be decremented. + If either value reaches zero, the flow of message data must stop. Additional credit is + received via the message.flow command. + + The sender MUST NOT send partial assemblies. This means that if there is not enough byte + credit available to send a complete message, the sender must either wait or use message + fragmentation (see the fragment-properties header struct) to send the first part of the + message data in a complete assembly. + + Window based flow control is identical to credit based flow control, however message + transfer completion implicitly grants a single unit of message credit, and the size of the + message in byte credits for each completed message transfer. Completion of the transfer + command with session.completed is the only way credit is implicitly updated; message.accept, + message.release, message.reject, tx.commit and tx.rollback have no effect on the outstanding + credit balances. + + + + + The byte count is decremented by the payload size of each transmitted frame with segment + type header or body appearing within a message.transfer command. Note that the payload + size is the frame size less the frame header size. + + + + + + Mode switching may only occur if both the byte and message credit balance are zero. There + are three ways for a recipient of messages to be sure that the sender's credit balances + are zero: + + 1) The recipient may send a message.stop command to the sender. When the recipient + receives notification of completion for the message.stop command, it knows that the + sender's credit is zero. + + 2) The recipient may perform the same steps described in (1) with the message.flush + command substituted for the message.stop command. + + 3) Immediately after a subscription is created with message.subscribe, the credit for + that destination is zero. + + + + + + Prior to receiving an explicit set-flow-mode command, a peer MUST consider the flow-mode + to be window. + + + + + + + + + + The new flow control mode. + + + + + + + + + This command controls the flow of message data to a given destination. It is used by the + recipient of messages to dynamically match the incoming rate of message flow to its + processing or forwarding capacity. Upon receipt of this command, the sender must add "value" + number of the specified unit to the available credit balance for the specified destination. + A value of (0xFFFFFFFF) indicates an infinite amount of credit. This disables any limit for + the given unit until the credit balance is zeroed with message.stop or message.flush. + + + + + + + + + + + The unit of value. + + + + + If the value is not set then this indicates an infinite amount of credit. + + + + + + + + + Forces the sender to exhaust his credit supply. The sender's credit will always be zero when + this command completes. The command completes when immediately available message data has + been transferred, or when the credit supply is exhausted. + + + + + + + + + + + + On receipt of this command, a producer of messages MUST set his credit to zero for the given + destination. When notifying of completion, credit MUST be zero and no further messages will + be sent until such a time as further credit is received. + + + + + + + + +
+ + + + + + Standard transactions provide so-called "1.5 phase commit". We can ensure that work is never + lost, but there is a chance of confirmations being lost, so that messages may be resent. + Applications that use standard transactions must be able to detect and ignore duplicate + messages. + + + + tx = C:SELECT + / C:COMMIT + / C:ROLLBACK + + + + + + An client using standard transactions SHOULD be able to track all messages received within a + reasonable period, and thus detect and reject duplicates of the same message. It SHOULD NOT + pass these to the application layer. + + + + + + + + + + This command sets the session to use standard transactions. The client must use this command + exactly once on a session before using the Commit or Rollback commands. + + + + + A client MUST NOT select standard transactions on a session that is already transactional. + + + + + + A client MUST NOT select standard transactions on a session that is already enlisted in a + distributed transaction. + + + + + + On a session on which tx.select has been issued, a client MUST NOT issue a + message.subscribe command with the accept-mode property set to any value other than + explicit. Similarly a tx.select MUST NOT be issued on a session on which a there is a non + cancelled subscriber with accept-mode of none. + + + + + + + + + + + This command commits all messages published and accepted in the current transaction. A + new transaction starts immediately after a commit. + + + In more detail, the commit acts on all messages which have been transferred from the Client + to the Server, and on all acceptances of messages sent from Server to Client. Since the + commit acts on commands sent in the same direction as the commit command itself, there is no + ambiguity on the scope of the commands being committed. Further, the commit will not be + completed until all preceding commands which it affects have been completed. + + + Since transactions act on explicit accept commands, the only valid accept-mode for message + subscribers is explicit. For transferring messages from Client to Server (publishing) all + accept-modes are permitted. + + + + + A client MUST NOT issue tx.commit on a session that has not been selected for standard + transactions with tx.select. + + + + + + + + + + + + + This command abandons the current transaction. In particular the transfers from Client to + Server (publishes) and accepts of transfers from Server to Client which occurred in the + current transaction are discarded. A new transaction starts immediately after a rollback. + + + In more detail, when a rollback is issued, any the effects of transfers which occurred from + Client to Server are discarded. The Server will issue completion notification for all such + transfers prior to the completion of the rollback. Similarly the effects of any + message.accept issued from Client to Server prior to the issuance of the tx.rollback will be + discarded; and notification of completion for all such commands will be issued before the + issuance of the completion for the rollback. + + + After the completion of the rollback, the client will still hold the messages which it has + not yet accepted (including those for which accepts were previously issued within the + transaction); i.e. the messages remain "acquired". If the Client wishes to release those + messages back to the Server, then appropriate message.release commands must be issued. + + + + + A client MUST NOT issue tx.rollback on a session that has not been selected for standard + transactions with tx.select. + + + + + + + + + + + + + This provides the X-Open XA distributed transaction protocol support. It allows a session + to be selected for use with distributed transactions, the transactional boundaries for work on + that session to be demarcated and allows the transaction manager to coordinate transaction + outcomes. + + + + dtx-demarcation = C:SELECT *demarcation + demarcation = C:START C:END + + + + dtx-coordination = *coordination + coordination = command + / outcome + / recovery + command = C:SET-TIMEOUT + / C:GET-TIMEOUT + outcome = one-phase-commit + / one-phase-rollback + / two-phase-commit + / two-phase-rollback + one-phase-commit = C:COMMIT + one-phase-rollback = C:ROLLBACK + two-phase-commit = C:PREPARE C:COMMIT + two-phase-rollback = C:PREPARE C:ROLLBACK + recovery = C:RECOVER *recovery-outcome + recovery-outcome = one-phase-commit + / one-phase-rollback + / C:FORGET + + + + + + Enabling XA transaction support on a session requires that the server MUST manage + transactions demarcated by start-end blocks. That is to say that on this XA-enabled session, + work undergone within transactional blocks is performed on behalf a transaction branch + whereas work performed outside of transactional blocks is NOT transactional. + + + + + + + + + + + + + Normal execution completion (no error). + + + + + + The rollback was caused for an unspecified reason. + + + + + + A transaction branch took too long. + + + + + + The transaction branch may have been heuristically completed. + + + + + + The transaction branch has been heuristically committed. + + + + + + The transaction branch has been heuristically rolled back. + + + + + + The transaction branch has been heuristically committed and rolled back. + + + + + + The transaction branch was read-only and has been committed. + + + + + + + + + + + + + + An xid uniquely identifies a transaction branch. + + + + + + + + + + + + This command sets the session to use distributed transactions. The client must use this + command at least once on a session before using XA demarcation operations. + + + + + + + + + + This command is called when messages should be produced and consumed on behalf a transaction + branch identified by xid. + + + + + If the command is invoked in an improper context (see class grammar) then the server MUST + send a session exception. + + + + + + If neither join nor resume is specified is specified and the transaction branch specified + by xid has previously been seen then the server MUST raise an exception. + + + + + + If join and resume are specified then the server MUST raise an exception. + + + + + + + + Specifies the xid of the transaction branch to be started. + + + + + If xid is already known by the broker then the server MUST raise an exception. + + + + + + + Indicate whether this is joining an already associated xid. Indicate that the start + applies to joining a transaction previously seen. + + + + + If the broker does not support join the server MUST raise an exception. + + + + + + + Indicate that the start applies to resuming a suspended transaction branch specified. + + + + + + This confirms to the client that the transaction branch is started or specify the error + condition. + + The value of this field may be one of the following constants: + + xa-ok: Normal execution. + + xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified + reason. + + xa-rbtimeout: The work represented by this transaction branch took too long. + + + + + + + + + This command is called when the work done on behalf a transaction branch finishes or needs + to be suspended. + + + + + If the command is invoked in an improper context (see class grammar) then the server MUST + raise an exception. + + + + + + If suspend and fail are specified then the server MUST raise an exception. + + + + + + If neither fail nor suspend are specified then the portion of work has completed + successfully. + + + + + + When a session is closed then the currently associated transaction branches MUST be marked + rollback-only. + + + + + + + + Specifies the xid of the transaction branch to be ended. + + + + + The session MUST be currently associated with the given xid (through an earlier start + call with the same xid). + + + + + + + If set, indicates that this portion of work has failed; otherwise this portion of work has + completed successfully. + + + + + An implementation MAY elect to roll a transaction back if this failure notification is + received. Should an implementation elect to implement this behavior, and this bit is + set, then then the transaction branch SHOULD be marked as rollback-only and the end + result SHOULD have the xa-rbrollback status set. + + + + + + + Indicates that the transaction branch is temporarily suspended in an incomplete state. + + + + + The transaction context is in a suspended state and must be resumed via the start + command with resume specified. + + + + + + + + This command confirms to the client that the transaction branch is ended or specify the + error condition. + + The value of this field may be one of the following constants: + + xa-ok: Normal execution. + + xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified + reason. If an implementation chooses to implement rollback-on-failure behavior, then + this value should be selected if the dtx.end.fail bit was set. + + xa-rbtimeout: The work represented by this transaction branch took too long. + + + + + + + + + Commit the work done on behalf a transaction branch. This command commits the work + associated with xid. Any produced messages are made available and any consumed messages are + discarded. + + + + + If the command is invoked in an improper context (see class grammar) then the server MUST + raise an exception. + + + + + + + + Specifies the xid of the transaction branch to be committed. + + + + + If xid is unknown (the transaction branch has not been started or has already been + ended) then the server MUST raise an exception. + + + + + + If this command is called when xid is still associated with a session then the server + MUST raise an exception. + + + + + + + Used to indicate whether one-phase or two-phase commit is used. + + + + + The one-phase bit MUST be set if a commit is sent without a preceding prepare. + + + + + + The one-phase bit MUST NOT be set if the commit has been preceded by prepare. + + + + + + + This confirms to the client that the transaction branch is committed or specify the + error condition. + + The value of this field may be one of the following constants: + + xa-ok: Normal execution + + xa-heurhaz: Due to some failure, the work done on behalf of the specified transaction + branch may have been heuristically completed. + + xa-heurcom: Due to a heuristic decision, the work done on behalf of the specified + transaction branch was committed. + + xa-heurrb: Due to a heuristic decision, the work done on behalf of the specified + transaction branch was rolled back. + + xa-heurmix: Due to a heuristic decision, the work done on behalf of the specified + transaction branch was partially committed and partially rolled back. + + xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified + reason. + + xa-rbtimeout: The work represented by this transaction branch took too long. + + + + + + + + + This command is called to forget about a heuristically completed transaction branch. + + + + + If the command is invoked in an improper context (see class grammar) then the server MUST + raise an exception. + + + + + + + + Specifies the xid of the transaction branch to be forgotten. + + + + + If xid is unknown (the transaction branch has not been started or has already been + ended) then the server MUST raise an exception. + + + + + + If this command is called when xid is still associated with a session then the server + MUST raise an exception. + + + + + + + + + + This command obtains the current transaction timeout value in seconds. If set-timeout was + not used prior to invoking this command, the return value is the default timeout; otherwise, + the value used in the previous set-timeout call is returned. + + + + + + + Specifies the xid of the transaction branch for getting the timeout. + + + + + If xid is unknown (the transaction branch has not been started or has already been + ended) then the server MUST raise an exception. + + + + + + + Returns the value of the timeout last specified through set-timeout. + + + The current transaction timeout value in seconds. + + + + + + + + + + This command prepares for commitment any message produced or consumed on behalf of xid. + + + + + If the command is invoked in an improper context (see class grammar) then the server MUST + raise an exception. + + + + + + Once this command successfully returns it is guaranteed that the transaction branch may be + either committed or rolled back regardless of failures. + + + + + + The knowledge of xid cannot be erased before commit or rollback complete the branch. + + + + + + + + Specifies the xid of the transaction branch that can be prepared. + + + + + If xid is unknown (the transaction branch has not been started or has already been + ended) then the server MUST raise an exception. + + + + + + If this command is called when xid is still associated with a session then the server + MUST raise an exception. + + + + + + + This command confirms to the client that the transaction branch is prepared or specify the + error condition. + + The value of this field may be one of the following constants: + + xa-ok: Normal execution. + + xa-rdonly: The transaction branch was read-only and has been committed. + + xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified + reason. + + xa-rbtimeout: The work represented by this transaction branch took too long. + + + + + + + + + This command is called to obtain a list of transaction branches that are in a prepared or + heuristically completed state. + + + + + + + + Returns to the client a table with single item that is a sequence of transaction xids + that are in a prepared or heuristically completed state. + + + + Array containing the xids to be recovered (xids that are in a prepared or + heuristically completed state). + + + + + + + + + + + This command rolls back the work associated with xid. Any produced messages are discarded + and any consumed messages are re-enqueued. + + + + + If the command is invoked in an improper context (see class grammar) then the server MUST + raise an exception. + + + + + + + + Specifies the xid of the transaction branch that can be rolled back. + + + + + If xid is unknown (the transaction branch has not been started or has already been + ended) then the server MUST raise an exception. + + + + + + If this command is called when xid is still associated with a session then the server + MUST raise an exception. + + + + + + + This command confirms to the client that the transaction branch is rolled back or specify + the error condition. + + The value of this field may be one of the following constants: + + xa-ok: Normal execution + + xa-heurhaz: Due to some failure, the work done on behalf of the specified transaction + branch may have been heuristically completed. + + xa-heurcom: Due to a heuristic decision, the work done on behalf of the specified + transaction branch was committed. + + xa-heurrb: Due to a heuristic decision, the work done on behalf of the specified + transaction branch was rolled back. + + xa-heurmix: Due to a heuristic decision, the work done on behalf of the specified + transaction branch was partially committed and partially rolled back. + + xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified + reason. + + xa-rbtimeout: The work represented by this transaction branch took too long. + + + + + + + + + Sets the specified transaction branch timeout value in seconds. + + + + + Once set, this timeout value is effective until this command is reinvoked with a different + value. + + + + + + A value of zero resets the timeout value to the default value. + + + + + + + + Specifies the xid of the transaction branch for setting the timeout. + + + + + If xid is unknown (the transaction branch has not been started or has already been + ended) then the server MUST raise an exception. + + + + + + + + The transaction timeout value in seconds. + + + + + + + + + + + Exchanges match and distribute messages across queues. Exchanges can be configured in the + server or created at runtime. + + + + exchange = C:DECLARE + / C:DELETE + / C:QUERY + + + + + The server MUST implement these standard exchange types: fanout, direct. + + + Client attempts to declare an exchange with each of these standard types. + + + + + + The server SHOULD implement these standard exchange types: topic, headers. + + + Client attempts to declare an exchange with each of these standard types. + + + + + + The server MUST, in each virtual host, pre-declare an exchange instance for each standard + exchange type that it implements, where the name of the exchange instance, if defined, is + "amq." followed by the exchange type name. + + The server MUST, in each virtual host, pre-declare at least two direct exchange instances: + one named "amq.direct", the other with no public name that serves as a default exchange for + publish commands (such as message.transfer). + + + Client creates a temporary queue and attempts to bind to each required exchange instance + ("amq.fanout", "amq.direct", "amq.topic", and "amq.headers" if those types are defined). + + + + + + The server MUST pre-declare a direct exchange with no public name to act as the default + exchange for content publish commands (such as message.transfer) and for default queue + bindings. + + + Client checks that the default exchange is active by publishing a message with a suitable + routing key but without specifying the exchange name, then ensuring that the message arrives + in the queue correctly. + + + + + + The default exchange MUST NOT be accessible to the client except by specifying an empty + exchange name in a content publish command (such as message.transfer). That is, the server + must not let clients explicitly bind, unbind, delete, or make any other reference to this + exchange. + + + + + + The server MAY implement other exchange types as wanted. + + + + + + + + + The exchange name is a client-selected string that identifies the exchange for publish + commands. Exchange names may consist of any mixture of digits, letters, and underscores. + Exchange names are scoped by the virtual host. + + + + + + + + This command creates an exchange if it does not already exist, and if the exchange exists, + verifies that it is of the correct and expected class. + + + + + The server SHOULD support a minimum of 16 exchanges per virtual host and ideally, impose + no limit except as defined by available resources. + + + The client creates as many exchanges as it can until the server reports an error; the + number of exchanges successfully created must be at least sixteen. + + + + + + + + + Exchange names starting with "amq." are reserved for pre-declared and standardized + exchanges. The client MUST NOT attempt to create an exchange starting with "amq.". + + + + + + The name of the exchange MUST NOT be a blank or empty string. + + + + + + + Each exchange belongs to one of a set of exchange types implemented by the server. The + exchange types define the functionality of the exchange - i.e. how messages are routed + through it. It is not valid or meaningful to attempt to change the type of an existing + exchange. + + + + + Exchanges cannot be redeclared with different types. The client MUST NOT attempt to + redeclare an existing exchange with a different type than used in the original + exchange.declare command. + + + + + + If the client attempts to create an exchange which the server does not recognize, an + exception MUST be sent. + + + + + + + In the event that a message cannot be routed, this is the name of the exchange to which + the message will be sent. Messages transferred using message.transfer will be routed to + the alternate-exchange only if they are sent with the "none" accept-mode, and the + discard-unroutable delivery property is set to false, and there is no queue to route to + for the given message according to the bindings on this exchange. + + + + + If alternate-exchange is not set (its name is an empty string), unroutable messages + that would be sent to the alternate-exchange MUST be dropped silently. + + + + + + If the alternate-exchange is not empty and if the exchange already exists with a + different alternate-exchange, then the declaration MUST result in an exception. + + + + + + A message which is being routed to a alternate exchange, MUST NOT be re-routed to a + secondary alternate exchange if it fails to route in the primary alternate exchange. + After such a failure, the message MUST be dropped. This prevents looping. + + + + + + + If set, the server will not create the exchange. The client can use this to check whether + an exchange exists without modifying the server state. + + + + If set, and the exchange does not already exist, the server MUST raise an exception. + + + + + + + If set when creating a new exchange, the exchange will be marked as durable. Durable + exchanges remain active when a server restarts. Non-durable exchanges (transient + exchanges) are purged if/when a server restarts. + + + + + The server MUST support both durable and transient exchanges. + + + + + + The server MUST ignore the durable field if the exchange already exists. + + + + + + + If set, the exchange is deleted automatically when there remain no bindings between the + exchange and any queue. Such an exchange will not be automatically deleted until at least + one binding has been made to prevent the immediate deletion of the exchange upon creation. + + + + The server MUST ignore the auto-delete field if the exchange already exists. + + + + + + + A set of arguments for the declaration. The syntax and semantics of these arguments + depends on the server implementation. This field is ignored if passive is 1. + + + + + If the arguments field contains arguments which are not understood by the server, + it MUST raise an exception. + + + + + + + + + + This command deletes an exchange. When an exchange is deleted all queue bindings on the + exchange are cancelled. + + + + + + + + The client MUST NOT attempt to delete an exchange that does not exist. + + + + + + The name of the exchange MUST NOT be a missing or empty string. + + + + + + An exchange MUST NOT be deleted if it is in use as an alternate-exchange by a queue or + by another exchange. + + + + + + + + If set, the server will only delete the exchange if it has no queue bindings. If the + exchange has queue bindings the server does not delete it but raises an exception + instead. + + + + If the exchange has queue bindings, and the if-unused flag is set, the server MUST NOT + delete the exchange, but MUST raise and exception. + + + + + + + + + + This command is used to request information on a particular exchange. + + + + + + + The name of the exchange for which information is requested. If not specified explicitly + the default exchange is implied. + + + + + + + This is sent in response to a query request and conveys information on a particular + exchange. + + + + + The type of the exchange. Will be empty if the exchange is not found. + + + + + + The durability of the exchange, i.e. if set the exchange is durable. Will not be set + if the exchange is not found. + + + + + + If set, the exchange for which information was requested is not known. + + + + + + A set of properties of the exchange whose syntax and semantics depends on the server + implementation. Will be empty if the exchange is not found. + + + + + + + + + + This command binds a queue to an exchange. Until a queue is bound it will not receive + any messages. In a classic messaging model, store-and-forward queues are bound to a direct + exchange and subscription queues are bound to a topic exchange. + + + + A server MUST ignore duplicate bindings - that is, two or more bind commands with the + same exchange, queue, and binding-key - without treating these as an error. The value of + the arguments used for the binding MUST NOT be altered by subsequent binding requests. + + + A client binds a named queue to an exchange. The client then repeats the bind (with + identical exchange, queue, and binding-key). The second binding should use a different + value for the arguments field. + + + + + Bindings between durable queues and durable exchanges are automatically durable and + the server MUST restore such bindings after a server restart. + A server creates a named durable queue and binds it to a durable + exchange. The server is restarted. The client then attempts to use the queue/exchange + combination. + + + + The server SHOULD support at least 4 bindings per queue, and ideally, impose no limit + except as defined by available resources. + A client creates a named queue and attempts to bind it to 4 different + exchanges. + + + + Where more than one binding exists between a particular exchange instance and a + particular queue instance any given message published to that exchange should be delivered + to that queue at most once, regardless of how many distinct bindings match. + A client creates a named queue and binds it to the same topic exchange + at least three times using intersecting binding-keys (for example, "animals.*", + "animals.dogs.*", "animal.dogs.chihuahua"). Verify that a message matching all the + bindings (using previous example, routing key = "animal.dogs.chihuahua") is delivered once + only. + + + + + + Specifies the name of the queue to bind. + + + A client MUST NOT be allowed to bind a non-existent and unnamed queue (i.e. empty + queue name) to an exchange. + A client attempts to bind with an unnamed (empty) queue name to an + exchange. + + + + A client MUST NOT be allowed to bind a non-existent queue (i.e. not previously + declared) to an exchange. + A client attempts to bind an undeclared queue name to an exchange. + + + + + + + A client MUST NOT be allowed to bind a queue to a non-existent exchange. + A client attempts to bind a named queue to a undeclared exchange. + + + + + The name of the exchange MUST NOT be a blank or empty string. + + + + + The binding-key uniquely identifies a binding between a given (exchange, queue) pair. + Depending on the exchange configuration, the binding key may be matched against the + message routing key in order to make routing decisions. The match algorithm depends on the + exchange type. Some exchange types may ignore the binding key when making routing + decisions. Refer to the specific exchange type documentation. The meaning of an empty + binding key depends on the exchange implementation. + + + + A set of arguments for the binding. The syntax and semantics of these arguments + depends on the exchange class. + + + If the arguments field contains arguments which are not understood by the server, it + MUST raise an exception. + + + + + + + + + This command unbinds a queue from an exchange. + + + + + + + Specifies the name of the queue to unbind. + + + + If the queue does not exist the server MUST raise an exception. + + + + + + + The name of the exchange to unbind from. + + + + + If the exchange does not exist the server MUST raise an exception. + + + + + + The name of the exchange MUST NOT be a blank or empty string. + + + + + + + Specifies the binding-key of the binding to unbind. + + + + + If there is no matching binding-key the server MUST raise an exception. + + + + + + + + + + This command is used to request information on the bindings to a particular exchange. + + + + + + + The name of the exchange for which binding information is being requested. If not + specified explicitly the default exchange is implied. + + + + + + If populated then determine whether the given queue is bound to the exchange. + + + + + + If populated defines the binding-key of the binding of interest, if not populated the + request will ignore the binding-key on bindings when searching for a match. + + + + + + If populated defines the arguments of the binding of interest if not populated the request + will ignore the arguments on bindings when searching for a match + + + + + + + + If set, the exchange for which information was requested is not known. + + + + + + If set, the queue specified is not known. + + + + + + A bit which if set indicates that no binding was found from the specified exchange to + the specified queue. + + + + + + A bit which if set indicates that no binding was found from the specified exchange + with the specified binding-key. + + + + + + A bit which if set indicates that no binding was found from the specified exchange + with the specified arguments. + + + + + + + + + + + + + Queues store and forward messages. Queues can be configured in the server or created at + runtime. Queues must be attached to at least one exchange in order to receive messages from + publishers. + + + + queue = C:DECLARE + / C:BIND + / C:PURGE + / C:DELETE + / C:QUERY + / C:UNBIND + + + + + A server MUST allow any content class to be sent to any queue, in any mix, and queue and + deliver these content classes independently. Note that all commands that fetch content off + queues are specific to a given content class. + + + Client creates an exchange of each standard type and several queues that it binds to each + exchange. It must then successfully send each of the standard content types to each of the + available queues. + + + + + + + + + The queue name identifies the queue within the virtual host. Queue names must have a length + of between 1 and 255 characters inclusive, must start with a digit, letter or underscores + ('_') character, and must be otherwise encoded in UTF-8. + + + + + + + + This command creates or checks a queue. When creating a new queue the client can specify + various properties that control the durability of the queue and its contents, and the level + of sharing for the queue. + + + + + The server MUST create a default binding for a newly-created queue to the default + exchange, which is an exchange of type 'direct' and use the queue name as the binding-key. + + + Client creates a new queue, and then without explicitly binding it to an exchange, + attempts to send a message through the default exchange binding, i.e. publish a message to + the empty exchange, with the queue name as binding-key. + + + + + + The server SHOULD support a minimum of 256 queues per virtual host and ideally, impose no + limit except as defined by available resources. + + + Client attempts to create as many queues as it can until the server reports an error. The + resulting count must at least be 256. + + + + + + + + + Queue names starting with "amq." are reserved for pre-declared and standardized server + queues. A client MUST NOT attempt to declare a queue with a name that starts with "amq." + and the passive option set to zero. + + + A client attempts to create a queue with a name starting with "amq." and with the + passive option set to zero. + + + + + + + The alternate-exchange field specifies how messages on this queue should be treated when + they are rejected by a subscriber, or when they are orphaned by queue deletion. When + present, rejected or orphaned messages MUST be routed to the alternate-exchange. In all + cases the messages MUST be removed from the queue. + + + + + If the alternate-exchange is not empty and if the queue already exists with a different + alternate-exchange, then the declaration MUST result in an exception. + + + + + + if the alternate-exchange does not match the name of any existing exchange on the + server, then an exception must be raised. + + + + + + + If set, the server will not create the queue. This field allows the client to assert the + presence of a queue without modifying the server state. + + + + + The client MAY ask the server to assert that a queue exists without creating the queue + if not. If the queue does not exist, the server treats this as a failure. + + + Client declares an existing queue with the passive option and expects the command to + succeed. Client then attempts to declare a non-existent queue with the passive option, + and the server must close the session with the correct exception. + + + + + + + If set when creating a new queue, the queue will be marked as durable. Durable queues + remain active when a server restarts. Non-durable queues (transient queues) are purged + if/when a server restarts. Note that durable queues do not necessarily hold persistent + messages, although it does not make sense to send persistent messages to a transient + queue. + + + + + The queue definition MUST survive the server losing all transient memory, e.g. a + machine restart. + + + Client creates a durable queue; server is then restarted. Client then attempts to send + message to the queue. The message should be successfully delivered. + + + + + + The server MUST support both durable and transient queues. + + + A client creates two named queues, one durable and one transient. + + + + + + The server MUST ignore the durable field if the queue already exists. + + + A client creates two named queues, one durable and one transient. The client then + attempts to declare the two queues using the same names again, but reversing the value + of the durable flag in each case. Verify that the queues still exist with the original + durable flag values. + + + + + + + Exclusive queues can only be used from one session at a time. Once a session + declares an exclusive queue, that queue cannot be used by any other session until the + declaring session closes. + + + + + The server MUST support both exclusive (private) and non-exclusive (shared) queues. + + + A client creates two named queues, one exclusive and one non-exclusive. + + + + + + If the server receives a declare, bind, consume or get request for a queue that has been + declared as exclusive by an existing client session, it MUST raise an exception. + + + A client declares an exclusive named queue. A second client on a different session + attempts to declare a queue of the same name. + + + + + + + If this field is set and the exclusive field is also set, then the queue MUST be deleted + when the session closes. + + If this field is set and the exclusive field is not set the queue is deleted when all + the consumers have finished using it. Last consumer can be cancelled either explicitly + or because its session is closed. If there was no consumer ever on the queue, it won't + be deleted. + + + + + The server MUST ignore the auto-delete field if the queue already exists. + + + A client creates two named queues, one as auto-delete and one explicit-delete. The + client then attempts to declare the two queues using the same names again, but reversing + the value of the auto-delete field in each case. Verify that the queues still exist with + the original auto-delete flag values. + + + + + + + A set of arguments for the declaration. The syntax and semantics of these arguments + depends on the server implementation. This field is ignored if passive is 1. + + + + + If the arguments field contains arguments which are not understood by the server, + it MUST raise an exception. + + + + + + + + + + This command deletes a queue. When a queue is deleted any pending messages are sent to the + alternate-exchange if defined, or discarded if it is not. + + + + + + + + Specifies the name of the queue to delete. + + + + + If the queue name in this command is empty, the server MUST raise an exception. + + + + + + The queue must exist. If the client attempts to delete a non-existing queue the server + MUST raise an exception. + + + + + + + If set, the server will only delete the queue if it has no consumers. If the queue has + consumers the server does does not delete it but raises an exception instead. + + + + + The server MUST respect the if-unused flag when deleting a queue. + + + + + + + If set, the server will only delete the queue if it has no messages. + + + + If the queue is not empty the server MUST raise an exception. + + + + + + + + + + This command removes all messages from a queue. It does not cancel subscribers. Purged + messages are deleted without any formal "undo" mechanism. + + + + + A call to purge MUST result in an empty queue. + + + + + + The server MUST NOT purge messages that have already been sent to a client but not yet + accepted. + + + + + + The server MAY implement a purge queue or log that allows system administrators to recover + accidentally-purged messages. The server SHOULD NOT keep purged messages in the same + storage spaces as the live messages since the volumes of purged messages may get very + large. + + + + + + + + Specifies the name of the queue to purge. + + + + + If the the queue name in this command is empty, the server MUST raise an exception. + + + + + + The queue MUST exist. Attempting to purge a non-existing queue MUST cause an exception. + + + + + + + + + + This command requests information about a queue. + + + + + + + + + + This is sent in response to queue.query, and conveys the requested information about a + queue. If no queue with the specified name exists then none of the fields within the + returned result struct will be populated. + + + + + Reports the name of the queue. + + + + + + + + + + + + + + + Reports the number of messages in the queue. + + + + + Reports the number of subscribers for the queue. + + + + + + + + + + + + + The file class provides commands that support reliable file transfer. File messages have a + specific set of properties that are required for interoperability with file transfer + applications. File messages and acknowledgements are subject to session transactions. Note + that the file class does not provide message browsing commands; these are not compatible with + the staging model. Applications that need browsable file transfer should use Message content + and the Message class. + + + + file = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL + / C:OPEN S:OPEN-OK C:STAGE content + / S:OPEN C:OPEN-OK S:STAGE content + / C:PUBLISH + / S:DELIVER + / S:RETURN + / C:ACK + / C:REJECT + + + + + The server MUST make a best-effort to hold file messages on a reliable storage mechanism. + + + + + + The server MUST NOT discard a file message in case of a queue overflow. The server MUST use + the Session.Flow command to slow or stop a file message publisher when necessary. + + + + + + The server MUST implement at least 2 priority levels for file messages, where priorities 0-4 + and 5-9 are treated as two distinct levels. The server MAY implement up to 10 priority + levels. + + + + + + The server MUST support both automatic and explicit acknowledgements on file content. + + + + + + + + + + + + + + + + + + + + + + + The return code. The AMQP return codes are defined by this enum. + + + + + The client attempted to transfer content larger than the server could accept. + + + + + + The exchange cannot route a message, most likely due to an invalid routing key. Only + when the mandatory flag is set. + + + + + + The exchange cannot deliver to a consumer when the immediate flag is set. As a result of + pending data on the queue or the absence of any consumers of the queue. + + + + + + + + + + This command requests a specific quality of service. The QoS can be specified for the + current session or for all sessions on the connection. The particular properties and + semantics of a qos command always depend on the content class semantics. Though the qos + command could in principle apply to both peers, it is currently meaningful only for the + server. + + + + + + + + + The client can request that messages be sent in advance so that when the client finishes + processing a message, the following message is already held locally, rather than needing + to be sent within the session. Pre-fetching gives a performance improvement. This field + specifies the pre-fetch window size in octets. May be set to zero, meaning "no specific + limit". Note that other pre-fetch limits may still apply. The prefetch-size is ignored if + the no-ack option is set. + + + + + + Specifies a pre-fetch window in terms of whole messages. This is compatible with some file + API implementations. This field may be used in combination with the prefetch-size field; a + message will only be sent in advance if both pre-fetch windows (and those at the session + and connection level) allow it. The prefetch-count is ignored if the no-ack option is set. + + + + + The server MAY send less data in advance than allowed by the client's specified + pre-fetch windows but it MUST NOT send more. + + + + + + + By default the QoS settings apply to the current session only. If this field is set, they + are applied to the entire connection. + + + + + + + + + This command tells the client that the requested QoS levels could be handled by the server. + The requested QoS applies to all active consumers until a new QoS is defined. + + + + + + + + + + This command asks the server to start a "consumer", which is a transient request for + messages from a specific queue. Consumers last as long as the session they were created on, + or until the client cancels them. + + + + + The server SHOULD support at least 16 consumers per queue, unless the queue was declared + as private, and ideally, impose no limit except as defined by available resources. + + + + + + + + + + Specifies the name of the queue to consume from. + + + + + If the queue name in this command is empty, the server MUST raise an exception. + + + + + + + Specifies the identifier for the consumer. The consumer tag is local to a connection, so + two clients can use the same consumer tags. + + + + + The tag MUST NOT refer to an existing consumer. If the client attempts to create two + consumers with the same non-empty tag the server MUST raise an exception. + + + + + + The client MUST NOT specify a tag that is empty or blank. + + + Attempt to create a consumers with an empty tag. + + + + + + If the no-local field is set the server will not send messages to the connection that + published them. + + + + + If this field is set the server does not expect acknowledgements for messages. That is, + when a message is delivered to the client the server automatically and silently + acknowledges it on behalf of the client. This functionality increases performance but at + the cost of reliability. Messages can get lost if a client dies before it can deliver them + to the application. + + + + + + Request exclusive consumer access, meaning only this consumer can access the queue. + + + + + If the server cannot grant exclusive access to the queue when asked, - because there are + other consumers active - it MUST raise an exception. + + + + + + + If set, the server will not respond to the command. The client should not wait for a reply + command. If the server could not complete the command it will raise an exception. + + + + + + A set of arguments for the consume. The syntax and semantics of these arguments depends on + the providers implementation. + + + + + + + This command provides the client with a consumer tag which it MUST use in commands that work + with the consumer. + + + + + + + Holds the consumer tag specified by the client or provided by the server. + + + + + + + + + This command cancels a consumer. This does not affect already delivered messages, but it + does mean the server will not send any more messages for that consumer. + + + + + + + the identifier of the consumer to be cancelled. + + + + + + + + + This command requests permission to start staging a message. Staging means sending the + message into a temporary area at the recipient end and then delivering the message by + referring to this temporary area. Staging is how the protocol handles partial file transfers + - if a message is partially staged and the connection breaks, the next time the sender + starts to stage it, it can restart from where it left off. + + + + + + + + + + This is the staging identifier. This is an arbitrary string chosen by the sender. For + staging to work correctly the sender must use the same staging identifier when staging the + same message a second time after recovery from a failure. A good choice for the staging + identifier would be the SHA1 hash of the message properties data (including the original + filename, revised time, etc.). + + + + + + The size of the content in octets. The recipient may use this information to allocate or + check available space in advance, to avoid "disk full" errors during staging of very large + messages. + + + + + The sender MUST accurately fill the content-size field. Zero-length content is + permitted. + + + + + + + + + + This command confirms that the recipient is ready to accept staged data. If the message was + already partially-staged at a previous time the recipient will report the number of octets + already staged. + + + + + + + + + + The amount of previously-staged content in octets. For a new message this will be zero. + + + + + The sender MUST start sending data from this octet offset in the message, counting from + zero. + + + + + + The recipient MAY decide how long to hold partially-staged content and MAY implement + staging by always discarding partially-staged content. However if it uses the file + content type it MUST support the staging commands. + + + + + + + + + + This command stages the message, sending the message content to the recipient from the octet + offset specified in the Open-Ok command. + + + + + + +
+ +
+ +
+
+ + + + + + This command publishes a staged file message to a specific exchange. The file message will + be routed to queues as defined by the exchange configuration and distributed to any active + consumers when the transaction, if any, is committed. + + + + + + + Specifies the name of the exchange to publish to. The exchange name can be empty, meaning + the default exchange. If the exchange name is specified, and that exchange does not exist, + the server will raise an exception. + + + + + The server MUST accept a blank exchange name to mean the default exchange. + + + + + + The exchange MAY refuse file content in which case it MUST send an exception. + + + + + + + Specifies the routing key for the message. The routing key is used for routing messages + depending on the exchange configuration. + + + + + + This flag tells the server how to react if the message cannot be routed to a queue. If + this flag is set, the server will return an unroutable message with a Return command. If + this flag is zero, the server silently drops the message. + + + + + The server SHOULD implement the mandatory flag. + + + + + + + This flag tells the server how to react if the message cannot be routed to a queue + consumer immediately. If this flag is set, the server will return an undeliverable message + with a Return command. If this flag is zero, the server will queue the message, but with + no guarantee that it will ever be consumed. + + + + + The server SHOULD implement the immediate flag. + + + + + + + This is the staging identifier of the message to publish. The message must have been + staged. Note that a client can send the Publish command asynchronously without waiting for + staging to finish. + + + + + + + + + This command returns an undeliverable message that was published with the "immediate" flag + set, or an unroutable message published with the "mandatory" flag set. The reply code and + text provide information about the reason that the message was undeliverable. + + + + + + + + + This text can be logged as an aid to resolving issues. + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + + Specifies the routing key name specified when the message was published. + + + + +
+ +
+ +
+
+ + + + + + This command delivers a staged file message to the client, via a consumer. In the + asynchronous message delivery model, the client starts a consumer using the consume command, + then the server responds with Deliver commands as and when messages arrive for that + consumer. + + + + + The server SHOULD track the number of times a message has been delivered to clients and + when a message is redelivered a certain number of times - e.g. 5 times - without being + acknowledged, the server SHOULD consider the message to be non-processable (possibly + causing client applications to abort), and move the message to a dead letter queue. + + + + + + + + + + The server-assigned and session-specific delivery tag + + + + + The server MUST NOT use a zero value for delivery tags. Zero is reserved for client use, + meaning "all messages so far received". + + + + + + + This boolean flag indicates that the message may have been previously delivered to this + or another client. + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + + Specifies the routing key name specified when the message was published. + + + + + + This is the staging identifier of the message to deliver. The message must have been + staged. Note that a server can send the Deliver command asynchronously without waiting for + staging to finish. + + + + + + + + + This command acknowledges one or more messages delivered via the Deliver command. The client + can ask to confirm a single message or a set of messages up to and including a specific + message. + + + + + + + The identifier of the message being acknowledged + + + + The delivery tag is valid only within the session from which the message was received. + i.e. A client MUST NOT receive a message on one session and then acknowledge it on + another. + + + + + + + If set to 1, the delivery tag is treated as "up to and including", so that the client can + acknowledge multiple messages with a single command. If set to zero, the delivery tag + refers to a single message. If the multiple field is 1, and the delivery tag is zero, + tells the server to acknowledge all outstanding messages. + + + + + The server MUST validate that a non-zero delivery-tag refers to an delivered message, + and raise an exception if this is not the case. + + + + + + + + + + This command allows a client to reject a message. It can be used to return untreatable + messages to their original queue. Note that file content is staged before delivery, so the + client will not use this command to interrupt delivery of a large message. + + + + + The server SHOULD interpret this command as meaning that the client is unable to process + the message at this time. + + + + + + A client MUST NOT use this command as a means of selecting messages to process. A rejected + message MAY be discarded or dead-lettered, not necessarily passed to another client. + + + + + + + + the identifier of the message to be rejected + + + + The delivery tag is valid only within the session from which the message was received. + i.e. A client MUST NOT receive a message on one session and then reject it on another. + + + + + + + If this field is zero, the message will be discarded. If this bit is 1, the server will + attempt to requeue the message. + + + + + The server MUST NOT deliver the message to the same client within the context of the + current session. The recommended strategy is to attempt to deliver the message to an + alternative consumer, and if that is not possible, to move the message to a dead-letter + queue. The server MAY use more sophisticated tracking to hold the message on the queue + and redeliver it to the same client at a later stage. + + + + + +
+ + + + + + The stream class provides commands that support multimedia streaming. The stream class uses + the following semantics: one message is one packet of data; delivery is unacknowledged and + unreliable; the consumer can specify quality of service parameters that the server can try to + adhere to; lower-priority messages may be discarded in favor of high priority messages. + + + + stream = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL + / C:PUBLISH content + / S:RETURN + / S:DELIVER content + + + + + The server SHOULD discard stream messages on a priority basis if the queue size exceeds some + configured limit. + + + + + + The server MUST implement at least 2 priority levels for stream messages, where priorities + 0-4 and 5-9 are treated as two distinct levels. The server MAY implement up to 10 priority + levels. + + + + + + The server MUST implement automatic acknowledgements on stream content. That is, as soon as + a message is delivered to a client via a Deliver command, the server must remove it from the + queue. + + + + + + + + + + + + + + + + + + The return code. The AMQP return codes are defined by this enum. + + + + + The client attempted to transfer content larger than the server could accept. + + + + + + The exchange cannot route a message, most likely due to an invalid routing key. Only + when the mandatory flag is set. + + + + + + The exchange cannot deliver to a consumer when the immediate flag is set. As a result of + pending data on the queue or the absence of any consumers of the queue. + + + + + + + + + + This command requests a specific quality of service. The QoS can be specified for the + current session or for all sessions on the connection. The particular properties and + semantics of a qos command always depend on the content class semantics. Though the qos + command could in principle apply to both peers, it is currently meaningful only for the + server. + + + + + + + + + The client can request that messages be sent in advance so that when the client finishes + processing a message, the following message is already held locally, rather than needing + to be sent within the session. Pre-fetching gives a performance improvement. This field + specifies the pre-fetch window size in octets. May be set to zero, meaning "no specific + limit". Note that other pre-fetch limits may still apply. + + + + + + Specifies a pre-fetch window in terms of whole messages. This field may be used in + combination with the prefetch-size field; a message will only be sent in advance if both + pre-fetch windows (and those at the session and connection level) allow it. + + + + + + Specifies a desired transfer rate in octets per second. This is usually determined by the + application that uses the streaming data. A value of zero means "no limit", i.e. as + rapidly as possible. + + + + + The server MAY ignore the pre-fetch values and consume rates, depending on the type of + stream and the ability of the server to queue and/or reply it. + + + + + + The server MAY drop low-priority messages in favor of high-priority messages. + + + + + + + By default the QoS settings apply to the current session only. If this field is set, they + are applied to the entire connection. + + + + + + + + + This command tells the client that the requested QoS levels could be handled by the server. + The requested QoS applies to all active consumers until a new QoS is defined. + + + + + + + + + + This command asks the server to start a "consumer", which is a transient request for + messages from a specific queue. Consumers last as long as the session they were created on, + or until the client cancels them. + + + + + The server SHOULD support at least 16 consumers per queue, unless the queue was declared + as private, and ideally, impose no limit except as defined by available resources. + + + + + + Streaming applications SHOULD use different sessions to select different streaming + resolutions. AMQP makes no provision for filtering and/or transforming streams except on + the basis of priority-based selective delivery of individual messages. + + + + + + + + + + Specifies the name of the queue to consume from. + + + + + If the queue name in this command is empty, the server MUST raise an exception. + + + + + + + Specifies the identifier for the consumer. The consumer tag is local to a connection, so + two clients can use the same consumer tags. + + + + + The tag MUST NOT refer to an existing consumer. If the client attempts to create two + consumers with the same non-empty tag the server MUST raise an exception. + + + + + + The client MUST NOT specify a tag that is empty or blank. + + + Attempt to create a consumers with an empty tag. + + + + + + If the no-local field is set the server will not send messages to the connection that + published them. + + + + + Request exclusive consumer access, meaning only this consumer can access the queue. + + + + + If the server cannot grant exclusive access to the queue when asked, - because there are + other consumers active - it MUST raise an exception with return code 405 + (resource locked). + + + + + + + If set, the server will not respond to the command. The client should not wait for a reply + command. If the server could not complete the command it will raise an exception. + + + + + + A set of arguments for the consume. The syntax and semantics of these arguments depends on + the providers implementation. + + + + + + + + + This command provides the client with a consumer tag which it may use in commands that work + with the consumer. + + + + + + + Holds the consumer tag specified by the client or provided by the server. + + + + + + + + + This command cancels a consumer. Since message delivery is asynchronous the client may + continue to receive messages for a short while after cancelling a consumer. It may process + or discard these as appropriate. + + + + + + + + + + + + This command publishes a message to a specific exchange. The message will be routed to + queues as defined by the exchange configuration and distributed to any active consumers as + appropriate. + + + + + + + Specifies the name of the exchange to publish to. The exchange name can be empty, meaning + the default exchange. If the exchange name is specified, and that exchange does not exist, + the server will raise an exception. + + + + + The server MUST accept a blank exchange name to mean the default exchange. + + + + + + The exchange MAY refuse stream content in which case it MUST respond with an exception. + + + + + + + Specifies the routing key for the message. The routing key is used for routing messages + depending on the exchange configuration. + + + + + + This flag tells the server how to react if the message cannot be routed to a queue. If + this flag is set, the server will return an unroutable message with a Return command. If + this flag is zero, the server silently drops the message. + + + + + The server SHOULD implement the mandatory flag. + + + + + + + This flag tells the server how to react if the message cannot be routed to a queue + consumer immediately. If this flag is set, the server will return an undeliverable message + with a Return command. If this flag is zero, the server will queue the message, but with + no guarantee that it will ever be consumed. + + + + + The server SHOULD implement the immediate flag. + + + + + +
+ +
+ +
+
+ + + + + + This command returns an undeliverable message that was published with the "immediate" flag + set, or an unroutable message published with the "mandatory" flag set. The reply code and + text provide information about the reason that the message was undeliverable. + + + + + + + + + The localized reply text. This text can be logged as an aid to resolving issues. + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + + Specifies the routing key name specified when the message was published. + + + + +
+ +
+ +
+
+ + + + + + This command delivers a message to the client, via a consumer. In the asynchronous message + delivery model, the client starts a consumer using the Consume command, then the server + responds with Deliver commands as and when messages arrive for that consumer. + + + + + + + + + The server-assigned and session-specific delivery tag + + + + The delivery tag is valid only within the session from which the message was received. + i.e. A client MUST NOT receive a message on one session and then acknowledge it on + another. + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + + Specifies the name of the queue that the message came from. Note that a single session can + start many consumers on different queues. + + + + +
+ +
+ +
+
+ +
+ +
diff --git a/python/qpid/specs/amqp-0-10.dtd b/python/qpid/specs/amqp-0-10.dtd new file mode 100644 index 0000000000..2be198525a --- /dev/null +++ b/python/qpid/specs/amqp-0-10.dtd @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/python/qpid/specs/amqp-0-8.xml b/python/qpid/specs/amqp-0-8.xml new file mode 100644 index 0000000000..0463f45fa9 --- /dev/null +++ b/python/qpid/specs/amqp-0-8.xml @@ -0,0 +1,3998 @@ + + + + + + + + AMQ Protocol 0.80 + + + + + + + + + + + + + + Indicates that the method completed successfully. This reply code is + reserved for future use - the current protocol design does not use + positive confirmation and reply codes are sent only in case of an + error. + + + The client asked for a specific message that is no longer available. + The message was delivered to another client, or was purged from the + queue for some other reason. + + + The client attempted to transfer content larger than the server + could accept at the present time. The client may retry at a later + time. + + + An operator intervened to close the connection for some reason. + The client may retry at some later date. + + + The client tried to work with an unknown virtual host or cluster. + + + The client attempted to work with a server entity to which it has + no due to security settings. + + + The client attempted to work with a server entity that does not exist. + + + The client attempted to work with a server entity to which it has + no access because another client is working with it. + + + The client sent a malformed frame that the server could not decode. + This strongly implies a programming error in the client. + + + The client sent a frame that contained illegal values for one or more + fields. This strongly implies a programming error in the client. + + + The client sent an invalid sequence of frames, attempting to perform + an operation that was considered invalid by the server. This usually + implies a programming error in the client. + + + The client attempted to work with a channel that had not been + correctly opened. This most likely indicates a fault in the client + layer. + + + The server could not complete the method because it lacked sufficient + resources. This may be due to the client creating too many of some + type of entity. + + + The client tried to work with some entity in a manner that is + prohibited by the server, due to security settings or by some other + criteria. + + + The client tried to use functionality that is not implemented in the + server. + + + The server could not complete the method because of an internal error. + The server may require intervention by an operator in order to resume + normal operations. + + + + access ticket granted by server + + An access ticket granted by the server for a certain set of access + rights within a specific realm. Access tickets are valid within the + channel where they were created, and expire when the channel closes. + + + + + + consumer tag + + Identifier for the consumer, valid within the current connection. + + + The consumer tag is valid only within the channel from which the + consumer was created. I.e. a client MUST NOT create a consumer in + one channel and then use it in another. + + + + server-assigned delivery tag + + The server-assigned and channel-specific delivery tag + + + The delivery tag is valid only within the channel from which the + message was received. I.e. a client MUST NOT receive a message on + one channel and then acknowledge it on another. + + + The server MUST NOT use a zero value for delivery tags. Zero is + reserved for client use, meaning "all messages so far received". + + + + exchange name + + The exchange name is a client-selected string that identifies + the exchange for publish methods. Exchange names may consist + of any mixture of digits, letters, and underscores. Exchange + names are scoped by the virtual host. + + + + +list of known hosts + +Specifies the list of equivalent or alternative hosts that the server +knows about, which will normally include the current server itself. +Clients can cache this information and use it when reconnecting to a +server after a failure. + + +The server MAY leave this field empty if it knows of no other +hosts than itself. + + + + + no acknowledgement needed + + If this field is set the server does not expect acknowledgments + for messages. That is, when a message is delivered to the client + the server automatically and silently acknowledges it on behalf + of the client. This functionality increases performance but at + the cost of reliability. Messages can get lost if a client dies + before it can deliver them to the application. + + + + do not deliver own messages + + If the no-local field is set the server will not send messages to + the client that published them. + + + + + Must start with a slash "/" and continue with path names + separated by slashes. A path name consists of any combination + of at least one of [A-Za-z0-9] plus zero or more of [.-_+!=:]. + + + + + + + +This string provides a set of peer properties, used for +identification, debugging, and general information. + + +The properties SHOULD contain these fields: +"product", giving the name of the peer product, "version", giving +the name of the peer version, "platform", giving the name of the +operating system, "copyright", if appropriate, and "information", +giving other general information. + + + + queue name + + The queue name identifies the queue within the vhost. Queue + names may consist of any mixture of digits, letters, and + underscores. + + + + + message is being redelivered + + This indicates that the message has been previously delivered to + this or another client. + + + The server SHOULD try to signal redelivered messages when it can. + When redelivering a message that was not successfully acknowledged, + the server SHOULD deliver it to the original client if possible. + + + The client MUST NOT rely on the redelivered field but MUST take it + as a hint that the message may already have been processed. A + fully robust client must be able to track duplicate received messages + on non-transacted, and locally-transacted channels. + + + +reply code from server + + The reply code. The AMQ reply codes are defined in AMQ RFC 011. + + + + +localised reply text + + The localised reply text. This text can be logged as an aid to + resolving issues. + + + + + + work with socket connections + + The connection class provides methods for a client to establish a + network connection to a server, and for both peers to operate the + connection thereafter. + + + connection = open-connection *use-connection close-connection + open-connection = C:protocol-header + S:START C:START-OK + *challenge + S:TUNE C:TUNE-OK + C:OPEN S:OPEN-OK | S:REDIRECT + challenge = S:SECURE C:SECURE-OK + use-connection = *channel + close-connection = C:CLOSE S:CLOSE-OK + / S:CLOSE C:CLOSE-OK + + + + + + start connection negotiation + + This method starts the connection negotiation process by telling + the client the protocol version that the server proposes, along + with a list of security mechanisms which the client can use for + authentication. + + + If the client cannot handle the protocol version suggested by the + server it MUST close the socket connection. + + + The server MUST provide a protocol version that is lower than or + equal to that requested by the client in the protocol header. If + the server cannot support the specified protocol it MUST NOT send + this method, but MUST close the socket connection. + + + + + protocol major version + + The protocol major version that the server agrees to use, which + cannot be higher than the client's major version. + + + + protocol major version + + The protocol minor version that the server agrees to use, which + cannot be higher than the client's minor version. + + + + server properties + + + available security mechanisms + + A list of the security mechanisms that the server supports, delimited + by spaces. Currently ASL supports these mechanisms: PLAIN. + + + + + + available message locales + + A list of the message locales that the server supports, delimited + by spaces. The locale defines the language in which the server + will send reply texts. + + + All servers MUST support at least the en_US locale. + + + + + + select security mechanism and locale + + This method selects a SASL security mechanism. ASL uses SASL + (RFC2222) to negotiate authentication and encryption. + + + + client properties + + + selected security mechanism + + A single security mechanisms selected by the client, which must be + one of those specified by the server. + + + The client SHOULD authenticate using the highest-level security + profile it can handle from the list provided by the server. + + + The mechanism field MUST contain one of the security mechanisms + proposed by the server in the Start method. If it doesn't, the + server MUST close the socket. + + + + + security response data + + A block of opaque data passed to the security mechanism. The contents + of this data are defined by the SASL security mechanism. For the + PLAIN security mechanism this is defined as a field table holding + two fields, LOGIN and PASSWORD. + + + + + selected message locale + + A single message local selected by the client, which must be one + of those specified by the server. + + + + + + + security mechanism challenge + + The SASL protocol works by exchanging challenges and responses until + both peers have received sufficient information to authenticate each + other. This method challenges the client to provide more information. + + + + + security challenge data + + Challenge information, a block of opaque binary data passed to + the security mechanism. + + + + + + security mechanism response + + This method attempts to authenticate, passing a block of SASL data + for the security mechanism at the server side. + + + + security response data + + A block of opaque data passed to the security mechanism. The contents + of this data are defined by the SASL security mechanism. + + + + + + + propose connection tuning parameters + + This method proposes a set of connection configuration values + to the client. The client can accept and/or adjust these. + + + + + proposed maximum channels + + The maximum total number of channels that the server allows + per connection. Zero means that the server does not impose a + fixed limit, but the number of allowed channels may be limited + by available server resources. + + + + proposed maximum frame size + + The largest frame size that the server proposes for the + connection. The client can negotiate a lower value. Zero means + that the server does not impose any specific limit but may reject + very large frames if it cannot allocate resources for them. + + + Until the frame-max has been negotiated, both peers MUST accept + frames of up to 4096 octets large. The minimum non-zero value for + the frame-max field is 4096. + + + + desired heartbeat delay + + The delay, in seconds, of the connection heartbeat that the server + wants. Zero means the server does not want a heartbeat. + + + + + negotiate connection tuning parameters + + This method sends the client's connection tuning parameters to the + server. Certain fields are negotiated, others provide capability + information. + + + + negotiated maximum channels + + The maximum total number of channels that the client will use + per connection. May not be higher than the value specified by + the server. + + + The server MAY ignore the channel-max value or MAY use it for + tuning its resource allocation. + + + + + + negotiated maximum frame size + + The largest frame size that the client and server will use for + the connection. Zero means that the client does not impose any + specific limit but may reject very large frames if it cannot + allocate resources for them. Note that the frame-max limit + applies principally to content frames, where large contents + can be broken into frames of arbitrary size. + + + Until the frame-max has been negotiated, both peers must accept + frames of up to 4096 octets large. The minimum non-zero value for + the frame-max field is 4096. + + + + desired heartbeat delay + + The delay, in seconds, of the connection heartbeat that the client + wants. Zero means the client does not want a heartbeat. + + + + + + open connection to virtual host + + This method opens a connection to a virtual host, which is a + collection of resources, and acts to separate multiple application + domains within a server. + + + The client MUST open the context before doing any work on the + connection. + + + + + + virtual host name + + + The name of the virtual host to work with. + + + If the server supports multiple virtual hosts, it MUST enforce a + full separation of exchanges, queues, and all associated entities + per virtual host. An application, connected to a specific virtual + host, MUST NOT be able to access resources of another virtual host. + + + The server SHOULD verify that the client has permission to access + the specified virtual host. + + + The server MAY configure arbitrary limits per virtual host, such + as the number of each type of entity that may be used, per + connection and/or in total. + + + + required capabilities + + The client may specify a number of capability names, delimited by + spaces. The server can use this string to how to process the + client's connection request. + + + + insist on connecting to server + + In a configuration with multiple load-sharing servers, the server + may respond to a Connection.Open method with a Connection.Redirect. + The insist option tells the server that the client is insisting on + a connection to the specified server. + + + When the client uses the insist option, the server SHOULD accept + the client connection unless it is technically unable to do so. + + + + + signal that the connection is ready + + This method signals to the client that the connection is ready for + use. + + + + + + asks the client to use a different server + + This method redirects the client to another server, based on the + requested virtual host and/or capabilities. + + + When getting the Connection.Redirect method, the client SHOULD + reconnect to the host specified, and if that host is not present, + to any of the hosts specified in the known-hosts list. + + + + server to connect to + + Specifies the server to connect to. This is an IP address or a + DNS name, optionally followed by a colon and a port number. If + no port number is specified, the client should use the default + port number for the protocol. + + + + + + + + request a connection close + + This method indicates that the sender wants to close the connection. + This may be due to internal conditions (e.g. a forced shut-down) or + due to an error handling a specific method, i.e. an exception. When + a close is due to an exception, the sender provides the class and + method id of the method which caused the exception. + + + After sending this method any received method except the Close-OK + method MUST be discarded. + + + The peer sending this method MAY use a counter or timeout to + detect failure of the other peer to respond correctly with + the Close-OK method. + + + When a server receives the Close method from a client it MUST + delete all server-side resources associated with the client's + context. A client CANNOT reconnect to a context after sending + or receiving a Close method. + + + + + + + + failing method class + + When the close is provoked by a method exception, this is the + class of the method. + + + + failing method ID + + When the close is provoked by a method exception, this is the + ID of the method. + + + + + confirm a connection close + + This method confirms a Connection.Close method and tells the + recipient that it is safe to release resources for the connection + and close the socket. + + + A peer that detects a socket closure without having received a + Close-Ok handshake method SHOULD log the error. + + + + + + + + work with channels + + The channel class provides methods for a client to establish a virtual + connection - a channel - to a server and for both peers to operate the + virtual connection thereafter. + + + channel = open-channel *use-channel close-channel + open-channel = C:OPEN S:OPEN-OK + use-channel = C:FLOW S:FLOW-OK + / S:FLOW C:FLOW-OK + / S:ALERT + / functional-class + close-channel = C:CLOSE S:CLOSE-OK + / S:CLOSE C:CLOSE-OK + + + + + + open a channel for use + + This method opens a virtual connection (a channel). + + + This method MUST NOT be called when the channel is already open. + + + + + out-of-band settings + + Configures out-of-band transfers on this channel. The syntax and + meaning of this field will be formally defined at a later date. + + + + + + signal that the channel is ready + + This method signals to the client that the channel is ready for use. + + + + + + enable/disable flow from peer + + This method asks the peer to pause or restart the flow of content + data. This is a simple flow-control mechanism that a peer can use + to avoid oveflowing its queues or otherwise finding itself receiving + more messages than it can process. Note that this method is not + intended for window control. The peer that receives a request to + stop sending content should finish sending the current content, if + any, and then wait until it receives a Flow restart method. + + + When a new channel is opened, it is active. Some applications + assume that channels are inactive until started. To emulate this + behaviour a client MAY open the channel, then pause it. + + + When sending content data in multiple frames, a peer SHOULD monitor + the channel for incoming methods and respond to a Channel.Flow as + rapidly as possible. + + + A peer MAY use the Channel.Flow method to throttle incoming content + data for internal reasons, for example, when exchangeing data over a + slower connection. + + + The peer that requests a Channel.Flow method MAY disconnect and/or + ban a peer that does not respect the request. + + + + + + start/stop content frames + + If 1, the peer starts sending content frames. If 0, the peer + stops sending content frames. + + + + + confirm a flow method + + Confirms to the peer that a flow command was received and processed. + + + + + current flow setting + + Confirms the setting of the processed flow method: 1 means the + peer will start sending or continue to send content frames; 0 + means it will not. + + + + + + send a non-fatal warning message + + This method allows the server to send a non-fatal warning to the + client. This is used for methods that are normally asynchronous + and thus do not have confirmations, and for which the server may + detect errors that need to be reported. Fatal errors are handled + as channel or connection exceptions; non-fatal errors are sent + through this method. + + + + + + detailed information for warning + + A set of fields that provide more information about the + problem. The meaning of these fields are defined on a + per-reply-code basis (TO BE DEFINED). + + + + + + request a channel close + + This method indicates that the sender wants to close the channel. + This may be due to internal conditions (e.g. a forced shut-down) or + due to an error handling a specific method, i.e. an exception. When + a close is due to an exception, the sender provides the class and + method id of the method which caused the exception. + + + After sending this method any received method except + Channel.Close-OK MUST be discarded. + + + The peer sending this method MAY use a counter or timeout to detect + failure of the other peer to respond correctly with Channel.Close-OK.. + + + + + + + + failing method class + + When the close is provoked by a method exception, this is the + class of the method. + + + + failing method ID + + When the close is provoked by a method exception, this is the + ID of the method. + + + + + confirm a channel close + + This method confirms a Channel.Close method and tells the recipient + that it is safe to release resources for the channel and close the + socket. + + + A peer that detects a socket closure without having received a + Channel.Close-Ok handshake method SHOULD log the error. + + + + + + + + work with access tickets + + The protocol control access to server resources using access tickets. + A client must explicitly request access tickets before doing work. + An access ticket grants a client the right to use a specific set of + resources - called a "realm" - in specific ways. + + + access = C:REQUEST S:REQUEST-OK + + + + + + request an access ticket + + This method requests an access ticket for an access realm. + The server responds by granting the access ticket. If the + client does not have access rights to the requested realm + this causes a connection exception. Access tickets are a + per-channel resource. + + + The realm name MUST start with either "/data" (for application + resources) or "/admin" (for server administration resources). + If the realm starts with any other path, the server MUST raise + a connection exception with reply code 403 (access refused). + + + The server MUST implement the /data realm and MAY implement the + /admin realm. The mapping of resources to realms is not + defined in the protocol - this is a server-side configuration + issue. + + + + + name of requested realm + + If the specified realm is not known to the server, the server + must raise a channel exception with reply code 402 (invalid + path). + + + + request exclusive access + + Request exclusive access to the realm. If the server cannot grant + this - because there are other active tickets for the realm - it + raises a channel exception. + + + + request passive access + + Request message passive access to the specified access realm. + Passive access lets a client get information about resources in + the realm but not to make any changes to them. + + + + request active access + + Request message active access to the specified access realm. + Acvtive access lets a client get create and delete resources in + the realm. + + + + request write access + + Request write access to the specified access realm. Write access + lets a client publish messages to all exchanges in the realm. + + + + request read access + + Request read access to the specified access realm. Read access + lets a client consume messages from queues in the realm. + + + + + grant access to server resources + + This method provides the client with an access ticket. The access + ticket is valid within the current channel and for the lifespan of + the channel. + + + The client MUST NOT use access tickets except within the same + channel as originally granted. + + + The server MUST isolate access tickets per channel and treat an + attempt by a client to mix these as a connection exception. + + + + + + + + work with exchanges + + Exchanges match and distribute messages across queues. Exchanges can be + configured in the server or created at runtime. + + + exchange = C:DECLARE S:DECLARE-OK + / C:DELETE S:DELETE-OK + + + + + amq_exchange_19 + The server MUST implement the direct and fanout exchange types, and + predeclare the corresponding exchanges named amq.direct and amq.fanout + in each virtual host. The server MUST also predeclare a direct + exchange to act as the default exchange for content Publish methods + and for default queue bindings. + + + amq_exchange_20 + The server SHOULD implement the topic exchange type, and predeclare + the corresponding exchange named amq.topic in each virtual host. + + + amq_exchange_21 + The server MAY implement the system exchange type, and predeclare the + corresponding exchanges named amq.system in each virtual host. If the + client attempts to bind a queue to the system exchange, the server + MUST raise a connection exception with reply code 507 (not allowed). + + + amq_exchange_22 + The default exchange MUST be defined as internal, and be inaccessible + to the client except by specifying an empty exchange name in a content + Publish method. That is, the server MUST NOT let clients make explicit + bindings to this exchange. + + + + declare exchange, create if needed + + This method creates an exchange if it does not already exist, and if the + exchange exists, verifies that it is of the correct and expected class. + + + amq_exchange_23 + The server SHOULD support a minimum of 16 exchanges per virtual host + and ideally, impose no limit except as defined by available resources. + + + + + + When a client defines a new exchange, this belongs to the access realm + of the ticket used. All further work done with that exchange must be + done with an access ticket for the same realm. + + + The client MUST provide a valid access ticket giving "active" access + to the realm in which the exchange exists or will be created, or + "passive" access if the if-exists flag is set. + + + + + amq_exchange_15 + Exchange names starting with "amq." are reserved for predeclared + and standardised exchanges. If the client attempts to create an + exchange starting with "amq.", the server MUST raise a channel + exception with reply code 403 (access refused). + + + + + exchange type + + Each exchange belongs to one of a set of exchange types implemented + by the server. The exchange types define the functionality of the + exchange - i.e. how messages are routed through it. It is not valid + or meaningful to attempt to change the type of an existing exchange. + + + amq_exchange_16 + If the exchange already exists with a different type, the server + MUST raise a connection exception with a reply code 507 (not allowed). + + + amq_exchange_18 + If the server does not support the requested exchange type it MUST + raise a connection exception with a reply code 503 (command invalid). + + + + + do not create exchange + + If set, the server will not create the exchange. The client can use + this to check whether an exchange exists without modifying the server + state. + + + amq_exchange_05 + If set, and the exchange does not already exist, the server MUST + raise a channel exception with reply code 404 (not found). + + + + request a durable exchange + + If set when creating a new exchange, the exchange will be marked as + durable. Durable exchanges remain active when a server restarts. + Non-durable exchanges (transient exchanges) are purged if/when a + server restarts. + + + amq_exchange_24 + The server MUST support both durable and transient exchanges. + + + The server MUST ignore the durable field if the exchange already + exists. + + + + auto-delete when unused + + If set, the exchange is deleted when all queues have finished + using it. + + + amq_exchange_02 + The server SHOULD allow for a reasonable delay between the point + when it determines that an exchange is not being used (or no longer + used), and the point when it deletes the exchange. At the least it + must allow a client to create an exchange and then bind a queue to + it, with a small but non-zero delay between these two actions. + + + amq_exchange_25 + The server MUST ignore the auto-delete field if the exchange already + exists. + + + + create internal exchange + + If set, the exchange may not be used directly by publishers, but + only when bound to other exchanges. Internal exchanges are used to + construct wiring that is not visible to applications. + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + arguments for declaration + + A set of arguments for the declaration. The syntax and semantics + of these arguments depends on the server implementation. This + field is ignored if passive is 1. + + + + + confirms an exchange declaration + + This method confirms a Declare method and confirms the name of the + exchange, essential for automatically-named exchanges. + + + + + + delete an exchange + + This method deletes an exchange. When an exchange is deleted all queue + bindings on the exchange are cancelled. + + + + + + The client MUST provide a valid access ticket giving "active" + access rights to the exchange's access realm. + + + + + amq_exchange_11 + The exchange MUST exist. Attempting to delete a non-existing exchange + causes a channel exception. + + + + + delete only if unused + + If set, the server will only delete the exchange if it has no queue + bindings. If the exchange has queue bindings the server does not + delete it but raises a channel exception instead. + + + amq_exchange_12 + If set, the server SHOULD delete the exchange but only if it has + no queue bindings. + + + amq_exchange_13 + If set, the server SHOULD raise a channel exception if the exchange is in + use. + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + confirm deletion of an exchange + + This method confirms the deletion of an exchange. + + + + + + + + + Message routing key + + Specifies the routing key for the message. The routing key is + used for routing messages depending on the exchange configuration. + + + + + + + + + + + + + + + + + work with queues + + + Queues store and forward messages. Queues can be configured in the server + or created at runtime. Queues must be attached to at least one exchange + in order to receive messages from publishers. + + + queue = C:DECLARE S:DECLARE-OK + / C:BIND S:BIND-OK + / C:PURGE S:PURGE-OK + / C:DELETE S:DELETE-OK + + + + + amq_queue_33 + A server MUST allow any content class to be sent to any queue, in any + mix, and queue and delivery these content classes independently. Note + that all methods that fetch content off queues are specific to a given + content class. + + + + declare queue, create if needed + + This method creates or checks a queue. When creating a new queue + the client can specify various properties that control the durability + of the queue and its contents, and the level of sharing for the queue. + + + amq_queue_34 + The server MUST create a default binding for a newly-created queue + to the default exchange, which is an exchange of type 'direct'. + + + amq_queue_35 + The server SHOULD support a minimum of 256 queues per virtual host + and ideally, impose no limit except as defined by available resources. + + + + + + When a client defines a new queue, this belongs to the access realm + of the ticket used. All further work done with that queue must be + done with an access ticket for the same realm. + + + The client provides a valid access ticket giving "active" access + to the realm in which the queue exists or will be created, or + "passive" access if the if-exists flag is set. + + + + + amq_queue_10 + The queue name MAY be empty, in which case the server MUST create + a new queue with a unique generated name and return this to the + client in the Declare-Ok method. + + + amq_queue_32 + Queue names starting with "amq." are reserved for predeclared and + standardised server queues. If the queue name starts with "amq." + and the passive option is zero, the server MUST raise a connection + exception with reply code 403 (access refused). + + + + + do not create queue + + If set, the server will not create the queue. The client can use + this to check whether a queue exists without modifying the server + state. + + + amq_queue_05 + If set, and the queue does not already exist, the server MUST + respond with a reply code 404 (not found) and raise a channel + exception. + + + + request a durable queue + + If set when creating a new queue, the queue will be marked as + durable. Durable queues remain active when a server restarts. + Non-durable queues (transient queues) are purged if/when a + server restarts. Note that durable queues do not necessarily + hold persistent messages, although it does not make sense to + send persistent messages to a transient queue. + + + amq_queue_03 + The server MUST recreate the durable queue after a restart. + + + amq_queue_36 + The server MUST support both durable and transient queues. + + + amq_queue_37 + The server MUST ignore the durable field if the queue already + exists. + + + + request an exclusive queue + + Exclusive queues may only be consumed from by the current connection. + Setting the 'exclusive' flag always implies 'auto-delete'. + + + amq_queue_38 + The server MUST support both exclusive (private) and non-exclusive + (shared) queues. + + + amq_queue_04 + The server MUST raise a channel exception if 'exclusive' is specified + and the queue already exists and is owned by a different connection. + + + + auto-delete queue when unused + + If set, the queue is deleted when all consumers have finished + using it. Last consumer can be cancelled either explicitly or because + its channel is closed. If there was no consumer ever on the queue, it + won't be deleted. + + + amq_queue_02 + The server SHOULD allow for a reasonable delay between the point + when it determines that a queue is not being used (or no longer + used), and the point when it deletes the queue. At the least it + must allow a client to create a queue and then create a consumer + to read from it, with a small but non-zero delay between these + two actions. The server should equally allow for clients that may + be disconnected prematurely, and wish to re-consume from the same + queue without losing messages. We would recommend a configurable + timeout, with a suitable default value being one minute. + + + amq_queue_31 + The server MUST ignore the auto-delete field if the queue already + exists. + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + arguments for declaration + + A set of arguments for the declaration. The syntax and semantics + of these arguments depends on the server implementation. This + field is ignored if passive is 1. + + + + + confirms a queue definition + + This method confirms a Declare method and confirms the name of the + queue, essential for automatically-named queues. + + + + + Reports the name of the queue. If the server generated a queue + name, this field contains that name. + + + + + number of messages in queue + + Reports the number of messages in the queue, which will be zero + for newly-created queues. + + + + number of consumers + + Reports the number of active consumers for the queue. Note that + consumers can suspend activity (Channel.Flow) in which case they + do not appear in this count. + + + + + + bind queue to an exchange + + This method binds a queue to an exchange. Until a queue is + bound it will not receive any messages. In a classic messaging + model, store-and-forward queues are bound to a dest exchange + and subscription queues are bound to a dest_wild exchange. + + + amq_queue_25 + A server MUST allow ignore duplicate bindings - that is, two or + more bind methods for a specific queue, with identical arguments + - without treating these as an error. + + + amq_queue_39 + If a bind fails, the server MUST raise a connection exception. + + + amq_queue_12 + The server MUST NOT allow a durable queue to bind to a transient + exchange. If the client attempts this the server MUST raise a + channel exception. + + + amq_queue_13 + Bindings for durable queues are automatically durable and the + server SHOULD restore such bindings after a server restart. + + + amq_queue_17 + If the client attempts to an exchange that was declared as internal, + the server MUST raise a connection exception with reply code 530 + (not allowed). + + + amq_queue_40 + The server SHOULD support at least 4 bindings per queue, and + ideally, impose no limit except as defined by available resources. + + + + + + The client provides a valid access ticket giving "active" + access rights to the queue's access realm. + + + + + + Specifies the name of the queue to bind. If the queue name is + empty, refers to the current queue for the channel, which is + the last declared queue. + + + If the client did not previously declare a queue, and the queue + name in this method is empty, the server MUST raise a connection + exception with reply code 530 (not allowed). + + + If the queue does not exist the server MUST raise a channel exception + with reply code 404 (not found). + + + + + The name of the exchange to bind to. + + amq_queue_14 + If the exchange does not exist the server MUST raise a channel + exception with reply code 404 (not found). + + + + message routing key + + Specifies the routing key for the binding. The routing key is + used for routing messages depending on the exchange configuration. + Not all exchanges use a routing key - refer to the specific + exchange documentation. If the routing key is empty and the queue + name is empty, the routing key will be the current queue for the + channel, which is the last declared queue. + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + arguments for binding + + A set of arguments for the binding. The syntax and semantics of + these arguments depends on the exchange class. + + + + + confirm bind successful + + This method confirms that the bind was successful. + + + + + + purge a queue + + This method removes all messages from a queue. It does not cancel + consumers. Purged messages are deleted without any formal "undo" + mechanism. + + + amq_queue_15 + A call to purge MUST result in an empty queue. + + + amq_queue_41 + On transacted channels the server MUST not purge messages that have + already been sent to a client but not yet acknowledged. + + + amq_queue_42 + The server MAY implement a purge queue or log that allows system + administrators to recover accidentally-purged messages. The server + SHOULD NOT keep purged messages in the same storage spaces as the + live messages since the volumes of purged messages may get very + large. + + + + + + The access ticket must be for the access realm that holds the + queue. + + + The client MUST provide a valid access ticket giving "read" access + rights to the queue's access realm. Note that purging a queue is + equivalent to reading all messages and discarding them. + + + + + Specifies the name of the queue to purge. If the queue name is + empty, refers to the current queue for the channel, which is + the last declared queue. + + + If the client did not previously declare a queue, and the queue + name in this method is empty, the server MUST raise a connection + exception with reply code 530 (not allowed). + + + The queue must exist. Attempting to purge a non-existing queue + causes a channel exception. + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + confirms a queue purge + + This method confirms the purge of a queue. + + + + number of messages purged + + Reports the number of messages purged. + + + + + + delete a queue + + This method deletes a queue. When a queue is deleted any pending + messages are sent to a dead-letter queue if this is defined in the + server configuration, and all consumers on the queue are cancelled. + + + amq_queue_43 + The server SHOULD use a dead-letter queue to hold messages that + were pending on a deleted queue, and MAY provide facilities for + a system administrator to move these messages back to an active + queue. + + + + + + The client provides a valid access ticket giving "active" + access rights to the queue's access realm. + + + + + + Specifies the name of the queue to delete. If the queue name is + empty, refers to the current queue for the channel, which is the + last declared queue. + + + If the client did not previously declare a queue, and the queue + name in this method is empty, the server MUST raise a connection + exception with reply code 530 (not allowed). + + + The queue must exist. Attempting to delete a non-existing queue + causes a channel exception. + + + + + delete only if unused + + If set, the server will only delete the queue if it has no + consumers. If the queue has consumers the server does does not + delete it but raises a channel exception instead. + + + amq_queue_29 + amq_queue_30 + The server MUST respect the if-unused flag when deleting a queue. + + + + delete only if empty + amq_queue_27 + + If set, the server will only delete the queue if it has no + messages. If the queue is not empty the server raises a channel + exception. + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + confirm deletion of a queue + + This method confirms the deletion of a queue. + + + + number of messages purged + + Reports the number of messages purged. + + + + + + + work with basic content + + The Basic class provides methods that support an industry-standard + messaging model. + + + + basic = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL S:CANCEL-OK + / C:PUBLISH content + / S:RETURN content + / S:DELIVER content + / C:GET ( S:GET-OK content / S:GET-EMPTY ) + / C:ACK + / C:REJECT + + + + + + + The server SHOULD respect the persistent property of basic messages + and SHOULD make a best-effort to hold persistent basic messages on a + reliable storage mechanism. + + + The server MUST NOT discard a persistent basic message in case of a + queue overflow. The server MAY use the Channel.Flow method to slow + or stop a basic message publisher when necessary. + + + The server MAY overflow non-persistent basic messages to persistent + storage and MAY discard or dead-letter non-persistent basic messages + on a priority basis if the queue size exceeds some configured limit. + + + The server MUST implement at least 2 priority levels for basic + messages, where priorities 0-4 and 5-9 are treated as two distinct + levels. The server MAY implement up to 10 priority levels. + + + The server MUST deliver messages of the same priority in order + irrespective of their individual persistence. + + + The server MUST support both automatic and explicit acknowledgements + on Basic content. + + + + + + MIME content type + + + MIME content encoding + + + Message header field table + + + Non-persistent (1) or persistent (2) + + + The message priority, 0 to 9 + + + The application correlation identifier + + + The destination to reply to + + + Message expiration specification + + + The application message identifier + + + The message timestamp + + + The message type name + + + The creating user id + + + The creating application id + + + Intra-cluster routing identifier + + + + + + + specify quality of service + + This method requests a specific quality of service. The QoS can + be specified for the current channel or for all channels on the + connection. The particular properties and semantics of a qos method + always depend on the content class semantics. Though the qos method + could in principle apply to both peers, it is currently meaningful + only for the server. + + + + + + prefetch window in octets + + The client can request that messages be sent in advance so that + when the client finishes processing a message, the following + message is already held locally, rather than needing to be sent + down the channel. Prefetching gives a performance improvement. + This field specifies the prefetch window size in octets. The + server will send a message in advance if it is equal to or + smaller in size than the available prefetch size (and also falls + into other prefetch limits). May be set to zero, meaning "no + specific limit", although other prefetch limits may still apply. + The prefetch-size is ignored if the no-ack option is set. + + + The server MUST ignore this setting when the client is not + processing any messages - i.e. the prefetch size does not limit + the transfer of single messages to a client, only the sending in + advance of more messages while the client still has one or more + unacknowledged messages. + + + + + prefetch window in messages + + Specifies a prefetch window in terms of whole messages. This + field may be used in combination with the prefetch-size field; + a message will only be sent in advance if both prefetch windows + (and those at the channel and connection level) allow it. + The prefetch-count is ignored if the no-ack option is set. + + + The server MAY send less data in advance than allowed by the + client's specified prefetch windows but it MUST NOT send more. + + + + + apply to entire connection + + By default the QoS settings apply to the current channel only. If + this field is set, they are applied to the entire connection. + + + + + + confirm the requested qos + + This method tells the client that the requested QoS levels could + be handled by the server. The requested QoS applies to all active + consumers until a new QoS is defined. + + + + + + + + start a queue consumer + + This method asks the server to start a "consumer", which is a + transient request for messages from a specific queue. Consumers + last as long as the channel they were created on, or until the + client cancels them. + + + The server SHOULD support at least 16 consumers per queue, unless + the queue was declared as private, and ideally, impose no limit + except as defined by available resources. + + + + + + + The client MUST provide a valid access ticket giving "read" access + rights to the realm for the queue. + + + + + + Specifies the name of the queue to consume from. If the queue name + is null, refers to the current queue for the channel, which is the + last declared queue. + + + If the client did not previously declare a queue, and the queue name + in this method is empty, the server MUST raise a connection exception + with reply code 530 (not allowed). + + + + + + Specifies the identifier for the consumer. The consumer tag is + local to a connection, so two clients can use the same consumer + tags. If this field is empty the server will generate a unique + tag. + + + The tag MUST NOT refer to an existing consumer. If the client + attempts to create two consumers with the same non-empty tag + the server MUST raise a connection exception with reply code + 530 (not allowed). + + + + + + + + + request exclusive access + + Request exclusive consumer access, meaning only this consumer can + access the queue. + + + If the server cannot grant exclusive access to the queue when asked, + - because there are other consumers active - it MUST raise a channel + exception with return code 403 (access refused). + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + A set of arguments for the consume. The syntax and semantics + of these arguments depends on the server implementation. This + field is ignored if passive is 1. + + + + + + confirm a new consumer + + The server provides the client with a consumer tag, which is used + by the client for methods called on the consumer at a later stage. + + + + + + Holds the consumer tag specified by the client or provided by + the server. + + + + + + + + + end a queue consumer + + This method cancels a consumer. This does not affect already + delivered messages, but it does mean the server will not send any + more messages for that consumer. The client may receive an + abitrary number of messages in between sending the cancel method + and receiving the cancel-ok reply. + + + If the queue no longer exists when the client sends a cancel command, + or the consumer has been cancelled for other reasons, this command + has no effect. + + + + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + confirm a cancelled consumer + + This method confirms that the cancellation was completed. + + + + + + + + + + + publish a message + + This method publishes a message to a specific exchange. The message + will be routed to queues as defined by the exchange configuration + and distributed to any active consumers when the transaction, if any, + is committed. + + + + + + The client MUST provide a valid access ticket giving "write" + access rights to the access realm for the exchange. + + + + + + Specifies the name of the exchange to publish to. The exchange + name can be empty, meaning the default exchange. If the exchange + name is specified, and that exchange does not exist, the server + will raise a channel exception. + + + The server MUST accept a blank exchange name to mean the default + exchange. + + + If the exchange was declared as an internal exchange, the server + MUST raise a channel exception with a reply code 403 (access + refused). + + + The exchange MAY refuse basic content in which case it MUST raise + a channel exception with reply code 540 (not implemented). + + + + + Message routing key + + Specifies the routing key for the message. The routing key is + used for routing messages depending on the exchange configuration. + + + + + indicate mandatory routing + + This flag tells the server how to react if the message cannot be + routed to a queue. If this flag is set, the server will return an + unroutable message with a Return method. If this flag is zero, the + server silently drops the message. + + + The server SHOULD implement the mandatory flag. + + + + + request immediate delivery + + This flag tells the server how to react if the message cannot be + routed to a queue consumer immediately. If this flag is set, the + server will return an undeliverable message with a Return method. + If this flag is zero, the server will queue the message, but with + no guarantee that it will ever be consumed. + + + The server SHOULD implement the immediate flag. + + + + + + return a failed message + + This method returns an undeliverable message that was published + with the "immediate" flag set, or an unroutable message published + with the "mandatory" flag set. The reply code and text provide + information about the reason that the message was undeliverable. + + + + + + + + + Specifies the name of the exchange that the message was + originally published to. + + + + + Message routing key + + Specifies the routing key name specified when the message was + published. + + + + + + + + + notify the client of a consumer message + + This method delivers a message to the client, via a consumer. In + the asynchronous message delivery model, the client starts a + consumer using the Consume method, then the server responds with + Deliver methods as and when messages arrive for that consumer. + + + The server SHOULD track the number of times a message has been + delivered to clients and when a message is redelivered a certain + number of times - e.g. 5 times - without being acknowledged, the + server SHOULD consider the message to be unprocessable (possibly + causing client applications to abort), and move the message to a + dead letter queue. + + + + + + + + + + + + Specifies the name of the exchange that the message was + originally published to. + + + + + Message routing key + + Specifies the routing key name specified when the message was + published. + + + + + + + + + direct access to a queue + + This method provides a direct access to the messages in a queue + using a synchronous dialogue that is designed for specific types of + application where synchronous functionality is more important than + performance. + + + + + + + + The client MUST provide a valid access ticket giving "read" + access rights to the realm for the queue. + + + + + + Specifies the name of the queue to consume from. If the queue name + is null, refers to the current queue for the channel, which is the + last declared queue. + + + If the client did not previously declare a queue, and the queue name + in this method is empty, the server MUST raise a connection exception + with reply code 530 (not allowed). + + + + + + + + provide client with a message + + This method delivers a message to the client following a get + method. A message delivered by 'get-ok' must be acknowledged + unless the no-ack option was set in the get method. + + + + + + + + + + Specifies the name of the exchange that the message was originally + published to. If empty, the message was published to the default + exchange. + + + + + Message routing key + + Specifies the routing key name specified when the message was + published. + + + + + number of messages pending + + This field reports the number of messages pending on the queue, + excluding the message being delivered. Note that this figure is + indicative, not reliable, and can change arbitrarily as messages + are added to the queue and removed by other clients. + + + + + + + indicate no messages available + + This method tells the client that the queue has no messages + available for the client. + + + + + Cluster id + + For use by cluster applications, should not be used by + client applications. + + + + + + + + acknowledge one or more messages + + This method acknowledges one or more messages delivered via the + Deliver or Get-Ok methods. The client can ask to confirm a + single message or a set of messages up to and including a specific + message. + + + + + + acknowledge multiple messages + + If set to 1, the delivery tag is treated as "up to and including", + so that the client can acknowledge multiple messages with a single + method. If set to zero, the delivery tag refers to a single + message. If the multiple field is 1, and the delivery tag is zero, + tells the server to acknowledge all outstanding mesages. + + + The server MUST validate that a non-zero delivery-tag refers to an + delivered message, and raise a channel exception if this is not the + case. + + + + + + + + reject an incoming message + + This method allows a client to reject a message. It can be used to + interrupt and cancel large incoming messages, or return untreatable + messages to their original queue. + + + The server SHOULD be capable of accepting and process the Reject + method while sending message content with a Deliver or Get-Ok + method. I.e. the server should read and process incoming methods + while sending output frames. To cancel a partially-send content, + the server sends a content body frame of size 1 (i.e. with no data + except the frame-end octet). + + + The server SHOULD interpret this method as meaning that the client + is unable to process the message at this time. + + + A client MUST NOT use this method as a means of selecting messages + to process. A rejected message MAY be discarded or dead-lettered, + not necessarily passed to another client. + + + + + + + requeue the message + + If this field is zero, the message will be discarded. If this bit + is 1, the server will attempt to requeue the message. + + + The server MUST NOT deliver the message to the same client within + the context of the current channel. The recommended strategy is + to attempt to deliver the message to an alternative consumer, and + if that is not possible, to move the message to a dead-letter + queue. The server MAY use more sophisticated tracking to hold + the message on the queue and redeliver it to the same client at + a later stage. + + + + + + redeliver unacknowledged messages + + This method asks the broker to redeliver all unacknowledged messages on a + specified channel. Zero or more messages may be redelivered. This method + is only allowed on non-transacted channels. + + + + + requeue the message + + If this field is zero, the message will be redelivered to the original + recipient. If this bit is 1, the server will attempt to requeue the + message, potentially then delivering it to an alternative subscriber. + + + + The server MUST set the redelivered flag on all messages that are resent. + + + The server MUST raise a channel exception if this is called on a + transacted channel. + + + + + confirm a successful recover + + This method confirms to the client that the recover succeeded. + Note that if an recover fails, the server raises a channel exception. + + + + + + + + + + work with file content + + The file class provides methods that support reliable file transfer. + File messages have a specific set of properties that are required for + interoperability with file transfer applications. File messages and + acknowledgements are subject to channel transactions. Note that the + file class does not provide message browsing methods; these are not + compatible with the staging model. Applications that need browsable + file transfer should use Basic content and the Basic class. + + + + file = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL S:CANCEL-OK + / C:OPEN S:OPEN-OK C:STAGE content + / S:OPEN C:OPEN-OK S:STAGE content + / C:PUBLISH + / S:DELIVER + / S:RETURN + / C:ACK + / C:REJECT + + + + + + + The server MUST make a best-effort to hold file messages on a + reliable storage mechanism. + + + The server MUST NOT discard a file message in case of a queue + overflow. The server MUST use the Channel.Flow method to slow or stop + a file message publisher when necessary. + + + The server MUST implement at least 2 priority levels for file + messages, where priorities 0-4 and 5-9 are treated as two distinct + levels. The server MAY implement up to 10 priority levels. + + + The server MUST support both automatic and explicit acknowledgements + on file content. + + + + + + MIME content type + + + MIME content encoding + + + Message header field table + + + The message priority, 0 to 9 + + + The destination to reply to + + + The application message identifier + + + The message filename + + + The message timestamp + + + Intra-cluster routing identifier + + + + + + + specify quality of service + + This method requests a specific quality of service. The QoS can + be specified for the current channel or for all channels on the + connection. The particular properties and semantics of a qos method + always depend on the content class semantics. Though the qos method + could in principle apply to both peers, it is currently meaningful + only for the server. + + + + + + prefetch window in octets + + The client can request that messages be sent in advance so that + when the client finishes processing a message, the following + message is already held locally, rather than needing to be sent + down the channel. Prefetching gives a performance improvement. + This field specifies the prefetch window size in octets. May be + set to zero, meaning "no specific limit". Note that other + prefetch limits may still apply. The prefetch-size is ignored + if the no-ack option is set. + + + + + prefetch window in messages + + Specifies a prefetch window in terms of whole messages. This + is compatible with some file API implementations. This field + may be used in combination with the prefetch-size field; a + message will only be sent in advance if both prefetch windows + (and those at the channel and connection level) allow it. + The prefetch-count is ignored if the no-ack option is set. + + + The server MAY send less data in advance than allowed by the + client's specified prefetch windows but it MUST NOT send more. + + + + + apply to entire connection + + By default the QoS settings apply to the current channel only. If + this field is set, they are applied to the entire connection. + + + + + + confirm the requested qos + + This method tells the client that the requested QoS levels could + be handled by the server. The requested QoS applies to all active + consumers until a new QoS is defined. + + + + + + + + start a queue consumer + + This method asks the server to start a "consumer", which is a + transient request for messages from a specific queue. Consumers + last as long as the channel they were created on, or until the + client cancels them. + + + The server SHOULD support at least 16 consumers per queue, unless + the queue was declared as private, and ideally, impose no limit + except as defined by available resources. + + + + + + + The client MUST provide a valid access ticket giving "read" access + rights to the realm for the queue. + + + + + + Specifies the name of the queue to consume from. If the queue name + is null, refers to the current queue for the channel, which is the + last declared queue. + + + If the client did not previously declare a queue, and the queue name + in this method is empty, the server MUST raise a connection exception + with reply code 530 (not allowed). + + + + + + Specifies the identifier for the consumer. The consumer tag is + local to a connection, so two clients can use the same consumer + tags. If this field is empty the server will generate a unique + tag. + + + The tag MUST NOT refer to an existing consumer. If the client + attempts to create two consumers with the same non-empty tag + the server MUST raise a connection exception with reply code + 530 (not allowed). + + + + + + + + + request exclusive access + + Request exclusive consumer access, meaning only this consumer can + access the queue. + + + If the server cannot grant exclusive access to the queue when asked, + - because there are other consumers active - it MUST raise a channel + exception with return code 405 (resource locked). + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + confirm a new consumer + + This method provides the client with a consumer tag which it MUST + use in methods that work with the consumer. + + + + + + Holds the consumer tag specified by the client or provided by + the server. + + + + + + + + + end a queue consumer + + This method cancels a consumer. This does not affect already + delivered messages, but it does mean the server will not send any + more messages for that consumer. + + + + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + confirm a cancelled consumer + + This method confirms that the cancellation was completed. + + + + + + + + + + + request to start staging + + This method requests permission to start staging a message. Staging + means sending the message into a temporary area at the recipient end + and then delivering the message by referring to this temporary area. + Staging is how the protocol handles partial file transfers - if a + message is partially staged and the connection breaks, the next time + the sender starts to stage it, it can restart from where it left off. + + + + + + + staging identifier + + This is the staging identifier. This is an arbitrary string chosen + by the sender. For staging to work correctly the sender must use + the same staging identifier when staging the same message a second + time after recovery from a failure. A good choice for the staging + identifier would be the SHA1 hash of the message properties data + (including the original filename, revised time, etc.). + + + + + message content size + + The size of the content in octets. The recipient may use this + information to allocate or check available space in advance, to + avoid "disk full" errors during staging of very large messages. + + + The sender MUST accurately fill the content-size field. + Zero-length content is permitted. + + + + + + confirm staging ready + + This method confirms that the recipient is ready to accept staged + data. If the message was already partially-staged at a previous + time the recipient will report the number of octets already staged. + + + + + + + already staged amount + + The amount of previously-staged content in octets. For a new + message this will be zero. + + + The sender MUST start sending data from this octet offset in the + message, counting from zero. + + + The recipient MAY decide how long to hold partially-staged content + and MAY implement staging by always discarding partially-staged + content. However if it uses the file content type it MUST support + the staging methods. + + + + + + + + stage message content + + This method stages the message, sending the message content to the + recipient from the octet offset specified in the Open-Ok method. + + + + + + + + + + publish a message + + This method publishes a staged file message to a specific exchange. + The file message will be routed to queues as defined by the exchange + configuration and distributed to any active consumers when the + transaction, if any, is committed. + + + + + + The client MUST provide a valid access ticket giving "write" + access rights to the access realm for the exchange. + + + + + + Specifies the name of the exchange to publish to. The exchange + name can be empty, meaning the default exchange. If the exchange + name is specified, and that exchange does not exist, the server + will raise a channel exception. + + + The server MUST accept a blank exchange name to mean the default + exchange. + + + If the exchange was declared as an internal exchange, the server + MUST respond with a reply code 403 (access refused) and raise a + channel exception. + + + The exchange MAY refuse file content in which case it MUST respond + with a reply code 540 (not implemented) and raise a channel + exception. + + + + + Message routing key + + Specifies the routing key for the message. The routing key is + used for routing messages depending on the exchange configuration. + + + + + indicate mandatory routing + + This flag tells the server how to react if the message cannot be + routed to a queue. If this flag is set, the server will return an + unroutable message with a Return method. If this flag is zero, the + server silently drops the message. + + + The server SHOULD implement the mandatory flag. + + + + + request immediate delivery + + This flag tells the server how to react if the message cannot be + routed to a queue consumer immediately. If this flag is set, the + server will return an undeliverable message with a Return method. + If this flag is zero, the server will queue the message, but with + no guarantee that it will ever be consumed. + + + The server SHOULD implement the immediate flag. + + + + + staging identifier + + This is the staging identifier of the message to publish. The + message must have been staged. Note that a client can send the + Publish method asynchronously without waiting for staging to + finish. + + + + + + return a failed message + + This method returns an undeliverable message that was published + with the "immediate" flag set, or an unroutable message published + with the "mandatory" flag set. The reply code and text provide + information about the reason that the message was undeliverable. + + + + + + + + + Specifies the name of the exchange that the message was + originally published to. + + + + + Message routing key + + Specifies the routing key name specified when the message was + published. + + + + + + + + + notify the client of a consumer message + + This method delivers a staged file message to the client, via a + consumer. In the asynchronous message delivery model, the client + starts a consumer using the Consume method, then the server + responds with Deliver methods as and when messages arrive for + that consumer. + + + The server SHOULD track the number of times a message has been + delivered to clients and when a message is redelivered a certain + number of times - e.g. 5 times - without being acknowledged, the + server SHOULD consider the message to be unprocessable (possibly + causing client applications to abort), and move the message to a + dead letter queue. + + + + + + + + + + + + Specifies the name of the exchange that the message was originally + published to. + + + + + Message routing key + + Specifies the routing key name specified when the message was + published. + + + + + staging identifier + + This is the staging identifier of the message to deliver. The + message must have been staged. Note that a server can send the + Deliver method asynchronously without waiting for staging to + finish. + + + + + + + + + acknowledge one or more messages + + This method acknowledges one or more messages delivered via the + Deliver method. The client can ask to confirm a single message or + a set of messages up to and including a specific message. + + + + + + acknowledge multiple messages + + If set to 1, the delivery tag is treated as "up to and including", + so that the client can acknowledge multiple messages with a single + method. If set to zero, the delivery tag refers to a single + message. If the multiple field is 1, and the delivery tag is zero, + tells the server to acknowledge all outstanding mesages. + + + The server MUST validate that a non-zero delivery-tag refers to an + delivered message, and raise a channel exception if this is not the + case. + + + + + + + + + reject an incoming message + + This method allows a client to reject a message. It can be used to + return untreatable messages to their original queue. Note that file + content is staged before delivery, so the client will not use this + method to interrupt delivery of a large message. + + + The server SHOULD interpret this method as meaning that the client + is unable to process the message at this time. + + + A client MUST NOT use this method as a means of selecting messages + to process. A rejected message MAY be discarded or dead-lettered, + not necessarily passed to another client. + + + + + + + requeue the message + + If this field is zero, the message will be discarded. If this bit + is 1, the server will attempt to requeue the message. + + + The server MUST NOT deliver the message to the same client within + the context of the current channel. The recommended strategy is + to attempt to deliver the message to an alternative consumer, and + if that is not possible, to move the message to a dead-letter + queue. The server MAY use more sophisticated tracking to hold + the message on the queue and redeliver it to the same client at + a later stage. + + + + + + + + + work with streaming content + + + The stream class provides methods that support multimedia streaming. + The stream class uses the following semantics: one message is one + packet of data; delivery is unacknowleged and unreliable; the consumer + can specify quality of service parameters that the server can try to + adhere to; lower-priority messages may be discarded in favour of high + priority messages. + + + + stream = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL S:CANCEL-OK + / C:PUBLISH content + / S:RETURN + / S:DELIVER content + + + + + + + The server SHOULD discard stream messages on a priority basis if + the queue size exceeds some configured limit. + + + The server MUST implement at least 2 priority levels for stream + messages, where priorities 0-4 and 5-9 are treated as two distinct + levels. The server MAY implement up to 10 priority levels. + + + The server MUST implement automatic acknowledgements on stream + content. That is, as soon as a message is delivered to a client + via a Deliver method, the server must remove it from the queue. + + + + + + + MIME content type + + + MIME content encoding + + + Message header field table + + + The message priority, 0 to 9 + + + The message timestamp + + + + + + + specify quality of service + + This method requests a specific quality of service. The QoS can + be specified for the current channel or for all channels on the + connection. The particular properties and semantics of a qos method + always depend on the content class semantics. Though the qos method + could in principle apply to both peers, it is currently meaningful + only for the server. + + + + + + prefetch window in octets + + The client can request that messages be sent in advance so that + when the client finishes processing a message, the following + message is already held locally, rather than needing to be sent + down the channel. Prefetching gives a performance improvement. + This field specifies the prefetch window size in octets. May be + set to zero, meaning "no specific limit". Note that other + prefetch limits may still apply. + + + + + prefetch window in messages + + Specifies a prefetch window in terms of whole messages. This + field may be used in combination with the prefetch-size field; + a message will only be sent in advance if both prefetch windows + (and those at the channel and connection level) allow it. + + + + + transfer rate in octets/second + + Specifies a desired transfer rate in octets per second. This is + usually determined by the application that uses the streaming + data. A value of zero means "no limit", i.e. as rapidly as + possible. + + + The server MAY ignore the prefetch values and consume rates, + depending on the type of stream and the ability of the server + to queue and/or reply it. The server MAY drop low-priority + messages in favour of high-priority messages. + + + + + apply to entire connection + + By default the QoS settings apply to the current channel only. If + this field is set, they are applied to the entire connection. + + + + + + confirm the requested qos + + This method tells the client that the requested QoS levels could + be handled by the server. The requested QoS applies to all active + consumers until a new QoS is defined. + + + + + + + + start a queue consumer + + This method asks the server to start a "consumer", which is a + transient request for messages from a specific queue. Consumers + last as long as the channel they were created on, or until the + client cancels them. + + + The server SHOULD support at least 16 consumers per queue, unless + the queue was declared as private, and ideally, impose no limit + except as defined by available resources. + + + Streaming applications SHOULD use different channels to select + different streaming resolutions. AMQP makes no provision for + filtering and/or transforming streams except on the basis of + priority-based selective delivery of individual messages. + + + + + + + The client MUST provide a valid access ticket giving "read" access + rights to the realm for the queue. + + + + + + Specifies the name of the queue to consume from. If the queue name + is null, refers to the current queue for the channel, which is the + last declared queue. + + + If the client did not previously declare a queue, and the queue name + in this method is empty, the server MUST raise a connection exception + with reply code 530 (not allowed). + + + + + + Specifies the identifier for the consumer. The consumer tag is + local to a connection, so two clients can use the same consumer + tags. If this field is empty the server will generate a unique + tag. + + + The tag MUST NOT refer to an existing consumer. If the client + attempts to create two consumers with the same non-empty tag + the server MUST raise a connection exception with reply code + 530 (not allowed). + + + + + + + request exclusive access + + Request exclusive consumer access, meaning only this consumer can + access the queue. + + + If the server cannot grant exclusive access to the queue when asked, + - because there are other consumers active - it MUST raise a channel + exception with return code 405 (resource locked). + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + + confirm a new consumer + + This method provides the client with a consumer tag which it may + use in methods that work with the consumer. + + + + + + Holds the consumer tag specified by the client or provided by + the server. + + + + + + + + end a queue consumer + + This method cancels a consumer. Since message delivery is + asynchronous the client may continue to receive messages for + a short while after canceling a consumer. It may process or + discard these as appropriate. + + + + + + + + do not send a reply method + + If set, the server will not respond to the method. The client should + not wait for a reply method. If the server could not complete the + method it will raise a channel or connection exception. + + + + + + confirm a cancelled consumer + + This method confirms that the cancellation was completed. + + + + + + + + + + + publish a message + + This method publishes a message to a specific exchange. The message + will be routed to queues as defined by the exchange configuration + and distributed to any active consumers as appropriate. + + + + + + The client MUST provide a valid access ticket giving "write" + access rights to the access realm for the exchange. + + + + + + Specifies the name of the exchange to publish to. The exchange + name can be empty, meaning the default exchange. If the exchange + name is specified, and that exchange does not exist, the server + will raise a channel exception. + + + The server MUST accept a blank exchange name to mean the default + exchange. + + + If the exchange was declared as an internal exchange, the server + MUST respond with a reply code 403 (access refused) and raise a + channel exception. + + + The exchange MAY refuse stream content in which case it MUST + respond with a reply code 540 (not implemented) and raise a + channel exception. + + + + + Message routing key + + Specifies the routing key for the message. The routing key is + used for routing messages depending on the exchange configuration. + + + + + indicate mandatory routing + + This flag tells the server how to react if the message cannot be + routed to a queue. If this flag is set, the server will return an + unroutable message with a Return method. If this flag is zero, the + server silently drops the message. + + + The server SHOULD implement the mandatory flag. + + + + + request immediate delivery + + This flag tells the server how to react if the message cannot be + routed to a queue consumer immediately. If this flag is set, the + server will return an undeliverable message with a Return method. + If this flag is zero, the server will queue the message, but with + no guarantee that it will ever be consumed. + + + The server SHOULD implement the immediate flag. + + + + + + return a failed message + + This method returns an undeliverable message that was published + with the "immediate" flag set, or an unroutable message published + with the "mandatory" flag set. The reply code and text provide + information about the reason that the message was undeliverable. + + + + + + + + + Specifies the name of the exchange that the message was + originally published to. + + + + + Message routing key + + Specifies the routing key name specified when the message was + published. + + + + + + + + + notify the client of a consumer message + + This method delivers a message to the client, via a consumer. In + the asynchronous message delivery model, the client starts a + consumer using the Consume method, then the server responds with + Deliver methods as and when messages arrive for that consumer. + + + + + + + + + + Specifies the name of the exchange that the message was originally + published to. + + + + + + Specifies the name of the queue that the message came from. Note + that a single channel can start many consumers on different + queues. + + + + + + + + + work with standard transactions + + + Standard transactions provide so-called "1.5 phase commit". We can + ensure that work is never lost, but there is a chance of confirmations + being lost, so that messages may be resent. Applications that use + standard transactions must be able to detect and ignore duplicate + messages. + + + An client using standard transactions SHOULD be able to track all + messages received within a reasonable period, and thus detect and + reject duplicates of the same message. It SHOULD NOT pass these to + the application layer. + + + tx = C:SELECT S:SELECT-OK + / C:COMMIT S:COMMIT-OK + / C:ROLLBACK S:ROLLBACK-OK + + + + + +select standard transaction mode + + This method sets the channel to use standard transactions. The + client must use this method at least once on a channel before + using the Commit or Rollback methods. + + + + + +confirm transaction mode + + This method confirms to the client that the channel was successfully + set to use standard transactions. + + + + + +commit the current transaction + + This method commits all messages published and acknowledged in + the current transaction. A new transaction starts immediately + after a commit. + + + + + +confirm a successful commit + + This method confirms to the client that the commit succeeded. + Note that if a commit fails, the server raises a channel exception. + + + + + +abandon the current transaction + + This method abandons all messages published and acknowledged in + the current transaction. A new transaction starts immediately + after a rollback. + + + + + +confirm a successful rollback + + This method confirms to the client that the rollback succeeded. + Note that if an rollback fails, the server raises a channel exception. + + + + + + + work with distributed transactions + + + Distributed transactions provide so-called "2-phase commit". The + AMQP distributed transaction model supports the X-Open XA + architecture and other distributed transaction implementations. + The Dtx class assumes that the server has a private communications + channel (not AMQP) to a distributed transaction coordinator. + + + dtx = C:SELECT S:SELECT-OK + C:START S:START-OK + + + + + +select standard transaction mode + + This method sets the channel to use distributed transactions. The + client must use this method at least once on a channel before + using the Start method. + + + + + +confirm transaction mode + + This method confirms to the client that the channel was successfully + set to use distributed transactions. + + + + + + start a new distributed transaction + + This method starts a new distributed transaction. This must be + the first method on a new channel that uses the distributed + transaction mode, before any methods that publish or consume + messages. + + + + + transaction identifier + + The distributed transaction key. This identifies the transaction + so that the AMQP server can coordinate with the distributed + transaction coordinator. + + + + + + confirm the start of a new distributed transaction + + This method confirms to the client that the transaction started. + Note that if a start fails, the server raises a channel exception. + + + + + + + methods for protocol tunneling. + + + The tunnel methods are used to send blocks of binary data - which + can be serialised AMQP methods or other protocol frames - between + AMQP peers. + + + tunnel = C:REQUEST + / S:REQUEST + + + + + Message header field table + + + The identity of the tunnelling proxy + + + The name or type of the message being tunnelled + + + The message durability indicator + + + The message broadcast mode + + + + sends a tunnelled method + + This method tunnels a block of binary data, which can be an + encoded AMQP method or other data. The binary data is sent + as the content for the Tunnel.Request method. + + + + meta data for the tunnelled block + + This field table holds arbitrary meta-data that the sender needs + to pass to the recipient. + + + + + + + test functional primitives of the implementation + + + The test class provides methods for a peer to test the basic + operational correctness of another peer. The test methods are + intended to ensure that all peers respect at least the basic + elements of the protocol, such as frame and content organisation + and field types. We assume that a specially-designed peer, a + "monitor client" would perform such tests. + + + test = C:INTEGER S:INTEGER-OK + / S:INTEGER C:INTEGER-OK + / C:STRING S:STRING-OK + / S:STRING C:STRING-OK + / C:TABLE S:TABLE-OK + / S:TABLE C:TABLE-OK + / C:CONTENT S:CONTENT-OK + / S:CONTENT C:CONTENT-OK + + + + + + test integer handling + + This method tests the peer's capability to correctly marshal integer + data. + + + + + + octet test value + + An octet integer test value. + + + + short test value + + A short integer test value. + + + + long test value + + A long integer test value. + + + + long-long test value + + A long long integer test value. + + + + operation to test + + The client must execute this operation on the provided integer + test fields and return the result. + + + return sum of test values + return lowest of test values + return highest of test values + + + + + report integer test result + + This method reports the result of an Integer method. + + + + + result value + + The result of the tested operation. + + + + + + test string handling + + This method tests the peer's capability to correctly marshal string + data. + + + + + + short string test value + + An short string test value. + + + + long string test value + + A long string test value. + + + + operation to test + + The client must execute this operation on the provided string + test fields and return the result. + + + return concatentation of test strings + return shortest of test strings + return longest of test strings + + + + + report string test result + + This method reports the result of a String method. + + + + + result value + + The result of the tested operation. + + + + + + test field table handling + + This method tests the peer's capability to correctly marshal field + table data. + + + + + + field table of test values + + A field table of test values. + + + + operation to test on integers + + The client must execute this operation on the provided field + table integer values and return the result. + + + return sum of numeric field values + return min of numeric field values + return max of numeric field values + + + + operation to test on strings + + The client must execute this operation on the provided field + table string values and return the result. + + + return concatenation of string field values + return shortest of string field values + return longest of string field values + + + + + report table test result + + This method reports the result of a Table method. + + + + + integer result value + + The result of the tested integer operation. + + + + string result value + + The result of the tested string operation. + + + + + + test content handling + + This method tests the peer's capability to correctly marshal content. + + + + + + + report content test result + + This method reports the result of a Content method. It contains the + content checksum and echoes the original content as provided. + + + + + content hash + + The 32-bit checksum of the content, calculated by adding the + content into a 32-bit accumulator. + + + + + diff --git a/python/qpid/specs/amqp-0-9.xml b/python/qpid/specs/amqp-0-9.xml new file mode 100644 index 0000000000..73cace7015 --- /dev/null +++ b/python/qpid/specs/amqp-0-9.xml @@ -0,0 +1,5248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates that the method completed successfully. This reply code is + reserved for future use - the current protocol design does not use positive + confirmation and reply codes are sent only in case of an error. + + + + + + The client asked for a specific message that is no longer available. + The message was delivered to another client, or was purged from the queue + for some other reason. + + + + + + The client attempted to transfer content larger than the server could accept + at the present time. The client may retry at a later time. + + + + + + When the exchange cannot route the result of a .Publish, most likely due + to an invalid routing key. Only when the mandatory flag is set. + + + + + + When the exchange cannot deliver to a consumer when the immediate flag is + set. As a result of pending data on the queue or the absence of any + consumers of the queue. + + + + + + An operator intervened to close the connection for some reason. The client + may retry at some later date. + + + + + + The client tried to work with an unknown virtual host. + + + + + + The client attempted to work with a server entity to which it has no + access due to security settings. + + + + + The client attempted to work with a server entity that does not exist. + + + + + The client attempted to work with a server entity to which it has no + access because another client is working with it. + + + + + + The client requested a method that was not allowed because some precondition + failed. + + + + + + The client sent a malformed frame that the server could not decode. This + strongly implies a programming error in the client. + + + + + + The client sent a frame that contained illegal values for one or more + fields. This strongly implies a programming error in the client. + + + + + + The client sent an invalid sequence of frames, attempting to perform an + operation that was considered invalid by the server. This usually implies + a programming error in the client. + + + + + + The client attempted to work with a channel that had not been correctly + opened. This most likely indicates a fault in the client layer. + + + + + + The server could not complete the method because it lacked sufficient + resources. This may be due to the client creating too many of some type + of entity. + + + + + + The client tried to work with some entity in a manner that is prohibited + by the server, due to security settings or by some other criteria. + + + + + + The client tried to use functionality that is not implemented in the + server. + + + + + + The server could not complete the method because of an internal error. + The server may require intervention by an operator in order to resume + normal operations. + + + + + + + + An access ticket granted by the server for a certain set of access rights + within a specific realm. Access tickets are valid within the channel where + they were created, and expire when the channel closes. + + + + + + + + + Identifier for the consumer, valid within the current connection. + + + + + + The server-assigned and channel-specific delivery tag + + + + The delivery tag is valid only within the channel from which the message was + received. I.e. a client MUST NOT receive a message on one channel and then + acknowledge it on another. + + + + + The server MUST NOT use a zero value for delivery tags. Zero is reserved + for client use, meaning "all messages so far received". + + + + + + + The exchange name is a client-selected string that identifies the exchange for publish + methods. Exchange names may consist of any mixture of digits, letters, and underscores. + Exchange names are scoped by the virtual host. + + + + + + + Specifies the list of equivalent or alternative hosts that the server knows about, + which will normally include the current server itself. Clients can cache this + information and use it when reconnecting to a server after a failure. This field + may be empty. + + + + + + + + If this field is set the server does not expect acknowledgements for + messages. That is, when a message is delivered to the client the server + automatically and silently acknowledges it on behalf of the client. This + functionality increases performance but at the cost of reliability. + Messages can get lost if a client dies before it can deliver them to the + application. + + + + + + If the no-local field is set the server will not send messages to the connection that + published them. + + + + + + Must start with a slash "/" and continue with path names separated by slashes. A path + name consists of any combination of at least one of [A-Za-z0-9] plus zero or more of + [.-_+!=:]. + + + + + + + + + + This string provides a set of peer properties, used for identification, debugging, and + general information. + + + + + + The queue name identifies the queue within the vhost. Queue names may consist of any + mixture of digits, letters, and underscores. + + + + + + + This indicates that the message has been previously delivered to this or + another client. + + + + The server SHOULD try to signal redelivered messages when it can. When + redelivering a message that was not successfully acknowledged, the server + SHOULD deliver it to the original client if possible. + + + Create a shared queue and publish a message to the queue. Consume the + message using explicit acknowledgements, but do not acknowledge the + message. Close the connection, reconnect, and consume from the queue + again. The message should arrive with the redelivered flag set. + + + + + The client MUST NOT rely on the redelivered field but should take it as a + hint that the message may already have been processed. A fully robust + client must be able to track duplicate received messages on non-transacted, + and locally-transacted channels. + + + + + + + The reply code. The AMQ reply codes are defined as constants at the start + of this formal specification. + + + + + + + The localised reply text. This text can be logged as an aid to resolving + issues. + + + + + + + + + + + + + Specifies the destination to which the message is to be + transferred. The destination can be empty, meaning the + default exchange or consumer. + + + + + + The reject code must be one of 0 (generic) or 1 (immediate + delivery was attempted but failed). + + + + + + + Used for authentication, replay prevention, and encrypted bodies. + + + + + + + + + + + + + + + + + + + + + The connection class provides methods for a client to establish a network connection to + a server, and for both peers to operate the connection thereafter. + + + + connection = open-connection *use-connection close-connection + open-connection = C:protocol-header + S:START C:START-OK + *challenge + S:TUNE C:TUNE-OK + C:OPEN S:OPEN-OK | S:REDIRECT + challenge = S:SECURE C:SECURE-OK + use-connection = *channel + close-connection = C:CLOSE S:CLOSE-OK + / S:CLOSE C:CLOSE-OK + + + + + + + + + + This method starts the connection negotiation process by telling the client the + protocol version that the server proposes, along with a list of security mechanisms + which the client can use for authentication. + + + + + If the server cannot support the protocol specified in the protocol header, + it MUST close the socket connection without sending any response method. + + + The client sends a protocol header containing an invalid protocol name. + The server must respond by closing the connection. + + + + + The server MUST provide a protocol version that is lower than or equal to + that requested by the client in the protocol header. + + + The client requests a protocol version that is higher than any valid + implementation, e.g. 9.0. The server must respond with a current + protocol version, e.g. 1.0. + + + + + If the client cannot handle the protocol version suggested by the server + it MUST close the socket connection. + + + The server sends a protocol version that is lower than any valid + implementation, e.g. 0.1. The client must respond by closing the + connection. + + + + + + + + + The protocol version, major component, as transmitted in the AMQP protocol + header. This, combined with the protocol minor component fully describe the + protocol version, which is written in the format major-minor. Hence, with + major=1, minor=3, the protocol version would be "1-3". + + + + + + The protocol version, minor component, as transmitted in the AMQP protocol + header. This, combined with the protocol major component fully describe the + protocol version, which is written in the format major-minor. Hence, with + major=1, minor=3, the protocol version would be "1-3". + + + + + + + The properties SHOULD contain at least these fields: "host", specifying the + server host name or address, "product", giving the name of the server product, + "version", giving the name of the server version, "platform", giving the name + of the operating system, "copyright", if appropriate, and "information", giving + other general information. + + + Client connects to server and inspects the server properties. It checks for + the presence of the required fields. + + + + + + + A list of the security mechanisms that the server supports, delimited by spaces. + + + + + + + A list of the message locales that the server supports, delimited by spaces. The + locale defines the language in which the server will send reply texts. + + + + The server MUST support at least the en_US locale. + + + Client connects to server and inspects the locales field. It checks for + the presence of the required locale(s). + + + + + + + + + This method selects a SASL security mechanism. + + + + + + + + + The properties SHOULD contain at least these fields: "product", giving the name + of the client product, "version", giving the name of the client version, "platform", + giving the name of the operating system, "copyright", if appropriate, and + "information", giving other general information. + + + + + + + A single security mechanisms selected by the client, which must be one of those + specified by the server. + + + + The client SHOULD authenticate using the highest-level security profile it + can handle from the list provided by the server. + + + + + If the mechanism field does not contain one of the security mechanisms + proposed by the server in the Start method, the server MUST close the + connection without sending any further data. + + + Client connects to server and sends an invalid security mechanism. The + server must respond by closing the connection (a socket close, with no + connection close negotiation). + + + + + + + + A block of opaque data passed to the security mechanism. The contents of this + data are defined by the SASL security mechanism. + + + + + + + A single message locale selected by the client, which must be one of those + specified by the server. + + + + + + + + + + The SASL protocol works by exchanging challenges and responses until both peers have + received sufficient information to authenticate each other. This method challenges + the client to provide more information. + + + + + + + + Challenge information, a block of opaque binary data passed to the security + mechanism. + + + + + + + This method attempts to authenticate, passing a block of SASL data for the security + mechanism at the server side. + + + + + + + A block of opaque data passed to the security mechanism. The contents of this + data are defined by the SASL security mechanism. + + + + + + + + + + This method proposes a set of connection configuration values to the client. The + client can accept and/or adjust these. + + + + + + + + + The maximum total number of channels that the server allows per connection. Zero + means that the server does not impose a fixed limit, but the number of allowed + channels may be limited by available server resources. + + + + + + The largest frame size that the server proposes for the connection. The client + can negotiate a lower value. Zero means that the server does not impose any + specific limit but may reject very large frames if it cannot allocate resources + for them. + + + + Until the frame-max has been negotiated, both peers MUST accept frames of up + to frame-min-size octets large, and the minimum negotiated value for frame-max + is also frame-min-size. + + + Client connects to server and sends a large properties field, creating a frame + of frame-min-size octets. The server must accept this frame. + + + + + + + + The delay, in seconds, of the connection heartbeat that the server wants. + Zero means the server does not want a heartbeat. + + + + + + + This method sends the client's connection tuning parameters to the server. + Certain fields are negotiated, others provide capability information. + + + + + + + The maximum total number of channels that the client will use per connection. + + + + If the client specifies a channel max that is higher than the value provided + by the server, the server MUST close the connection without attempting a + negotiated close. The server may report the error in some fashion to assist + implementors. + + + + + + + + + The largest frame size that the client and server will use for the connection. + Zero means that the client does not impose any specific limit but may reject + very large frames if it cannot allocate resources for them. Note that the + frame-max limit applies principally to content frames, where large contents can + be broken into frames of arbitrary size. + + + + Until the frame-max has been negotiated, both peers MUST accept frames of up + to frame-min-size octets large, and the minimum negotiated value for frame-max + is also frame-min-size. + + + + + If the client specifies a frame max that is higher than the value provided + by the server, the server MUST close the connection without attempting a + negotiated close. The server may report the error in some fashion to assist + implementors. + + + + + + + The delay, in seconds, of the connection heartbeat that the client wants. Zero + means the client does not want a heartbeat. + + + + + + + + + This method opens a connection to a virtual host, which is a collection of + resources, and acts to separate multiple application domains within a server. + The server may apply arbitrary limits per virtual host, such as the number + of each type of entity that may be used, per connection and/or in total. + + + + + + + + + + + The name of the virtual host to work with. + + + + If the server supports multiple virtual hosts, it MUST enforce a full + separation of exchanges, queues, and all associated entities per virtual + host. An application, connected to a specific virtual host, MUST NOT be able + to access resources of another virtual host. + + + + + The server SHOULD verify that the client has permission to access the + specified virtual host. + + + + + + + The client can specify zero or more capability names, delimited by spaces. + The server can use this string to how to process the client's connection + request. + + + + + + In a configuration with multiple collaborating servers, the server may respond + to a Connection.Open method with a Connection.Redirect. The insist option tells + the server that the client is insisting on a connection to the specified server. + + + + When the client uses the insist option, the server MUST NOT respond with a + Connection.Redirect method. If it cannot accept the client's connection + request it should respond by closing the connection with a suitable reply + code. + + + + + + + + This method signals to the client that the connection is ready for use. + + + + + + + + This method redirects the client to another server, based on the requested virtual + host and/or capabilities. + + + + When getting the Connection.Redirect method, the client SHOULD reconnect to + the host specified, and if that host is not present, to any of the hosts + specified in the known-hosts list. + + + + + + Specifies the server to connect to. This is an IP address or a DNS name, + optionally followed by a colon and a port number. If no port number is + specified, the client should use the default port number for the protocol. + + + + + + + + + + + This method indicates that the sender wants to close the connection. This may be + due to internal conditions (e.g. a forced shut-down) or due to an error handling + a specific method, i.e. an exception. When a close is due to an exception, the + sender provides the class and method id of the method which caused the exception. + + + + + After sending this method any received method except the Close-OK method MUST + be discarded. + + + + + + + + + + + + + When the close is provoked by a method exception, this is the class of the + method. + + + + + + When the close is provoked by a method exception, this is the ID of the method. + + + + + + + This method confirms a Connection.Close method and tells the recipient that it is + safe to release resources for the connection and close the socket. + + + + A peer that detects a socket closure without having received a Close-Ok + handshake method SHOULD log the error. + + + + + + + + + + + + The channel class provides methods for a client to establish a channel to a + server and for both peers to operate the channel thereafter. + + + + channel = open-channel *use-channel close-channel + open-channel = C:OPEN S:OPEN-OK + / C:RESUME S:OK + use-channel = C:FLOW S:FLOW-OK + / S:FLOW C:FLOW-OK + / S:PING C:OK + / C:PONG S:OK + / C:PING S:OK + / S:PONG C:OK + / functional-class + close-channel = C:CLOSE S:CLOSE-OK + / S:CLOSE C:CLOSE-OK + + + + + + + + + + This method opens a channel to the server. + + + + The client MUST NOT use this method on an already-opened channel. + + + Client opens a channel and then reopens the same channel. + + + + + + + Configures out-of-band transfers on this channel. The syntax and meaning of this + field will be formally defined at a later date. + + + + + + + + This method signals to the client that the channel is ready for use. + + + + + + + + + + This method asks the peer to pause or restart the flow of content data. This is a + simple flow-control mechanism that a peer can use to avoid overflowing its queues or + otherwise finding itself receiving more messages than it can process. Note that this + method is not intended for window control. The peer that receives a disable flow + method should finish sending the current content frame, if any, then pause. + + + + + When a new channel is opened, it is active (flow is active). Some applications + assume that channels are inactive until started. To emulate this behaviour a + client MAY open the channel, then pause it. + + + + + + When sending content frames, a peer SHOULD monitor the channel for incoming + methods and respond to a Channel.Flow as rapidly as possible. + + + + + + A peer MAY use the Channel.Flow method to throttle incoming content data for + internal reasons, for example, when exchanging data over a slower connection. + + + + + + The peer that requests a Channel.Flow method MAY disconnect and/or ban a peer + that does not respect the request. This is to prevent badly-behaved clients + from overwhelming a broker. + + + + + + + + + + + If 1, the peer starts sending content frames. If 0, the peer stops sending + content frames. + + + + + + + Confirms to the peer that a flow command was received and processed. + + + + + + Confirms the setting of the processed flow method: 1 means the peer will start + sending or continue to send content frames; 0 means it will not. + + + + + + + + + This method indicates that the sender wants to close the channel. This may be due to + internal conditions (e.g. a forced shut-down) or due to an error handling a specific + method, i.e. an exception. When a close is due to an exception, the sender provides + the class and method id of the method which caused the exception. + + + + + + After sending this method any received method except the Close-OK method MUST + be discarded. + + + + + + + + + + + + + When the close is provoked by a method exception, this is the class of the + method. + + + + + + When the close is provoked by a method exception, this is the ID of the method. + + + + + + + This method confirms a Channel.Close method and tells the recipient that it is safe + to release resources for the channel. + + + + A peer that detects a socket closure without having received a Channel.Close-Ok + handshake method SHOULD log the error. + + + + + + + + + + + This method resume a previously interrupted channel. + + + + + + + + + + + [WORK IN PROGRESS] Request that the recipient issue a pong request. + + + + + + + + + [WORK IN PROGRESS] Issued after a ping request is received. Note that this is a + request issued after receiving a ping, not a response to + receiving a ping. + + + + + + + + + [WORK IN PROGRESS] Signals normal completion of a method. + + + + + + + + + + + + + The protocol control access to server resources using access tickets. A + client must explicitly request access tickets before doing work. An access + ticket grants a client the right to use a specific set of resources - + called a "realm" - in specific ways. + + + + access = C:REQUEST S:REQUEST-OK + + + + + + + + + + This method requests an access ticket for an access realm. The server + responds by granting the access ticket. If the client does not have + access rights to the requested realm this causes a connection exception. + Access tickets are a per-channel resource. + + + + + + + + Specifies the name of the realm to which the client is requesting access. + The realm is a configured server-side object that collects a set of + resources (exchanges, queues, etc.). If the channel has already requested + an access ticket onto this realm, the previous ticket is destroyed and a + new ticket is created with the requested access rights, if allowed. + + + + The client MUST specify a realm that is known to the server. The server + makes an identical response for undefined realms as it does for realms + that are defined but inaccessible to this client. + + + Client specifies an undefined realm. + + + + + + + Request exclusive access to the realm, meaning that this will be the only + channel that uses the realm's resources. + + + + The client MAY NOT request exclusive access to a realm that has active + access tickets, unless the same channel already had the only access + ticket onto that realm. + + + Client opens two channels and requests exclusive access to the same realm. + + + + + + Request message passive access to the specified access realm. Passive + access lets a client get information about resources in the realm but + not to make any changes to them. + + + + + Request message active access to the specified access realm. Active access lets + a client get create and delete resources in the realm. + + + + + Request write access to the specified access realm. Write access lets a client + publish messages to all exchanges in the realm. + + + + + Request read access to the specified access realm. Read access lets a client + consume messages from queues in the realm. + + + + + + + This method provides the client with an access ticket. The access ticket is valid + within the current channel and for the lifespan of the channel. + + + + The client MUST NOT use access tickets except within the same channel as + originally granted. + + + Client opens two channels, requests a ticket on one channel, and then + tries to use that ticket in a second channel. + + + + + + + + + + + + Exchanges match and distribute messages across queues. Exchanges can be configured in + the server or created at runtime. + + + + exchange = C:DECLARE S:DECLARE-OK + / C:DELETE S:DELETE-OK + + + + + + + + The server MUST implement these standard exchange types: fanout, direct. + + + Client attempts to declare an exchange with each of these standard types. + + + + + The server SHOULD implement these standard exchange types: topic, headers. + + + Client attempts to declare an exchange with each of these standard types. + + + + + The server MUST, in each virtual host, pre-declare an exchange instance + for each standard exchange type that it implements, where the name of the + exchange instance, if defined, is "amq." followed by the exchange type name. + + + The server MUST, in each virtual host, pre-declare at least two direct + exchange instances: one named "amq.direct", the other with no public name + that serves as a default exchange for Publish methods. + + + Client creates a temporary queue and attempts to bind to each required + exchange instance ("amq.fanout", "amq.direct", "amq.topic", and "amq.headers" + if those types are defined). + + + + + The server MUST pre-declare a direct exchange with no public name to act as + the default exchange for content Publish methods and for default queue bindings. + + + Client checks that the default exchange is active by specifying a queue + binding with no exchange name, and publishing a message with a suitable + routing key but without specifying the exchange name, then ensuring that + the message arrives in the queue correctly. + + + + + The server MUST NOT allow clients to access the default exchange except + by specifying an empty exchange name in the Queue.Bind and content Publish + methods. + + + + + The server MAY implement other exchange types as wanted. + + + + + + + + This method creates an exchange if it does not already exist, and if the exchange + exists, verifies that it is of the correct and expected class. + + + + The server SHOULD support a minimum of 16 exchanges per virtual host and + ideally, impose no limit except as defined by available resources. + + + The client creates as many exchanges as it can until the server reports + an error; the number of exchanges successfully created must be at least + sixteen. + + + + + + + + + When a client defines a new exchange, this belongs to the access realm of the + ticket used. All further work done with that exchange must be done with an + access ticket for the same realm. + + + + The client MUST provide a valid access ticket giving "active" access to + the realm in which the exchange exists or will be created, or "passive" + access if the if-exists flag is set. + + + Client creates access ticket with wrong access rights and attempts to use + in this method. + + + + + + + + Exchange names starting with "amq." are reserved for pre-declared and + standardised exchanges. The client MUST NOT attempt to create an exchange + starting with "amq.". + + + TODO. + + + + + + + + Each exchange belongs to one of a set of exchange types implemented by the + server. The exchange types define the functionality of the exchange - i.e. how + messages are routed through it. It is not valid or meaningful to attempt to + change the type of an existing exchange. + + + + Exchanges cannot be redeclared with different types. The client MUST not + attempt to redeclare an existing exchange with a different type than used + in the original Exchange.Declare method. + + + TODO. + + + + + The client MUST NOT attempt to create an exchange with a type that the + server does not support. + + + TODO. + + + + + + + + If set, the server will not create the exchange. The client can use this to + check whether an exchange exists without modifying the server state. + + + + If set, and the exchange does not already exist, the server MUST raise a + channel exception with reply code 404 (not found). + + + TODO. + + + + + + + If set when creating a new exchange, the exchange will be marked as durable. + Durable exchanges remain active when a server restarts. Non-durable exchanges + (transient exchanges) are purged if/when a server restarts. + + + + The server MUST support both durable and transient exchanges. + + + TODO. + + + + + The server MUST ignore the durable field if the exchange already exists. + + + TODO. + + + + + + + + If set, the exchange is deleted when all queues have finished using it. + + + + The server MUST ignore the auto-delete field if the exchange already + exists. + + + TODO. + + + + + + + If set, the exchange may not be used directly by publishers, but only when bound + to other exchanges. Internal exchanges are used to construct wiring that is not + visible to applications. + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + A set of arguments for the declaration. The syntax and semantics of these + arguments depends on the server implementation. This field is ignored if passive + is 1. + + + + + + + This method confirms a Declare method and confirms the name of the exchange, + essential for automatically-named exchanges. + + + + + + + + + This method deletes an exchange. When an exchange is deleted all queue bindings on + the exchange are cancelled. + + + + + + + + + The client MUST provide a valid access ticket giving "active" access + rights to the exchange's access realm. + + + Client creates access ticket with wrong access rights and attempts to use + in this method. + + + + + + + + The client MUST NOT attempt to delete an exchange that does not exist. + + + + + + + + + If set, the server will only delete the exchange if it has no queue bindings. If + the exchange has queue bindings the server does not delete it but raises a + channel exception instead. + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + This method confirms the deletion of an exchange. + + + + + + + + + + Message routing key + + Specifies the routing key for the message. The routing key is + used for routing messages depending on the exchange configuration. + + + + + + + + + + + + + + + + + + Queues store and forward messages. Queues can be configured in the server or created at + runtime. Queues must be attached to at least one exchange in order to receive messages + from publishers. + + + + queue = C:DECLARE S:DECLARE-OK + / C:BIND S:BIND-OK + / C:PURGE S:PURGE-OK + / C:DELETE S:DELETE-OK + + + + + + + + A server MUST allow any content class to be sent to any queue, in any mix, and + queue and deliver these content classes independently. Note that all methods + that fetch content off queues are specific to a given content class. + + + Client creates an exchange of each standard type and several queues that + it binds to each exchange. It must then successfully send each of the standard + content types to each of the available queues. + + + + + + + + This method creates or checks a queue. When creating a new queue the client can + specify various properties that control the durability of the queue and its + contents, and the level of sharing for the queue. + + + + + The server MUST create a default binding for a newly-created queue to the + default exchange, which is an exchange of type 'direct' and use the queue + name as the routing key. + + + Client creates a new queue, and then without explicitly binding it to an + exchange, attempts to send a message through the default exchange binding, + i.e. publish a message to the empty exchange, with the queue name as routing + key. + + + + + + + The server SHOULD support a minimum of 256 queues per virtual host and ideally, + impose no limit except as defined by available resources. + + + Client attempts to create as many queues as it can until the server reports + an error. The resulting count must at least be 256. + + + + + + + + + When a client defines a new queue, this belongs to the access realm of the + ticket used. All further work done with that queue must be done with an access + ticket for the same realm. + + + + The client MUST provide a valid access ticket giving "active" access to + the realm in which the queue exists or will be created. + + + Client creates access ticket with wrong access rights and attempts to use + in this method. + + + + + + + + The queue name MAY be empty, in which case the server MUST create a new + queue with a unique generated name and return this to the client in the + Declare-Ok method. + + + Client attempts to create several queues with an empty name. The client then + verifies that the server-assigned names are unique and different. + + + + + Queue names starting with "amq." are reserved for pre-declared and + standardised server queues. A client MAY NOT attempt to declare a queue with a + name that starts with "amq." and the passive option set to zero. + + + A client attempts to create a queue with a name starting with "amq." and with + the passive option set to zero. + + + + + + + + If set, the server will not create the queue. This field allows the client + to assert the presence of a queue without modifying the server state. + + + + The client MAY ask the server to assert that a queue exists without + creating the queue if not. If the queue does not exist, the server + treats this as a failure. + + + Client declares an existing queue with the passive option and expects + the server to respond with a declare-ok. Client then attempts to declare + a non-existent queue with the passive option, and the server must close + the channel with the correct reply-code. + + + + + + + If set when creating a new queue, the queue will be marked as durable. Durable + queues remain active when a server restarts. Non-durable queues (transient + queues) are purged if/when a server restarts. Note that durable queues do not + necessarily hold persistent messages, although it does not make sense to send + persistent messages to a transient queue. + + + + The server MUST recreate the durable queue after a restart. + + + + A client creates a durable queue. The server is then restarted. The client + then attempts to send a message to the queue. The message should be successfully + delivered. + + + + + The server MUST support both durable and transient queues. + + A client creates two named queues, one durable and one transient. + + + + + The server MUST ignore the durable field if the queue already exists. + + A client creates two named queues, one durable and one transient. The client + then attempts to declare the two queues using the same names again, but reversing + the value of the durable flag in each case. Verify that the queues still exist + with the original durable flag values. + + + + + + + + Exclusive queues may only be consumed from by the current connection. Setting + the 'exclusive' flag always implies 'auto-delete'. + + + + + + The server MUST support both exclusive (private) and non-exclusive (shared) + queues. + + + A client creates two named queues, one exclusive and one non-exclusive. + + + + + + + The client MAY NOT attempt to declare any existing and exclusive queue + on multiple connections. + + + A client declares an exclusive named queue. A second client on a different + connection attempts to declare a queue of the same name. + + + + + + + If set, the queue is deleted when all consumers have finished using it. Last + consumer can be cancelled either explicitly or because its channel is closed. If + there was no consumer ever on the queue, it won't be deleted. + + + + + + The server MUST ignore the auto-delete field if the queue already exists. + + + A client creates two named queues, one as auto-delete and one explicit-delete. + The client then attempts to declare the two queues using the same names again, + but reversing the value of the auto-delete field in each case. Verify that the + queues still exist with the original auto-delete flag values. + + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + A set of arguments for the declaration. The syntax and semantics of these + arguments depends on the server implementation. This field is ignored if passive + is 1. + + + + + + + This method confirms a Declare method and confirms the name of the queue, essential + for automatically-named queues. + + + + + + + Reports the name of the queue. If the server generated a queue name, this field + contains that name. + + + + + + + Reports the number of messages in the queue, which will be zero for + newly-created queues. + + + + + + Reports the number of active consumers for the queue. Note that consumers can + suspend activity (Channel.Flow) in which case they do not appear in this count. + + + + + + + + + This method binds a queue to an exchange. Until a queue is bound it will not receive + any messages. In a classic messaging model, store-and-forward queues are bound to a + direct exchange and subscription queues are bound to a topic exchange. + + + + + + A server MUST allow ignore duplicate bindings - that is, two or more bind + methods for a specific queue, with identical arguments - without treating these + as an error. + + + A client binds a named queue to an exchange. The client then repeats the bind + (with identical arguments). + + + + + + + If a bind fails, the server MUST raise a connection exception. + + TODO + + + + + + + The server MUST NOT allow a durable queue to bind to a transient exchange. + + + A client creates a transient exchange. The client then declares a named durable + queue and then attempts to bind the transient exchange to the durable queue. + + + + + + + Bindings for durable queues are automatically durable and the server SHOULD + restore such bindings after a server restart. + + + A server creates a named durable queue and binds it to a durable exchange. The + server is restarted. The client then attempts to use the queue/exchange combination. + + + + + + + If the client attempts to bind to an exchange that was declared as internal, the server + MUST raise a connection exception with reply code 530 (not allowed). + + + A client attempts to bind a named queue to an internal exchange. + + + + + + + The server SHOULD support at least 4 bindings per queue, and ideally, impose no + limit except as defined by available resources. + + + A client creates a named queue and attempts to bind it to 4 different non-internal + exchanges. + + + + + + + + + + The client provides a valid access ticket giving "active" access rights to the + queue's access realm. + + + + + + Specifies the name of the queue to bind. If the queue name is empty, refers to + the current queue for the channel, which is the last declared queue. + + + + + A client MUST NOT be allowed to bind a non-existent and unnamed queue (i.e. + empty queue name) to an exchange. + + + A client attempts to bind with an unnamed (empty) queue name to an exchange. + + + + + + + A client MUST NOT be allowed to bind a non-existent queue (i.e. not previously + declared) to an exchange. + + + A client attempts to bind an undeclared queue name to an exchange. + + + + + + + + + A client MUST NOT be allowed to bind a queue to a non-existent exchange. + + + A client attempts to bind an named queue to a undeclared exchange. + + + + + + + Specifies the routing key for the binding. The routing key is used for routing + messages depending on the exchange configuration. Not all exchanges use a + routing key - refer to the specific exchange documentation. If the queue name + is empty, the server uses the last queue declared on the channel. If the + routing key is also empty, the server uses this queue name for the routing + key as well. If the queue name is provided but the routing key is empty, the + server does the binding with that empty routing key. The meaning of empty + routing keys depends on the exchange implementation. + + + + If a message queue binds to a direct exchange using routing key K and a + publisher sends the exchange a message with routing key R, then the message + MUST be passed to the message queue if K = R. + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + A set of arguments for the binding. The syntax and semantics of these arguments + depends on the exchange class. + + + + + + This method confirms that the bind was successful. + + + + + + + + This method unbinds a queue from an exchange. + + If a unbind fails, the server MUST raise a connection exception. + + + + + + + The client provides a valid access ticket giving "active" + access rights to the queue's access realm. + + + + + Specifies the name of the queue to unbind. + + + If the queue does not exist the server MUST raise a channel exception + with reply code 404 (not found). + + + + + + The name of the exchange to unbind from. + + + If the exchange does not exist the server MUST raise a channel + exception with reply code 404 (not found). + + + + + + Specifies the routing key of the binding to unbind. + + + + Specifies the arguments of the binding to unbind. + + + + + This method confirms that the unbind was successful. + + + + + + + + This method removes all messages from a queue. It does not cancel consumers. Purged + messages are deleted without any formal "undo" mechanism. + + + + + A call to purge MUST result in an empty queue. + + + + + + On transacted channels the server MUST not purge messages that have already been + sent to a client but not yet acknowledged. + + + + + + + + + The server MAY implement a purge queue or log that allows system administrators + to recover accidentally-purged messages. The server SHOULD NOT keep purged + messages in the same storage spaces as the live messages since the volumes of + purged messages may get very large. + + + + + + + + + The access ticket must be for the access realm that holds the queue. + + + + The client MUST provide a valid access ticket giving "read" access rights to + the queue's access realm. Note that purging a queue is equivalent to reading + all messages and discarding them. + + + + + + + Specifies the name of the queue to purge. If the queue name is empty, refers to + the current queue for the channel, which is the last declared queue. + + + + + If the client did not previously declare a queue, and the queue name in this + method is empty, the server MUST raise a connection exception with reply + code 530 (not allowed). + + + + + + + + + The queue MUST exist. Attempting to purge a non-existing queue MUST cause a + channel exception. + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + This method confirms the purge of a queue. + + + + + Reports the number of messages purged. + + + + + + + + This method deletes a queue. When a queue is deleted any pending messages are sent + to a dead-letter queue if this is defined in the server configuration, and all + consumers on the queue are cancelled. + + + + + + + + The server SHOULD use a dead-letter queue to hold messages that were pending on + a deleted queue, and MAY provide facilities for a system administrator to move + these messages back to an active queue. + + + + + + + + + + The client provides a valid access ticket giving "active" access rights to the + queue's access realm. + + + + + + Specifies the name of the queue to delete. If the queue name is empty, refers to + the current queue for the channel, which is the last declared queue. + + + + + If the client did not previously declare a queue, and the queue name in this + method is empty, the server MUST raise a connection exception with reply + code 530 (not allowed). + + + + + + + The queue must exist. If the client attempts to delete a non-existing queue + the server MUST raise a channel exception with reply code 404 (not found). + + + + + + + If set, the server will only delete the queue if it has no consumers. If the + queue has consumers the server does does not delete it but raises a channel + exception instead. + + + + + The server MUST respect the if-unused flag when deleting a queue. + + + + + + If set, the server will only delete the queue if it has no messages. + + + + If the queue is not empty the server MUST raise a channel exception with + reply code 406 (precondition failed). + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + This method confirms the deletion of a queue. + + + + + Reports the number of messages purged. + + + + + + + + + The Basic class provides methods that support an industry-standard messaging model. + + + + basic = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL S:CANCEL-OK + / C:PUBLISH content + / S:RETURN content + / S:DELIVER content + / C:GET ( S:GET-OK content / S:GET-EMPTY ) + / C:ACK + / C:REJECT + + + + + + + + + The server SHOULD respect the persistent property of basic messages and + SHOULD make a best-effort to hold persistent basic messages on a reliable + storage mechanism. + + + Send a persistent message to queue, stop server, restart server and then + verify whether message is still present. Assumes that queues are durable. + Persistence without durable queues makes no sense. + + + + + + + The server MUST NOT discard a persistent basic message in case of a queue + overflow. + + + Create a queue overflow situation with persistent messages and verify that + messages do not get lost (presumably the server will write them to disk). + + + + + + The server MAY use the Channel.Flow method to slow or stop a basic message + publisher when necessary. + + + Create a queue overflow situation with non-persistent messages and verify + whether the server responds with Channel.Flow or not. Repeat with persistent + messages. + + + + + + + The server MAY overflow non-persistent basic messages to persistent + storage. + + + + + + + The server MAY discard or dead-letter non-persistent basic messages on a + priority basis if the queue size exceeds some configured limit. + + + + + + + + The server MUST implement at least 2 priority levels for basic messages, + where priorities 0-4 and 5-9 are treated as two distinct levels. + + + Send a number of priority 0 messages to a queue. Send one priority 9 + message. Consume messages from the queue and verify that the first message + received was priority 9. + + + + + + The server MAY implement up to 10 priority levels. + + + Send a number of messages with mixed priorities to a queue, so that all + priority values from 0 to 9 are exercised. A good scenario would be ten + messages in low-to-high priority. Consume from queue and verify how many + priority levels emerge. + + + + + + + The server MUST deliver messages of the same priority in order irrespective of + their individual persistence. + + + Send a set of messages with the same priority but different persistence + settings to a queue. Consume and verify that messages arrive in same order + as originally published. + + + + + + + The server MUST support automatic acknowledgements on Basic content, i.e. + consumers with the no-ack field set to FALSE. + + + Create a queue and a consumer using automatic acknowledgements. Publish + a set of messages to the queue. Consume the messages and verify that all + messages are received. + + + + + + The server MUST support explicit acknowledgements on Basic content, i.e. + consumers with the no-ack field set to TRUE. + + + Create a queue and a consumer using explicit acknowledgements. Publish a + set of messages to the queue. Consume the messages but acknowledge only + half of them. Disconnect and reconnect, and consume from the queue. + Verify that the remaining messages are received. + + + + + + + + + + + + + + + + + + + + + + + + + + This method requests a specific quality of service. The QoS can be specified for the + current channel or for all channels on the connection. The particular properties and + semantics of a qos method always depend on the content class semantics. Though the + qos method could in principle apply to both peers, it is currently meaningful only + for the server. + + + + + + + + The client can request that messages be sent in advance so that when the client + finishes processing a message, the following message is already held locally, + rather than needing to be sent down the channel. Prefetching gives a performance + improvement. This field specifies the prefetch window size in octets. The server + will send a message in advance if it is equal to or smaller in size than the + available prefetch size (and also falls into other prefetch limits). May be set + to zero, meaning "no specific limit", although other prefetch limits may still + apply. The prefetch-size is ignored if the no-ack option is set. + + + + + The server MUST ignore this setting when the client is not processing any + messages - i.e. the prefetch size does not limit the transfer of single + messages to a client, only the sending in advance of more messages while + the client still has one or more unacknowledged messages. + + + Define a QoS prefetch-size limit and send a single message that exceeds + that limit. Verify that the message arrives correctly. + + + + + + + Specifies a prefetch window in terms of whole messages. This field may be used + in combination with the prefetch-size field; a message will only be sent in + advance if both prefetch windows (and those at the channel and connection level) + allow it. The prefetch-count is ignored if the no-ack option is set. + + + + + The server may send less data in advance than allowed by the client's + specified prefetch windows but it MUST NOT send more. + + + Define a QoS prefetch-size limit and a prefetch-count limit greater than + one. Send multiple messages that exceed the prefetch size. Verify that + no more than one message arrives at once. + + + + + + + By default the QoS settings apply to the current channel only. If this field is + set, they are applied to the entire connection. + + + + + + + This method tells the client that the requested QoS levels could be handled by the + server. The requested QoS applies to all active consumers until a new QoS is + defined. + + + + + + + + + This method asks the server to start a "consumer", which is a transient request for + messages from a specific queue. Consumers last as long as the channel they were + created on, or until the client cancels them. + + + + + + The server SHOULD support at least 16 consumers per queue, and ideally, impose + no limit except as defined by available resources. + + + Create a queue and create consumers on that queue until the server closes the + connection. Verify that the number of consumers created was at least sixteen + and report the total number. + + + + + + + + + + The client MUST provide a valid access ticket giving "read" access rights to + the realm for the queue. + + + Attempt to create a consumer with an invalid (non-zero) access ticket. + + + + + + + Specifies the name of the queue to consume from. If the queue name is null, + refers to the current queue for the channel, which is the last declared queue. + + + + If the queue name is empty the client MUST have previously declared a + queue using this channel. + + + Attempt to create a consumer with an empty queue name and no previously + declared queue on the channel. + + + + + + + Specifies the identifier for the consumer. The consumer tag is local to a + connection, so two clients can use the same consumer tags. If this field is + empty the server will generate a unique tag. + + + + The client MUST NOT specify a tag that refers to an existing consumer. + + + Attempt to create two consumers with the same non-empty tag. + + + + + The consumer tag is valid only within the channel from which the + consumer was created. I.e. a client MUST NOT create a consumer in one + channel and then use it in another. + + + Attempt to create a consumer in one channel, then use in another channel, + in which consumers have also been created (to test that the server uses + unique consumer tags). + + + + + + + + + + + Request exclusive consumer access, meaning only this consumer can access the + queue. + + + + + The client MAY NOT gain exclusive access to a queue that already has + active consumers. + + + Open two connections to a server, and in one connection create a shared + (non-exclusive) queue and then consume from the queue. In the second + connection attempt to consume from the same queue using the exclusive + option. + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise + a channel or connection exception. + + + + + + + A set of filters for the consume. The syntax and semantics + of these filters depends on the providers implementation. + + + + + + + The server provides the client with a consumer tag, which is used by the client + for methods called on the consumer at a later stage. + + + + + Holds the consumer tag specified by the client or provided by the server. + + + + + + + + + This method cancels a consumer. This does not affect already delivered + messages, but it does mean the server will not send any more messages for + that consumer. The client may receive an arbitrary number of messages in + between sending the cancel method and receiving the cancel-ok reply. + + + + + If the queue does not exist the server MUST ignore the cancel method, so + long as the consumer tag is valid for that channel. + + + TODO. + + + + + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + + This method confirms that the cancellation was completed. + + + + + + + + + + This method publishes a message to a specific exchange. The message will be routed + to queues as defined by the exchange configuration and distributed to any active + consumers when the transaction, if any, is committed. + + + + + + + + The client MUST provide a valid access ticket giving "write" access rights + to the access realm for the exchange. + + + TODO. + + + + + + + Specifies the name of the exchange to publish to. The exchange name can be + empty, meaning the default exchange. If the exchange name is specified, and that + exchange does not exist, the server will raise a channel exception. + + + + + + The server MUST accept a blank exchange name to mean the default exchange. + + + TODO. + + + + + + + If the exchange was declared as an internal exchange, the server MUST raise + a channel exception with a reply code 403 (access refused). + + + TODO. + + + + + + + The exchange MAY refuse basic content in which case it MUST raise a channel + exception with reply code 540 (not implemented). + + + TODO. + + + + + + + Specifies the routing key for the message. The routing key is used for routing + messages depending on the exchange configuration. + + + + + + This flag tells the server how to react if the message cannot be routed to a + queue. If this flag is set, the server will return an unroutable message with a + Return method. If this flag is zero, the server silently drops the message. + + + + + The server SHOULD implement the mandatory flag. + + + TODO. + + + + + + + This flag tells the server how to react if the message cannot be routed to a + queue consumer immediately. If this flag is set, the server will return an + undeliverable message with a Return method. If this flag is zero, the server + will queue the message, but with no guarantee that it will ever be consumed. + + + + + The server SHOULD implement the immediate flag. + + + TODO. + + + + + + + + This method returns an undeliverable message that was published with the "immediate" + flag set, or an unroutable message published with the "mandatory" flag set. The + reply code and text provide information about the reason that the message was + undeliverable. + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + + Specifies the routing key name specified when the message was published. + + + + + + + + + This method delivers a message to the client, via a consumer. In the asynchronous + message delivery model, the client starts a consumer using the Consume method, then + the server responds with Deliver methods as and when messages arrive for that + consumer. + + + + + + + The server SHOULD track the number of times a message has been delivered to + clients and when a message is redelivered a certain number of times - e.g. 5 + times - without being acknowledged, the server SHOULD consider the message to be + unprocessable (possibly causing client applications to abort), and move the + message to a dead letter queue. + + + TODO. + + + + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + Specifies the routing key name specified when the message was published. + + + + + + + + This method provides a direct access to the messages in a queue using a synchronous + dialogue that is designed for specific types of application where synchronous + functionality is more important than performance. + + + + + + + + + + The client MUST provide a valid access ticket giving "read" access rights to + the realm for the queue. + + + TODO. + + + + + + + Specifies the name of the queue to consume from. If the queue name is null, + refers to the current queue for the channel, which is the last declared queue. + + + + If the client did not previously declare a queue, and the queue name in this + method is empty, the server MUST raise a connection exception with reply + code 530 (not allowed). + + + TODO. + + + + + + + + + + This method delivers a message to the client following a get method. A message + delivered by 'get-ok' must be acknowledged unless the no-ack option was set in the + get method. + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + If empty, the message was published to the default exchange. + + + + + Specifies the routing key name specified when the message was published. + + + + + This field reports the number of messages pending on the queue, excluding the + message being delivered. Note that this figure is indicative, not reliable, and + can change arbitrarily as messages are added to the queue and removed by other + clients. + + + + + + + This method tells the client that the queue has no messages available for the + client. + + + + + + + + For use by cluster applications, should not be used by client applications. + + + + + + + + + This method acknowledges one or more messages delivered via the Deliver or Get-Ok + methods. The client can ask to confirm a single message or a set of messages up to + and including a specific message. + + + + + + + + + If set to 1, the delivery tag is treated as "up to and including", so that the + client can acknowledge multiple messages with a single method. If set to zero, + the delivery tag refers to a single message. If the multiple field is 1, and the + delivery tag is zero, tells the server to acknowledge all outstanding messages. + + + + + + The server MUST validate that a non-zero delivery-tag refers to an delivered + message, and raise a channel exception if this is not the case. + + + TODO. + + + + + + + + + + This method allows a client to reject a message. It can be used to interrupt and + cancel large incoming messages, or return untreatable messages to their original + queue. + + + + + + The server SHOULD be capable of accepting and process the Reject method while + sending message content with a Deliver or Get-Ok method. I.e. the server should + read and process incoming methods while sending output frames. To cancel a + partially-send content, the server sends a content body frame of size 1 (i.e. + with no data except the frame-end octet). + + + + + + + The server SHOULD interpret this method as meaning that the client is unable to + process the message at this time. + + + TODO. + + + + + + + A client MUST NOT use this method as a means of selecting messages to process. A + rejected message MAY be discarded or dead-lettered, not necessarily passed to + another client. + + + TODO. + + + + + + + + + + If this field is zero, the message will be discarded. If this bit is 1, the + server will attempt to requeue the message. + + + + + + + The server MUST NOT deliver the message to the same client within the + context of the current channel. The recommended strategy is to attempt to + deliver the message to an alternative consumer, and if that is not possible, + to move the message to a dead-letter queue. The server MAY use more + sophisticated tracking to hold the message on the queue and redeliver it to + the same client at a later stage. + + + TODO. + + + + + + + + This method asks the broker to redeliver all unacknowledged messages on a specified + channel. Zero or more messages may be redelivered. This method is only allowed on + non-transacted channels. + + + + + The server MUST set the redelivered flag on all messages that are resent. + + + TODO. + + + + + + The server MUST raise a channel exception if this is called on a transacted + channel. + + + TODO. + + + + + + + + If this field is zero, the message will be redelivered to the original + recipient. If this bit is 1, the server will attempt to requeue the message, + potentially then delivering it to an alternative subscriber. + + + + + + + + redeliver unacknowledged messages + + This method asks the broker to redeliver all unacknowledged messages on a + specified channel. Zero or more messages may be redelivered. This method + is only allowed on non-transacted channels. + + + + + requeue the message + + If this field is zero, the message will be redelivered to the original + recipient. If this bit is 1, the server will attempt to requeue the + message, potentially then delivering it to an alternative subscriber. + + + + The server MUST set the redelivered flag on all messages that are resent. + + + The server MUST raise a channel exception if this is called on a + transacted channel. + + + + + confirm a successful recover + + This method confirms to the client that the recover succeeded. + Note that if an recover fails, the server raises a channel exception. + + + + + + + + + + + + The file class provides methods that support reliable file transfer. File + messages have a specific set of properties that are required for interoperability + with file transfer applications. File messages and acknowledgements are subject to + channel transactions. Note that the file class does not provide message browsing + methods; these are not compatible with the staging model. Applications that need + browsable file transfer should use Basic content and the Basic class. + + + + file = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL S:CANCEL-OK + / C:OPEN S:OPEN-OK C:STAGE content + / S:OPEN C:OPEN-OK S:STAGE content + / C:PUBLISH + / S:DELIVER + / S:RETURN + / C:ACK + / C:REJECT + + + + + + + + The server MUST make a best-effort to hold file messages on a reliable storage + mechanism. + + + + + + + + + + The server MUST NOT discard a file message in case of a queue overflow. The server + MUST use the Channel.Flow method to slow or stop a file message publisher when + necessary. + + + + + + + + The server MUST implement at least 2 priority levels for file messages, where + priorities 0-4 and 5-9 are treated as two distinct levels. The server MAY implement + up to 10 priority levels. + + + + + + The server MUST support both automatic and explicit acknowledgements on file + content. + + + + + + + + + + + + + + + + + + + + + This method requests a specific quality of service. The QoS can be specified for the + current channel or for all channels on the connection. The particular properties and + semantics of a qos method always depend on the content class semantics. Though the + qos method could in principle apply to both peers, it is currently meaningful only + for the server. + + + + + + + + + The client can request that messages be sent in advance so that when the client + finishes processing a message, the following message is already held locally, + rather than needing to be sent down the channel. Prefetching gives a performance + improvement. This field specifies the prefetch window size in octets. May be set + to zero, meaning "no specific limit". Note that other prefetch limits may still + apply. The prefetch-size is ignored if the no-ack option is set. + + + + + + Specifies a prefetch window in terms of whole messages. This is compatible with + some file API implementations. This field may be used in combination with the + prefetch-size field; a message will only be sent in advance if both prefetch + windows (and those at the channel and connection level) allow it. The + prefetch-count is ignored if the no-ack option is set. + + + + + + The server MAY send less data in advance than allowed by the client's + specified prefetch windows but it MUST NOT send more. + + + + + + + By default the QoS settings apply to the current channel only. If this field is + set, they are applied to the entire connection. + + + + + + + This method tells the client that the requested QoS levels could be handled by the + server. The requested QoS applies to all active consumers until a new QoS is + defined. + + + + + + + + + + This method asks the server to start a "consumer", which is a transient request for + messages from a specific queue. Consumers last as long as the channel they were + created on, or until the client cancels them. + + + + + The server SHOULD support at least 16 consumers per queue, unless the queue was + declared as private, and ideally, impose no limit except as defined by available + resources. + + + + + + + + + + + The client MUST provide a valid access ticket giving "read" access rights to + the realm for the queue. + + + + + + + Specifies the name of the queue to consume from. If the queue name is null, + refers to the current queue for the channel, which is the last declared queue. + + + + + If the client did not previously declare a queue, and the queue name in this + method is empty, the server MUST raise a connection exception with reply + code 530 (not allowed). + + + + + + + Specifies the identifier for the consumer. The consumer tag is local to a + connection, so two clients can use the same consumer tags. If this field is + empty the server will generate a unique tag. + + + + + + The tag MUST NOT refer to an existing consumer. If the client attempts to + create two consumers with the same non-empty tag the server MUST raise a + connection exception with reply code 530 (not allowed). + + + + + + + + + + + Request exclusive consumer access, meaning only this consumer can access the + queue. + + + + + + If the server cannot grant exclusive access to the queue when asked, - + because there are other consumers active - it MUST raise a channel exception + with return code 405 (resource locked). + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + A set of filters for the consume. The syntax and semantics + of these filters depends on the providers implementation. + + + + + + + This method provides the client with a consumer tag which it MUST use in methods + that work with the consumer. + + + + + + Holds the consumer tag specified by the client or provided by the server. + + + + + + + + This method cancels a consumer. This does not affect already delivered messages, but + it does mean the server will not send any more messages for that consumer. + + + + + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + This method confirms that the cancellation was completed. + + + + + + + + + + + This method requests permission to start staging a message. Staging means sending + the message into a temporary area at the recipient end and then delivering the + message by referring to this temporary area. Staging is how the protocol handles + partial file transfers - if a message is partially staged and the connection breaks, + the next time the sender starts to stage it, it can restart from where it left off. + + + + + + + + + + This is the staging identifier. This is an arbitrary string chosen by the + sender. For staging to work correctly the sender must use the same staging + identifier when staging the same message a second time after recovery from a + failure. A good choice for the staging identifier would be the SHA1 hash of the + message properties data (including the original filename, revised time, etc.). + + + + + + The size of the content in octets. The recipient may use this information to + allocate or check available space in advance, to avoid "disk full" errors during + staging of very large messages. + + + + + The sender MUST accurately fill the content-size field. Zero-length content + is permitted. + + + + + + + + This method confirms that the recipient is ready to accept staged data. If the + message was already partially-staged at a previous time the recipient will report + the number of octets already staged. + + + + + + + + + + The amount of previously-staged content in octets. For a new message this will + be zero. + + + + + The sender MUST start sending data from this octet offset in the message, + counting from zero. + + + + + + + The recipient MAY decide how long to hold partially-staged content and MAY + implement staging by always discarding partially-staged content. However if + it uses the file content type it MUST support the staging methods. + + + + + + + + + + This method stages the message, sending the message content to the recipient from + the octet offset specified in the Open-Ok method. + + + + + + + + + + + This method publishes a staged file message to a specific exchange. The file message + will be routed to queues as defined by the exchange configuration and distributed to + any active consumers when the transaction, if any, is committed. + + + + + + + + The client MUST provide a valid access ticket giving "write" access rights + to the access realm for the exchange. + + + + + + + Specifies the name of the exchange to publish to. The exchange name can be + empty, meaning the default exchange. If the exchange name is specified, and that + exchange does not exist, the server will raise a channel exception. + + + + + The server MUST accept a blank exchange name to mean the default exchange. + + + + + + If the exchange was declared as an internal exchange, the server MUST + respond with a reply code 403 (access refused) and raise a channel + exception. + + + + + + + + The exchange MAY refuse file content in which case it MUST respond with a + reply code 540 (not implemented) and raise a channel exception. + + + + + + + Specifies the routing key for the message. The routing key is used for routing + messages depending on the exchange configuration. + + + + + + This flag tells the server how to react if the message cannot be routed to a + queue. If this flag is set, the server will return an unroutable message with a + Return method. If this flag is zero, the server silently drops the message. + + + + + The server SHOULD implement the mandatory flag. + + + + + + This flag tells the server how to react if the message cannot be routed to a + queue consumer immediately. If this flag is set, the server will return an + undeliverable message with a Return method. If this flag is zero, the server + will queue the message, but with no guarantee that it will ever be consumed. + + + + + The server SHOULD implement the immediate flag. + + + + + + This is the staging identifier of the message to publish. The message must have + been staged. Note that a client can send the Publish method asynchronously + without waiting for staging to finish. + + + + + + + This method returns an undeliverable message that was published with the "immediate" + flag set, or an unroutable message published with the "mandatory" flag set. The + reply code and text provide information about the reason that the message was + undeliverable. + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + Specifies the routing key name specified when the message was published. + + + + + + + + This method delivers a staged file message to the client, via a consumer. In the + asynchronous message delivery model, the client starts a consumer using the Consume + method, then the server responds with Deliver methods as and when messages arrive + for that consumer. + + + + + + The server SHOULD track the number of times a message has been delivered to + clients and when a message is redelivered a certain number of times - e.g. 5 + times - without being acknowledged, the server SHOULD consider the message to be + unprocessable (possibly causing client applications to abort), and move the + message to a dead letter queue. + + + + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + Specifies the routing key name specified when the message was published. + + + + + This is the staging identifier of the message to deliver. The message must have + been staged. Note that a server can send the Deliver method asynchronously + without waiting for staging to finish. + + + + + + + + + This method acknowledges one or more messages delivered via the Deliver method. The + client can ask to confirm a single message or a set of messages up to and including + a specific message. + + + + + + + + + If set to 1, the delivery tag is treated as "up to and including", so that the + client can acknowledge multiple messages with a single method. If set to zero, + the delivery tag refers to a single message. If the multiple field is 1, and the + delivery tag is zero, tells the server to acknowledge all outstanding messages. + + + + + The server MUST validate that a non-zero delivery-tag refers to an delivered + message, and raise a channel exception if this is not the case. + + + + + + + + + + This method allows a client to reject a message. It can be used to return + untreatable messages to their original queue. Note that file content is staged + before delivery, so the client will not use this method to interrupt delivery of a + large message. + + + + + The server SHOULD interpret this method as meaning that the client is unable to + process the message at this time. + + + + + + + + A client MUST NOT use this method as a means of selecting messages to process. A + rejected message MAY be discarded or dead-lettered, not necessarily passed to + another client. + + + + + + + + + + If this field is zero, the message will be discarded. If this bit is 1, the + server will attempt to requeue the message. + + + + + + The server MUST NOT deliver the message to the same client within the + context of the current channel. The recommended strategy is to attempt to + deliver the message to an alternative consumer, and if that is not possible, + to move the message to a dead-letter queue. The server MAY use more + sophisticated tracking to hold the message on the queue and redeliver it to + the same client at a later stage. + + + + + + + + + + + The stream class provides methods that support multimedia streaming. The stream class + uses the following semantics: one message is one packet of data; delivery is + unacknowledged and unreliable; the consumer can specify quality of service parameters + that the server can try to adhere to; lower-priority messages may be discarded in favour + of high priority messages. + + + + stream = C:QOS S:QOS-OK + / C:CONSUME S:CONSUME-OK + / C:CANCEL S:CANCEL-OK + / C:PUBLISH content + / S:RETURN + / S:DELIVER content + + + + + + + + The server SHOULD discard stream messages on a priority basis if the queue size + exceeds some configured limit. + + + + + + + The server MUST implement at least 2 priority levels for stream messages, where + priorities 0-4 and 5-9 are treated as two distinct levels. The server MAY implement + up to 10 priority levels. + + + + + + The server MUST implement automatic acknowledgements on stream content. That is, as + soon as a message is delivered to a client via a Deliver method, the server must + remove it from the queue. + + + + + + + + + + + + + + + + This method requests a specific quality of service. The QoS can be specified for the + current channel or for all channels on the connection. The particular properties and + semantics of a qos method always depend on the content class semantics. Though the + qos method could in principle apply to both peers, it is currently meaningful only + for the server. + + + + + + + + + The client can request that messages be sent in advance so that when the client + finishes processing a message, the following message is already held locally, + rather than needing to be sent down the channel. Prefetching gives a performance + improvement. This field specifies the prefetch window size in octets. May be set + to zero, meaning "no specific limit". Note that other prefetch limits may still + apply. + + + + + + Specifies a prefetch window in terms of whole messages. This field may be used + in combination with the prefetch-size field; a message will only be sent in + advance if both prefetch windows (and those at the channel and connection level) + allow it. + + + + + + Specifies a desired transfer rate in octets per second. This is usually + determined by the application that uses the streaming data. A value of zero + means "no limit", i.e. as rapidly as possible. + + + + + + The server MAY ignore the prefetch values and consume rates, depending on + the type of stream and the ability of the server to queue and/or reply it. + The server MAY drop low-priority messages in favour of high-priority + messages. + + + + + + + By default the QoS settings apply to the current channel only. If this field is + set, they are applied to the entire connection. + + + + + + + This method tells the client that the requested QoS levels could be handled by the + server. The requested QoS applies to all active consumers until a new QoS is + defined. + + + + + + + + + + This method asks the server to start a "consumer", which is a transient request for + messages from a specific queue. Consumers last as long as the channel they were + created on, or until the client cancels them. + + + + + The server SHOULD support at least 16 consumers per queue, unless the queue was + declared as private, and ideally, impose no limit except as defined by available + resources. + + + + + + Streaming applications SHOULD use different channels to select different + streaming resolutions. AMQP makes no provision for filtering and/or transforming + streams except on the basis of priority-based selective delivery of individual + messages. + + + + + + + + + + The client MUST provide a valid access ticket giving "read" access rights to + the realm for the queue. + + + + + + + Specifies the name of the queue to consume from. If the queue name is null, + refers to the current queue for the channel, which is the last declared queue. + + + + + If the client did not previously declare a queue, and the queue name in this + method is empty, the server MUST raise a connection exception with reply + code 530 (not allowed). + + + + + + + Specifies the identifier for the consumer. The consumer tag is local to a + connection, so two clients can use the same consumer tags. If this field is + empty the server will generate a unique tag. + + + + + + The tag MUST NOT refer to an existing consumer. If the client attempts to + create two consumers with the same non-empty tag the server MUST raise a + connection exception with reply code 530 (not allowed). + + + + + + + + + Request exclusive consumer access, meaning only this consumer can access the + queue. + + + + + + + If the server cannot grant exclusive access to the queue when asked, - + because there are other consumers active - it MUST raise a channel exception + with return code 405 (resource locked). + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + A set of filters for the consume. The syntax and semantics + of these filters depends on the providers implementation. + + + + + + + This method provides the client with a consumer tag which it may use in methods that + work with the consumer. + + + + + + Holds the consumer tag specified by the client or provided by the server. + + + + + + + + This method cancels a consumer. Since message delivery is asynchronous the client + may continue to receive messages for a short while after cancelling a consumer. It + may process or discard these as appropriate. + + + + + + + + + + + If set, the server will not respond to the method. The client should not wait + for a reply method. If the server could not complete the method it will raise a + channel or connection exception. + + + + + + This method confirms that the cancellation was completed. + + + + + + + + + + + This method publishes a message to a specific exchange. The message will be routed + to queues as defined by the exchange configuration and distributed to any active + consumers as appropriate. + + + + + + + + The client MUST provide a valid access ticket giving "write" access rights + to the access realm for the exchange. + + + + + + + Specifies the name of the exchange to publish to. The exchange name can be + empty, meaning the default exchange. If the exchange name is specified, and that + exchange does not exist, the server will raise a channel exception. + + + + + The server MUST accept a blank exchange name to mean the default exchange. + + + + + + If the exchange was declared as an internal exchange, the server MUST + respond with a reply code 403 (access refused) and raise a channel + exception. + + + + + + The exchange MAY refuse stream content in which case it MUST respond with a + reply code 540 (not implemented) and raise a channel exception. + + + + + + + Specifies the routing key for the message. The routing key is used for routing + messages depending on the exchange configuration. + + + + + + This flag tells the server how to react if the message cannot be routed to a + queue. If this flag is set, the server will return an unroutable message with a + Return method. If this flag is zero, the server silently drops the message. + + + + + The server SHOULD implement the mandatory flag. + + + + + + This flag tells the server how to react if the message cannot be routed to a + queue consumer immediately. If this flag is set, the server will return an + undeliverable message with a Return method. If this flag is zero, the server + will queue the message, but with no guarantee that it will ever be consumed. + + + + + The server SHOULD implement the immediate flag. + + + + + + + This method returns an undeliverable message that was published with the "immediate" + flag set, or an unroutable message published with the "mandatory" flag set. The + reply code and text provide information about the reason that the message was + undeliverable. + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + Specifies the routing key name specified when the message was published. + + + + + + + + This method delivers a message to the client, via a consumer. In the asynchronous + message delivery model, the client starts a consumer using the Consume method, then + the server responds with Deliver methods as and when messages arrive for that + consumer. + + + + + + + + + + + Specifies the name of the exchange that the message was originally published to. + + + + + + Specifies the name of the queue that the message came from. Note that a single + channel can start many consumers on different queues. + + + + + + + + + + + Standard transactions provide so-called "1.5 phase commit". We can ensure that work is + never lost, but there is a chance of confirmations being lost, so that messages may be + resent. Applications that use standard transactions must be able to detect and ignore + duplicate messages. + + + + + + + An client using standard transactions SHOULD be able to track all messages received + within a reasonable period, and thus detect and reject duplicates of the same + message. It SHOULD NOT pass these to the application layer. + + + + + tx = C:SELECT S:SELECT-OK + / C:COMMIT S:COMMIT-OK + / C:ROLLBACK S:ROLLBACK-OK + + + + + + + + + + This method sets the channel to use standard transactions. The client must use this + method at least once on a channel before using the Commit or Rollback methods. + + + + + + + + This method confirms to the client that the channel was successfully set to use + standard transactions. + + + + + + + + + This method commits all messages published and acknowledged in the current + transaction. A new transaction starts immediately after a commit. + + + + + + + + This method confirms to the client that the commit succeeded. Note that if a commit + fails, the server raises a channel exception. + + + + + + + + + This method abandons all messages published and acknowledged in the current + transaction. A new transaction starts immediately after a rollback. + + + + + + + + This method confirms to the client that the rollback succeeded. Note that if an + rollback fails, the server raises a channel exception. + + + + + + + + + + Distributed transactions provide so-called "2-phase commit". The AMQP distributed + transaction model supports the X-Open XA architecture and other distributed transaction + implementations. The Dtx class assumes that the server has a private communications + channel (not AMQP) to a distributed transaction coordinator. + + + + dtx = C:SELECT S:SELECT-OK + C:START S:START-OK + + + + + + + + + + This method sets the channel to use distributed transactions. The client must use + this method at least once on a channel before using the Start method. + + + + + + + + This method confirms to the client that the channel was successfully set to use + distributed transactions. + + + + + + + + + This method starts a new distributed transaction. This must be the first method on a + new channel that uses the distributed transaction mode, before any methods that + publish or consume messages. + + + + + + The distributed transaction key. This identifies the transaction so that the + AMQP server can coordinate with the distributed transaction coordinator. + + + + + + + + This method confirms to the client that the transaction started. Note that if a + start fails, the server raises a channel exception. + + + + + + + + + + The tunnel methods are used to send blocks of binary data - which can be serialised AMQP + methods or other protocol frames - between AMQP peers. + + + + tunnel = C:REQUEST + / S:REQUEST + + + + + + + + + + + + + + + + This method tunnels a block of binary data, which can be an encoded + AMQP method or other data. The binary data is sent as the content for + the Tunnel.Request method. + + + + + This field table holds arbitrary meta-data that the sender needs to + pass to the recipient. + + + + + + + + + + [WORK IN PROGRESS] The message class provides methods that support an industry-standard messaging model. + + + + message = C:QOS S:OK + / C:CONSUME S:OK + / C:CANCEL S:OK + / C:TRANSFER ( S:OK / S:REJECT ) + / S:TRANSFER ( C:OK / C:REJECT ) + / C:GET ( S:OK / S:EMPTY ) + / C:RECOVER S:OK + / C:OPEN S:OK + / S:OPEN C:OK + / C:APPEND S:OK + / S:APPEND C:OK + / C:CLOSE S:OK + / S:CLOSE C:OK + / C:CHECKPOINT S:OK + / S:CHECKPOINT C:OK + / C:RESUME S:OFFSET + / S:RESUME C:OFFSET + + + + + + + + The server SHOULD respect the persistent property of messages + and SHOULD make a best-effort to hold persistent mess ages on + a reliable storage mechanism. + + + Send a persistent message to queue, stop server, restart + server and then verify whether message is still present. + Assumes that queues are durable. Persistence without durable + queues makes no sense. + + + + + + The server MUST NOT discard a persistent message in case of a + queue overflow. + + + Create a queue overflow situation with persistent messages and + verify that messages do not get lost (presumably the server + will write them to disk). + + + + + + The server MAY use the Channel.Flow method to slow or stop a + message publisher when necessary. + + + Create a queue overflow situation with non-persistent messages + and verify whether the server responds with Channel.Flow or + not. Repeat with persistent messages. + + + + + + The server MAY overflow non-persistent messages to persistent + storage. + + + + + + The server MAY discard or dead-letter non-persistent messages + on a priority basis if the queue size exceeds some configured + limit. + + + + + + The server MUST implement at least 2 priority levels for + messages, where priorities 0-4 and 5-9 are treated as two + distinct levels. + + + Send a number of priority 0 messages to a queue. Send one + priority 9 message. Consume messages from the queue and verify + that the first message received was priority 9. + + + + + + The server MAY implement up to 10 priority levels. + + + Send a number of messages with mixed priorities to a queue, so + that all priority values from 0 to 9 are exercised. A good + scenario would be ten messages in low-to-high priority. + Consume from queue and verify how many priority levels emerge. + + + + + + The server MUST deliver messages of the same priority in order + irrespective of their individual persistence. + + + Send a set of messages with the same priority but different + persistence settings to a queue. Consume and verify that + messages arrive in same order as originally published. + + + + + + The server MUST support automatic acknowledgements on + messages, i.e. consumers with the no-ack field set to FALSE. + + + Create a queue and a consumer using automatic + acknowledgements. Publish a set of messages to the queue. + Consume the messages and verify that all messages are + received. + + + + + + The server MUST support explicit acknowledgements on messages, + i.e. consumers with the no-ack field set to TRUE. + + + Create a queue and a consumer using explicit acknowledgements. + Publish a set of messages to the queue. Consume the messages + but acknowledge only half of them. Disconnect and reconnect, + and consume from the queue. Verify that the remaining messages + are received. + + + + + + + + [WORK IN PROGRESS] This method transfers a message between two peers. When a + client uses this method to publish a message to a broker, the + destination identifies a specific exchange. The message will + then be routed to queues as defined by the exchange + configuration and distributed to any active consumers when the + transaction, if any, is committed. + + In the asynchronous message delivery model, the client starts + a consumer using the Consume method and passing in a + destination, then the broker responds with transfer methods to + the specified destination as and when messages arrive for that + consumer. + + If synchronous message delivery is required, the client may + issue a get request which on success causes a single message + to be transferred to the specified destination. + + Message acknowledgement is signalled by the return result of + this method. + + + + + The recipient MUST NOT return ok before the message has been + processed as defined by the QoS settings. + + + + + + + + + + + + The client MUST provide a valid access ticket giving "write" access rights + to the access realm for the exchange. + + + + + + + Specifies the destination to which the message is to be + transferred. The destination can be empty, meaning the + default exchange or consumer. If the destination is + specified, and that exchange or consumer does not exist, the + peer must raise a channel exception. + + + + + The server MUST accept a blank destination to mean the + default exchange. + + + + + + If the destination refers to an internal exchange, the + server MUST raise a channel exception with a reply code + 403 (access refused). + + + + + + A destination MAY refuse message content in which case it + MUST raise a channel exception with reply code 540 (not + implemented). + + + + + + + + + This flag tells the server how to react if the message + cannot be routed to a queue consumer immediately. If this + flag is set, the server will reject the message. If this + flag is zero, the server will queue the message, but with no + guarantee that it will ever be consumed. + + + + The server SHOULD implement the immediate flag. + + + + + + + If this is set to a non zero value then a message expiration + time will be computed based on the current time plus this + value. Messages that live longer than their expiration time + will be discarded (or dead lettered). + + + + If a message is transfered between brokers before delivery + to a final consumer the ttl should be decremented before + peer to peer transfer and both timestamp and expiration + should be cleared. + + + + + + + + + Set on arrival by the broker. + + + + + + The expiration header assigned by the broker. After + receiving the message the broker sets expiration to the sum + of the ttl specified in the publish method and the current + time. (ttl = expiration - timestamp) + + + + + + + + + + + + + + + + + + + + + + + + [WORK IN PROGRESS] This method asks the server to start a "consumer", which is a transient request for + messages from a specific queue. Consumers last as long as the channel they were + created on, or until the client cancels them. + + + + + The server SHOULD support at least 16 consumers per queue, and ideally, impose + no limit except as defined by available resources. + + + Create a queue and create consumers on that queue until the server closes the + connection. Verify that the number of consumers created was at least sixteen + and report the total number. + + + + + + + + + + The client MUST provide a valid access ticket giving "read" access rights to + the realm for the queue. + + + Attempt to create a consumer with an invalid (non-zero) access ticket. + + + + + + + Specifies the name of the queue to consume from. If the queue name is null, + refers to the current queue for the channel, which is the last declared queue. + + + + If the queue name is empty the client MUST have previously declared a + queue using this channel. + + + Attempt to create a consumer with an empty queue name and no previously + declared queue on the channel. + + + + + + + Specifies the destination for the consumer. The destination is local to a + connection, so two clients can use the same destination. + + + + The client MUST NOT specify a destination that refers to an existing consumer. + + + Attempt to create two consumers with the same non-empty destination. + + + + + The destination is valid only within the channel from which the + consumer was created. I.e. a client MUST NOT create a consumer in one + channel and then use it in another. + + + Attempt to create a consumer in one channel, then use in another channel, + in which consumers have also been created (to test that the server uses + unique destinations). + + + + + + + + + + + Request exclusive consumer access, meaning only this consumer can access the + queue. + + + + + The client MAY NOT gain exclusive access to a queue that already has + active consumers. + + + Open two connections to a server, and in one connection create a shared + (non-exclusive) queue and then consume from the queue. In the second + connection attempt to consume from the same queue using the exclusive + option. + + + + + + + A set of filters for the consume. The syntax and semantics + of these filters depends on the providers implementation. + + + + + + + + + [WORK IN PROGRESS] This method cancels a consumer. This does not affect already delivered + messages, but it does mean the server will not send any more messages for + that consumer. The client may receive an arbitrary number of messages in + between sending the cancel method and receiving the cancel-ok reply. + + + + + If the queue does not exist the server MUST ignore the cancel method, so + long as the consumer tag is valid for that channel. + + + + + + + + + + + + + + [WORK IN PROGRESS] This method provides a direct access to the messages in a queue using a synchronous + dialogue that is designed for specific types of application where synchronous + functionality is more important than performance. + + + + + + + + + + The client MUST provide a valid access ticket giving "read" access rights to + the realm for the queue. + + + + + + Specifies the name of the queue to consume from. If the queue name is null, + refers to the current queue for the channel, which is the last declared queue. + + + + If the client did not previously declare a queue, and the queue name in this + method is empty, the server MUST raise a connection exception with reply + code 530 (not allowed). + + + + + + + On normal completion of the get request (i.e. a response of + ok). A message will be transferred to the supplied destination. + + + + + + + + + + + [WORK IN PROGRESS] This method asks the broker to redeliver all unacknowledged + messages on a specified channel. Zero or more messages may be + redelivered. This method is only allowed on non-transacted + channels. + + + + + The server MUST set the redelivered flag on all messages + that are resent. + + + + + + The server MUST raise a channel exception if this is called + on a transacted channel. + + + + + + + + + If this field is zero, the message will be redelivered to + the original recipient. If this bit is 1, the server will + attempt to requeue the message, potentially then delivering + it to an alternative subscriber. + + + + + + + + + [WORK IN PROGRESS] This method creates a reference. A references provides a means + to send a message body into a temporary area at the recipient + end and then deliver the message by referring to this + temporary area. This is how the protocol handles large message + transfers. + + The scope of a ref is defined to be between calls to + open (or resume) and close. Between these points it is valid + for a ref to be used from any content data type, and so the + receiver must hold onto its contents. Should the channel be + closed when a ref is still in scope, the receiver may discard + its contents (unless it is checkpointed). A ref that is in + scope is considered open. + + + + + + + + + + The recipient MUST generate an error if the reference is + currently open (in scope). + + + + + + + + + + [WORK IN PROGRESS] This method signals the recipient that no more data will be + appended to the reference. + + + + + A recipient CANNOT acknowledge a message until its reference + is closed (not in scope). + + + + + + + + + + + The recipient MUST generate an error if the reference was + not previously open (in scope). + + + + + + + + + + [WORK IN PROGRESS] This method appends data to a reference. + + + + + + + + + + The recipient MUST generate an error if the reference is + not open (not in scope). + + + + + + + + + + + [WORK IN PROGRESS] This method provides a means to checkpoint large message + transfer. The sender may ask the recipient to checkpoint the + contents of a reference using the supplied identifier. The + sender may then resume the transfer at a later point. It is at + the discretion of the recipient how much data to save with the + checkpoint, and the sender MUST honour the offset returned by + the resume method. + + + + + + + + + + The recipient MUST generate an error if the reference is + not open (not in scope). + + + + + + This is the checkpoint identifier. This is an arbitrary + string chosen by the sender. For checkpointing to work + correctly the sender must use the same checkpoint identifier + when resuming the message. A good choice for the checkpoint + identifier would be the SHA1 hash of the message properties + data (including the original filename, revised time, etc.). + + + + + + + + + [WORK IN PROGRESS] This method resumes a reference from the last checkpoint. A + reference is considered to be open (in scope) after a resume + even though it will not have been opened via the open method + during this session. + + + + + + + + + + The recipient MUST generate an error if the reference is + currently open (in scope). + + + + + + + + + + + [WORK IN PROGRESS] This method requests a specific quality of service. The QoS can be specified for the + current channel or for all channels on the connection. The particular properties and + semantics of a qos method always depend on the content class semantics. Though the + qos method could in principle apply to both peers, it is currently meaningful only + for the server. + + + + + + + + The client can request that messages be sent in advance so that when the client + finishes processing a message, the following message is already held locally, + rather than needing to be sent down the channel. Prefetching gives a performance + improvement. This field specifies the prefetch window size in octets. The server + will send a message in advance if it is equal to or smaller in size than the + available prefetch size (and also falls into other prefetch limits). May be set + to zero, meaning "no specific limit", although other prefetch limits may still + apply. The prefetch-size is ignored if the no-ack option is set. + + + + The server MUST ignore this setting when the client is not processing any + messages - i.e. the prefetch size does not limit the transfer of single + messages to a client, only the sending in advance of more messages while + the client still has one or more unacknowledged messages. + + + Define a QoS prefetch-size limit and send a single message that exceeds + that limit. Verify that the message arrives correctly. + + + + + + + Specifies a prefetch window in terms of whole messages. This field may be used + in combination with the prefetch-size field; a message will only be sent in + advance if both prefetch windows (and those at the channel and connection level) + allow it. The prefetch-count is ignored if the no-ack option is set. + + + + The server may send less data in advance than allowed by the client's + specified prefetch windows but it MUST NOT send more. + + + Define a QoS prefetch-size limit and a prefetch-count limit greater than + one. Send multiple messages that exceed the prefetch size. Verify that + no more than one message arrives at once. + + + + + + + By default the QoS settings apply to the current channel only. If this field is + set, they are applied to the entire connection. + + + + + + + + + + [WORK IN PROGRESS] Signals the normal completion of a method. + + + + + + + + [WORK IN PROGRESS] Signals that a queue does not contain any messages. + + + + + + + + [WORK IN PROGRESS] This response rejects a message. A message may be rejected for + a number of reasons. + + + + + + + + + + [WORK IN PROGRESS] Returns the data offset into a reference body. + + + + + + + + + diff --git a/python/qpid/specs/amqp.0-10-qpid-errata.xml b/python/qpid/specs/amqp.0-10-qpid-errata.xml deleted file mode 100644 index 365928ea4e..0000000000 --- a/python/qpid/specs/amqp.0-10-qpid-errata.xml +++ /dev/null @@ -1,6654 +0,0 @@ - - - - - - - - - - - - - - - - - The bin8 type consists of exactly one octet of opaque binary data. - - - - 1 OCTET - +----------+ - | bin8 | - +----------+ - - - - bin8 = OCTET - - - - - - The int8 type is a signed integral value encoded using an 8-bit two's complement - representation. - - - - 1 OCTET - +----------+ - | int8 | - +----------+ - - - - int8 = OCTET - - - - - - The uint8 type is an 8-bit unsigned integral value. - - - - 1 OCTET - +---------+ - | uint8 | - +---------+ - - - - uint8 = OCTET - - - - - - The char type encodes a single character from the iso-8859-15 character set. - - - - 1 OCTET - +----------+ - | char | - +----------+ - - - - char = OCTET - - - - - - The boolean type is a single octet that encodes a true or false value. If the octet is zero, - then the boolean is false. Any other value represents true. - - - - 1 OCTET - +---------+ - | boolean | - +---------+ - - - - boolean = OCTET - - - - - - - - The bin16 type consists of two consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET - +-----------+-----------+ - | octet-one | octet-two | - +-----------+-----------+ - - - - bin16 = 2 OCTET - - - - - - The int16 type is a signed integral value encoded using a 16-bit two's complement - representation in network byte order. - - - - 1 OCTET 1 OCTET - +-----------+----------+ - | high-byte | low-byte | - +-----------+----------+ - - - - int16 = high-byte low-byte - high-byte = OCTET - low-byte = OCTET - - - - - - The uint16 type is a 16-bit unsigned integral value encoded in network byte order. - - - - 1 OCTET 1 OCTET - +-----------+----------+ - | high-byte | low-byte | - +-----------+----------+ - - - - uint16 = high-byte low-byte - high-byte = OCTET - low-byte = OCTET - - - - - - - - The bin32 type consists of 4 consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-------------+------------+ - | octet-one | octet-two | octet-three | octet-four | - +-----------+-----------+-------------+------------+ - - - - bin32 = 4 OCTET - - - - - - The int32 type is a signed integral value encoded using a 32-bit two's complement - representation in network byte order. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+------------+----------+----------+ - | byte-four | byte-three | byte-two | byte-one | - +-----------+------------+----------+----------+ - MSB LSB - - - - int32 = byte-four byte-three byte-two byte-one - byte-four = OCTET ; most significant byte (MSB) - byte-three = OCTET - byte-two = OCTET - byte-one = OCTET ; least significant byte (LSB) - - - - - - The uint32 type is a 32-bit unsigned integral value encoded in network byte order. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+------------+----------+----------+ - | byte-four | byte-three | byte-two | byte-one | - +-----------+------------+----------+----------+ - MSB LSB - - - - uint32 = byte-four byte-three byte-two byte-one - byte-four = OCTET ; most significant byte (MSB) - byte-three = OCTET - byte-two = OCTET - byte-one = OCTET ; least significant byte (LSB) - - - - - - The float type encodes a single precision 32-bit floating point number. The format and - operations are defined by the IEEE 754 standard for 32-bit floating point numbers. - - - - 4 OCTETs - +-----------------------+ - | float | - +-----------------------+ - IEEE 754 32-bit float - - - - float = 4 OCTET ; IEEE 754 32-bit floating point number - - - - - - The char-utf32 type consists of a single unicode character in the UTF-32 encoding. - - - - 4 OCTETs - +------------------+ - | char-utf32 | - +------------------+ - UTF-32 character - - - - char-utf32 = 4 OCTET ; single UTF-32 character - - - - - - The sequence-no type encodes, in network byte order, a serial number as defined in RFC-1982. - The arithmetic, operators, and ranges for numbers of this type are defined by RFC-1982. - - - - 4 OCTETs - +------------------------+ - | sequence-no | - +------------------------+ - RFC-1982 serial number - - - - sequence-no = 4 OCTET ; RFC-1982 serial number - - - - - - - - The bin64 type consists of eight consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-----+-------------+-------------+ - | octet-one | octet-two | ... | octet-seven | octet-eight | - +-----------+-----------+-----+-------------+-------------+ - - - - bin64 = 8 OCTET - - - - - - The int64 type is a signed integral value encoded using a 64-bit two's complement - representation in network byte order. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +------------+------------+-----+----------+----------+ - | byte-eight | byte-seven | ... | byte-two | byte-one | - +------------+------------+-----+----------+----------+ - MSB LSB - - - - int64 = byte-eight byte-seven byte-six byte-five - byte-four byte-three byte-two byte-one - byte-eight = 1 OCTET ; most significant byte (MSB) - byte-seven = 1 OCTET - byte-six = 1 OCTET - byte-five = 1 OCTET - byte-four = 1 OCTET - byte-three = 1 OCTET - byte-two = 1 OCTET - byte-one = 1 OCTET ; least significant byte (LSB) - - - - - - The uint64 type is a 64-bit unsigned integral value encoded in network byte order. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +------------+------------+-----+----------+----------+ - | byte-eight | byte-seven | ... | byte-two | byte-one | - +------------+------------+-----+----------+----------+ - MSB LSB - - - - uint64 = byte-eight byte-seven byte-six byte-five - byte-four byte-three byte-two byte-one - byte-eight = 1 OCTET ; most significant byte (MSB) - byte-seven = 1 OCTET - byte-six = 1 OCTET - byte-five = 1 OCTET - byte-four = 1 OCTET - byte-three = 1 OCTET - byte-two = 1 OCTET - byte-one = 1 OCTET ; least significant byte (LSB) - - - - - - The double type encodes a double precision 64-bit floating point number. The format and - operations are defined by the IEEE 754 standard for 64-bit double precision floating point - numbers. - - - - 8 OCTETs - +-----------------------+ - | double | - +-----------------------+ - IEEE 754 64-bit float - - - - double = 8 OCTET ; double precision IEEE 754 floating point number - - - - - - The datetime type encodes a date and time using the 64 bit POSIX time_t format. - - - - 8 OCTETs - +---------------------+ - | datetime | - +---------------------+ - posix time_t format - - - - datetime = 8 OCTET ; 64 bit posix time_t format - - - - - - - - The bin128 type consists of 16 consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-----+---------------+---------------+ - | octet-one | octet-two | ... | octet-fifteen | octet-sixteen | - +-----------+-----------+-----+---------------+---------------+ - - - - bin128 = 16 OCTET - - - - - - The uuid type encodes a universally unique id as defined by RFC-4122. The format and - operations for this type can be found in section 4.1.2 of RFC-4122. - - - - 16 OCTETs - +---------------+ - | uuid | - +---------------+ - RFC-4122 UUID - - - - uuid = 16 OCTET ; RFC-4122 section 4.1.2 - - - - - - - - The bin256 type consists of thirty two consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-----+------------------+------------------+ - | octet-one | octet-two | ... | octet-thirty-one | octet-thirty-two | - +-----------+-----------+-----+------------------+------------------+ - - - - bin256 = 32 OCTET - - - - - - - - The bin512 type consists of sixty four consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-----+-------------------+------------------+ - | octet-one | octet-two | ... | octet-sixty-three | octet-sixty-four | - +-----------+-----------+-----+-------------------+------------------+ - - - - bin512 = 64 OCTET - - - - - - - - The bin1024 type consists of one hundred and twenty eight octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-----+------------------------+------------------------+ - | octet-one | octet-two | ... | octet-one-twenty-seven | octet-one-twenty-eight | - +-----------+-----------+-----+------------------------+------------------------+ - - - - bin1024 = 128 OCTET - - - - - - - - The vbin8 type encodes up to 255 octets of opaque binary data. The number of octets is first - encoded as an 8-bit unsigned integral value. This is followed by the actual data. - - - - 1 OCTET size OCTETs - +---------+-------------+ - | size | octets | - +---------+-------------+ - uint8 - - - - vbin8 = size octets - size = uint8 - octets = 0*255 OCTET ; size OCTETs - - - - - - The str8-latin type encodes up to 255 octets of iso-8859-15 characters. The number of octets - is first encoded as an 8-bit unsigned integral value. This is followed by the actual - characters. - - - - 1 OCTET size OCTETs - +---------+------------------------+ - | size | characters | - +---------+------------------------+ - uint16 iso-8859-15 characters - - - - str8-latin = size characters - size = uint8 - characters = 0*255 OCTET ; size OCTETs - - - - - - The str8 type encodes up to 255 octets worth of UTF-8 unicode. The number of octets of unicode - is first encoded as an 8-bit unsigned integral value. This is followed by the actual UTF-8 - unicode. Note that the encoded size refers to the number of octets of unicode, not necessarily - the number of characters since the UTF-8 unicode may include multi-byte character sequences. - - - - 1 OCTET size OCTETs - +---------+--------------+ - | size | utf8-unicode | - +---------+--------------+ - uint8 - - - - str8 = size utf8-unicode - size = uint8 - utf8-unicode = 0*255 OCTET ; size OCTETs - - - - - - The str8-utf16 type encodes up to 255 octets worth of UTF-16 unicode. The number of octets of - unicode is first encoded as an 8-bit unsigned integral value. This is followed by the actual - UTF-16 unicode. Note that the encoded size refers to the number of octets of unicode, not the - number of characters since the UTF-16 unicode will include at least two octets per unicode - character. - - - - 1 OCTET size OCTETs - +---------+---------------+ - | size | utf16-unicode | - +---------+---------------+ - uint8 - - - - str8-utf16 = size utf16-unicode - size = uint8 - utf16-unicode = 0*255 OCTET ; size OCTETs - - - - - - - - The vbin16 type encodes up to 65535 octets of opaque binary data. The number of octets is - first encoded as a 16-bit unsigned integral value in network byte order. This is followed by - the actual data. - - - - 2 OCTETs size OCTETs - +----------+-------------+ - | size | octets | - +----------+-------------+ - uint16 - - - - vbin16 = size octets - size = uint16 - octets = 0*65535 OCTET ; size OCTETs - - - - - - The str16-latin type encodes up to 65535 octets of is-8859-15 characters. The number of octets - is first encoded as a 16-bit unsigned integral value in network byte order. This is followed - by the actual characters. - - - - 2 OCTETs size OCTETs - +----------+------------------------+ - | size | characters | - +----------+------------------------+ - uint16 iso-8859-15 characters - - - - str16-latin = size characters - size = uint16 - characters = 0*65535 OCTET ; size OCTETs - - - - - - The str16 type encodes up to 65535 octets worth of UTF-8 unicode. The number of octets is - first encoded as a 16-bit unsigned integral value in network byte order. This is followed by - the actual UTF-8 unicode. Note that the encoded size refers to the number of octets of - unicode, not necessarily the number of unicode characters since the UTF-8 unicode may include - multi-byte character sequences. - - - - 2 OCTETs size OCTETs - +----------+--------------+ - | size | utf8-unicode | - +----------+--------------+ - uint16 - - - - str16 = size utf8-unicode - size = uint16 - utf8-unicode = 0*65535 OCTET ; size OCTETs - - - - - - The str16-utf16 type encodes up to 65535 octets worth of UTF-16 unicode. The number of octets - is first encoded as a 16-bit unsigned integral value in network byte order. This is followed - by the actual UTF-16 unicode. Note that the encoded size refers to the number of octets of - unicode, not the number of unicode characters since the UTF-16 unicode will include at least - two octets per unicode character. - - - - 2 OCTETs size OCTETs - +----------+---------------+ - | size | utf16-unicode | - +----------+---------------+ - uint16 - - - - str16-utf16 = size utf16-unicode - size = uint16 - utf16-unicode = 0*65535 OCTET ; size OCTETs - - - - - - The byte-ranges type encodes up to 65535 octets worth of non-overlapping, non-touching, - ascending byte ranges within a 64-bit sequence of bytes. Each range is represented as an - inclusive lower and upper bound that identifies all the byte offsets included within a given - range. - - - - The number of octets of data is first encoded as a 16-bit unsigned integral value in network - byte order. This is then followed by the encoded representation of the ranges included in the - set. These MUST be encoded in ascending order, and any two ranges included in a given set MUST - NOT include overlapping or touching byte offsets. - - - - Each range is encoded as a pair of 64-bit unsigned integral values in network byte order - respectively representing the lower and upper bounds for that range. Note that because each - range is exactly 16 octets, the size in octets of the encoded ranges will always be 16 times - the number of ranges in the set. - - - - +----= size OCTETs =----+ - | | - 2 OCTETs | 16 OCTETs | - +----------+-----+-----------+-----+ - | size | .../| range |\... | - +----------+---/ +-----------+ \---+ - uint16 / / \ \ - / / \ \ - / 8 OCTETs 8 OCTETs \ - +-----------+-----------+ - | lower | upper | - +-----------+-----------+ - uint64 uint64 - - - - byte-ranges = size *range - size = uint16 - range = lower upper - lower = uint64 - upper = uint64 - - - - - - The sequence-set type is a set of pairs of RFC-1982 numbers representing a discontinuous range - within an RFC-1982 sequence. Each pair represents a closed interval within the list. - - - - Sequence-sets can be represented as lists of pairs of positive 32-bit numbers, each pair - representing a closed interval that does not overlap or touch with any other interval in the - list. For example, a set containing words 0, 1, 2, 5, 6, and 15 can be represented: - - - - [(0, 2), (5, 6), (15, 15)] - - - - 1) The list-of-pairs representation is sorted ascending (as defined by RFC 1982 - (http://www.ietf.org/rfc/rfc1982.txt) ) by the first elements of each pair. - - - - 2) The list-of-pairs is flattened into a list-of-words. - - - - 3) Each word in the list is packed into ascending locations in memory with network byte - ordering. - - - - 4) The size in bytes, represented as a 16-bit network-byte-order unsigned value, is prepended. - - - - For instance, the example from above would be encoded: - - - - [(0, 2), (5, 6), (15, 15)] -- already sorted. - [0, 2, 5, 6, 15, 15] -- flattened. - 000000000000000200000005000000060000000F0000000F -- bytes in hex - 0018000000000000000200000005000000060000000F0000000F -- bytes in hex, - length (24) prepended - - - - +----= size OCTETs =----+ - | | - 2 OCTETs | 8 OCTETs | - +----------+-----+-----------+-----+ - | size | .../| range |\... | - +----------+---/ +-----------+ \---+ - uint16 / / \ \ - / / \ \ - / / \ \ - / / \ \ - / 4 OCTETs 4 OCTETs \ - +-------------+-------------+ - | lower | upper | - +-------------+-------------+ - sequence-no sequence-no - - - - sequence-set = size *range - size = uint16 ; length of variable portion in bytes - - range = lower upper ; inclusive - lower = sequence-no - upper = sequence-no - - - - - - - - The vbin32 type encodes up to 4294967295 octets of opaque binary data. The number of octets is - first encoded as a 32-bit unsigned integral value in network byte order. This is followed by - the actual data. - - - - 4 OCTETs size OCTETs - +----------+-------------+ - | size | octets | - +----------+-------------+ - uint32 - - - - vbin32 = size octets - size = uint32 - octets = 0*4294967295 OCTET ; size OCTETs - - - - - - A map is a set of distinct keys where each key has an associated (type,value) pair. The triple - of the key, type, and value, form an entry within a map. Each entry within a given map MUST - have a distinct key. A map is encoded as a size in octets, a count of the number of entries, - followed by the encoded entries themselves. - - - - An encoded map may contain up to (4294967295 - 4) octets worth of encoded entries. The size is - encoded as a 32-bit unsigned integral value in network byte order equal to the number of - octets worth of encoded entries plus 4. (The extra 4 octets is added for the entry count.) The - size is then followed by the number of entries encoded as a 32-bit unsigned integral value in - network byte order. Finally the entries are encoded sequentially. - - - - An entry is encoded as the key, followed by the type, and then the value. The key is always a - string encoded as a str8. The type is a single octet that may contain any valid AMQP type - code. The value is encoded according to the rules defined by the type code for that entry. - - - - +------------= size OCTETs =-----------+ - | | - 4 OCTETs | 4 OCTETs | - +----------+----------+-----+---------------+-----+ - | size | count | .../| entry |\... | - +----------+----------+---/ +---------------+ \---+ - uint32 uint32 / / \ \ - / / \ \ - / / \ \ - / / \ \ - / / \ \ - / k OCTETs 1 OCTET n OCTETs \ - +-----------+---------+-----------+ - | key | type | value | - +-----------+---------+-----------+ - str8 *type* - - - - map = size count *entry - - size = uint32 ; size of count and entries in octets - count = uint32 ; number of entries in the map - - entry = key type value - key = str8 - type = OCTET ; type code of the value - value = *OCTET ; the encoded value - - - - - - A list is an ordered sequence of (type, value) pairs. The (type, value) pair forms an item - within the list. The list may contain items of many distinct types. A list is encoded as a - size in octets, followed by a count of the number of items, followed by the items themselves - encoded in their defined order. - - - - An encoded list may contain up to (4294967295 - 4) octets worth of encoded items. The size is - encoded as a 32-bit unsigned integral value in network byte order equal to the number of - octets worth of encoded items plus 4. (The extra 4 octets is added for the item count.) The - size is then followed by the number of items encoded as a 32-bit unsigned integral value in - network byte order. Finally the items are encoded sequentially in their defined order. - - - - An item is encoded as the type followed by the value. The type is a single octet that may - contain any valid AMQP type code. The value is encoded according to the rules defined by the - type code for that item. - - - - +---------= size OCTETs =---------+ - | | - 4 OCTETs | 4 OCTETs | - +----------+----------+-----+----------+-----+ - | size | count | .../| item |\... | - +----------+----------+---/ +----------+ \---+ - uint32 uint32 / / \ \ - / / \ \ - / 1 OCTET n OCTETs \ - +----------+-----------+ - | type | value | - +----------+-----------+ - *type* - - - - list = size count *item - - size = uint32 ; size of count and items in octets - count = uint32 ; number of items in the list - - item = type value - type = OCTET ; type code of the value - value = *OCTET ; the encoded value - - - - - - An array is an ordered sequence of values of the same type. The array is encoded in as a size - in octets, followed by a type code, then a count of the number values in the array, and - finally the values encoded in their defined order. - - - - An encoded array may contain up to (4294967295 - 5) octets worth of encoded values. The size - is encoded as a 32-bit unsigned integral value in network byte order equal to the number of - octets worth of encoded values plus 5. (The extra 5 octets consist of 4 octets for the count - of the number of values, and one octet to hold the type code for the items in the array.) The - size is then followed by a single octet that may contain any valid AMQP type code. The type - code is then followed by the number of values encoded as a 32-bit unsigned integral value in - network byte order. Finally the values are encoded sequentially in their defined order - according to the rules defined by the type code for the array. - - - - 4 OCTETs 1 OCTET 4 OCTETs (size - 5) OCTETs - +----------+---------+----------+-------------------------+ - | size | type | count | values | - +----------+---------+----------+-------------------------+ - uint32 uint32 *count* encoded *types* - - - - array = size type count values - - size = uint32 ; size of type, count, and values in octets - type = OCTET ; the type of the encoded values - count = uint32 ; number of items in the array - - values = 0*4294967290 OCTET ; (size - 5) OCTETs - - - - - - The struct32 type describes any coded struct with a 32-bit (4 octet) size. The type is - restricted to be only coded structs with a 32-bit size, consequently the first six octets of - any encoded value for this type MUST always contain the size, class-code, and struct-code in - that order. - - - - The size is encoded as a 32-bit unsigned integral value in network byte order that is equal to - the size of the encoded field-data, packing-flags, class-code, and struct-code. The class-code - is a single octet that may be set to any valid class code. The struct-code is a single octet - that may be set to any valid struct code within the given class-code. - - - - The first six octets are then followed by the packing flags and encoded field data. The - presence and quantity of packing-flags, as well as the specific fields are determined by the - struct definition identified with the encoded class-code and struct-code. - - - - 4 OCTETs 1 OCTET 1 OCTET pack-width OCTETs n OCTETs - +----------+------------+-------------+-------------------+------------+ - | size | class-code | struct-code | packing-flags | field-data | - +----------+------------+-------------+-------------------+------------+ - uint32 - - n = (size - 2 - pack-width) - - - - struct32 = size class-code struct-code packing-flags field-data - - size = uint32 - - class-code = OCTET ; zero for top-level structs - struct-code = OCTET ; together with class-code identifies the struct - ; definition which determines the pack-width and - ; fields - - packing-flags = 0*4 OCTET ; pack-width OCTETs - - field-data = *OCTET ; (size - 2 - pack-width) OCTETs - - - - - - - - - - The bin40 type consists of five consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-------------+------------+------------+ - | octet-one | octet-two | octet-three | octet-four | octet-five | - +-----------+-----------+-------------+------------+------------+ - - - - bin40 = 5 OCTET - - - - - - The dec32 type is decimal value with a variable number of digits following the decimal point. - It is encoded as an 8-bit unsigned integral value representing the number of decimal places. - This is followed by the signed integral value encoded using a 32-bit two's complement - representation in network byte order. - - - - The former value is referred to as the exponent of the divisor. The latter value is the - mantissa. The decimal value is given by: mantissa / 10^exponent. - - - - 1 OCTET 4 OCTETs - +----------+----------+ - | exponent | mantissa | - +----------+----------+ - uint8 int32 - - - - dec32 = exponent mantissa - exponent = uint8 - mantissa = int32 - - - - - - - - The bin72 type consists of nine consecutive octets of opaque binary data. - - - - 1 OCTET 1 OCTET 1 OCTET 1 OCTET - +-----------+-----------+-----+-------------+------------+ - | octet-one | octet-two | ... | octet-eight | octet-nine | - +-----------+-----------+-----+-------------+------------+ - - - - bin64 = 9 OCTET - - - - - - The dec64 type is decimal value with a variable number of digits following the decimal point. - It is encoded as an 8-bit unsigned integral value representing the number of decimal places. - This is followed by the signed integral value encoded using a 64-bit two's complement - representation in network byte order. - - - - The former value is referred to as the exponent of the divisor. The latter value is the - mantissa. The decimal value is given by: mantissa / 10^exponent. - - - - 1 OCTET 8 OCTETs - +----------+----------+ - | exponent | mantissa | - +----------+----------+ - uint8 int64 - - - - dec64 = exponent mantissa - exponent = uint8 - mantissa = int64 - - - - - - - - - - The void type is used within tagged data structures such as maps and lists to indicate an - empty value. The void type has no value and is encoded as an empty sequence of octets. - - - - - - The bit type is used to indicate that a packing flag within a packed struct is being used to - represent a boolean value based on the presence of an empty value. The bit type has no value - and is encoded as an empty sequence of octets. - - - - - - - - - - During the initial connection negotiation, the two peers must agree upon a maximum frame size. - This constant defines the minimum value to which the maximum frame size can be set. By - defining this value, the peers can guarantee that they can send frames of up to this size - until they have agreed a definitive maximum frame size for that connection. - - - - - - - - - - Segments are defined in . - The segment domain defines the valid values that may be used for the segment indicator within - the frame header. - - - - - - The frame type indicator for Control segments (see ). - - - - - The frame type indicator for Command segments (see ). - - - - - The frame type indicator for Header segments (see ). - - - - - The frame type indicator for Body segments (see ). - - - - - - - - - Tracks are defined in . The - track domain defines the valid values that may used for the track indicator within the frame - header - - - - The track used for all controls. All controls defined in this specification MUST be sent - on track 0. - - - - - The track used for all commands. All commands defined in this specification MUST be sent - on track 1. - - - - - - - - - An array of values of type str16. - - - - - - - - - - The connection class provides controls for a client to establish a network connection to a - server, and for both peers to operate the connection thereafter. - - - - connection = open-connection - *use-connection - close-connection - open-connection = C:protocol-header - S:START C:START-OK - *challenge - S:TUNE C:TUNE-OK - C:OPEN S:OPEN-OK | S:REDIRECT - challenge = S:SECURE C:SECURE-OK - use-connection = *channel - close-connection = C:CLOSE S:CLOSE-OK - / S:CLOSE C:CLOSE-OK - - - - - - - - - - The connection closed normally. - - - - - - An operator intervened to close the connection for some reason. The client may retry at - some later date. - - - - - - The client tried to work with an unknown virtual host. - - - - - - A valid frame header cannot be formed from the incoming byte stream. - - - - - - - - The amqp-url domain defines a format for identifying an AMQP Server. It is used to provide - alternate hosts in the case where a client has to reconnect because of failure, or because - the server requests the client to do so upon initial connection. - - - port = number]]> - - - - - - Used to provide a list of alternate hosts. - - - - - - - - This control starts the connection negotiation process by telling the client the supported - security mechanisms and locales from which the client can choose. - - - - - If the server cannot support the protocol specified in the protocol header, it MUST close - the socket connection without sending any response control. - - - The client sends a protocol header containing an invalid protocol name. The server must - respond by closing the connection. - - - - - - If the client cannot handle the protocol version suggested by the server it MUST close the - socket connection. - - - The server sends a protocol version that is lower than any valid implementation, e.g. 0.1. - The client must respond by closing the connection. - - - - - - - - - - - The properties SHOULD contain at least these fields: "host", specifying the server host - name or address, "product", giving the name of the server product, "version", giving the - name of the server version, "platform", giving the name of the operating system, - "copyright", if appropriate, and "information", giving other general information. - - - Client connects to server and inspects the server properties. It checks for the presence - of the required fields. - - - - - - - A list of the security mechanisms that the server supports. - - - - - - A list of the message locales that the server supports. The locale defines the language in - which the server will send reply texts. - - - - - The server MUST support at least the en_US locale. - - - Client connects to server and inspects the locales field. It checks for the presence of - the required locale(s). - - - - - - - - - - This control selects a SASL security mechanism. - - - - - - - - - The properties SHOULD contain at least these fields: "product", giving the name of the - client product, "version", giving the name of the client version, "platform", giving the - name of the operating system, "copyright", if appropriate, and "information", giving - other general information. - - - - - - - A single security mechanisms selected by the client, which must be one of those specified - by the server. - - - - - The client SHOULD authenticate using the highest-level security profile it can handle - from the list provided by the server. - - - - - - If the mechanism field does not contain one of the security mechanisms proposed by the - server in the Start control, the server MUST close the connection without sending any - further data. - - - Client connects to server and sends an invalid security mechanism. The server must - respond by closing the connection (a socket close, with no connection close - negotiation). - - - - - - - A block of opaque data passed to the security mechanism. The contents of this data are - defined by the SASL security mechanism. - - - - - - A single message locale selected by the client, which must be one of those specified by - the server. - - - - - - - - - The SASL protocol works by exchanging challenges and responses until both peers have - received sufficient information to authenticate each other. This control challenges the - client to provide more information. - - - - - - - - - Challenge information, a block of opaque binary data passed to the security mechanism. - - - - - - - - - This control attempts to authenticate, passing a block of SASL data for the security - mechanism at the server side. - - - - - - - A block of opaque data passed to the security mechanism. The contents of this data are - defined by the SASL security mechanism. - - - - - - - - - This control proposes a set of connection configuration values to the client. The client can - accept and/or adjust these. - - - - - - - - - The maximum total number of channels that the server allows per connection. If this is not - set it means that the server does not impose a fixed limit, but the number of allowed - channels may be limited by available server resources. - - - - - - The largest frame size that the server proposes for the connection. The client can - negotiate a lower value. If this is not set means that the server does not impose any - specific limit but may reject very large frames if it cannot allocate resources for them. - - - - - Until the max-frame-size has been negotiated, both peers MUST accept frames of up to - MIN-MAX-FRAME-SIZE octets large, and the minimum negotiated value for max-frame-size is - also MIN-MAX-FRAME-SIZE. - - - Client connects to server and sends a large properties field, creating a frame of - MIN-MAX-FRAME-SIZE octets. The server must accept this frame. - - - - - - - The minimum delay, in seconds, of the connection heartbeat supported by the server. If - this is not set it means the server does not support sending heartbeats. - - - - - - The maximum delay, in seconds, of the connection heartbeat supported by the server. If - this is not set it means the server has no maximum. - - - - - The heartbeat-max value must be greater than or equal to the value supplied in the - heartbeat-min field. - - - - - - If no heartbeat-min is supplied, then the heartbeat-max field MUST remain empty. - - - - - - - - - - This control sends the client's connection tuning parameters to the server. Certain fields - are negotiated, others provide capability information. - - - - - - - The maximum total number of channels that the client will use per connection. - - - - - If the client specifies a channel max that is higher than the value provided by the - server, the server MUST close the connection without attempting a negotiated close. The - server may report the error in some fashion to assist implementers. - - - - - - - If the client agrees to a channel-max of N channels, then the channels available for - communication between client and server are precisely the channels numbered 0 to (N-1). - - - - - - - The largest frame size that the client and server will use for the connection. If it is - not set means that the client does not impose any specific limit but may reject very large - frames if it cannot allocate resources for them. Note that the max-frame-size limit - applies principally to content frames, where large contents can be broken into frames of - arbitrary size. - - - - - Until the max-frame-size has been negotiated, both peers MUST accept frames of up to - MIN-MAX-FRAME-SIZE octets large, and the minimum negotiated value for max-frame-size is - also MIN-MAX-FRAME-SIZE. - - - - - - If the client specifies a max-frame-size that is higher than the value provided by the - server, the server MUST close the connection without attempting a negotiated close. The - server may report the error in some fashion to assist implementers. - - - - - - A peer MUST NOT send frames larger than the agreed-upon size. A peer that receives an - oversized frame MUST close the connection with the framing-error close-code. - - - - - - - The delay, in seconds, of the connection heartbeat chosen by the client. If it is not set - it means the client does not want a heartbeat. - - - - - The chosen heartbeat MUST be in the range supplied by the heartbeat-min and - heartbeat-max fields of connection.tune. - - - - - - The heartbeat field MUST NOT be set if the heartbeat-min field of connection.tune was - not set by the server. - - - - - - - - - - This control opens a connection to a virtual host, which is a collection of resources, and - acts to separate multiple application domains within a server. The server may apply - arbitrary limits per virtual host, such as the number of each type of entity that may be - used, per connection and/or in total. - - - - - - - - - - The name of the virtual host to work with. - - - - - If the server supports multiple virtual hosts, it MUST enforce a full separation of - exchanges, queues, and all associated entities per virtual host. An application, - connected to a specific virtual host, MUST NOT be able to access resources of another - virtual host. - - - - - - The server SHOULD verify that the client has permission to access the specified virtual - host. - - - - - - - The client can specify zero or more capability names. The server can use this to determine - how to process the client's connection request. - - - - - - In a configuration with multiple collaborating servers, the server may respond to a - connection.open control with a Connection.Redirect. The insist option tells the server - that the client is insisting on a connection to the specified server. - - - - When the client uses the insist option, the server MUST NOT respond with a - Connection.Redirect control. If it cannot accept the client's connection request it - should respond by closing the connection with a suitable reply code. - - - - - - - - - - This control signals to the client that the connection is ready for use. - - - - - - - Specifies an array of equivalent or alternative hosts that the server knows about, which - will normally include the current server itself. Each entry in the array will be in the - form of an IP address or DNS name, optionally followed by a colon and a port number. - Clients can cache this information and use it when reconnecting to a server after a - failure. This field may be empty. - - - - - - - - - This control redirects the client to another server, based on the requested virtual host - and/or capabilities. - - - - - When getting the connection.redirect control, the client SHOULD reconnect to the host - specified, and if that host is not present, to any of the hosts specified in the - known-hosts list. - - - - - - - - Specifies the server to connect to. - - - - - - An array of equivalent or alternative hosts that the server knows about. - - - - - - - - - The heartbeat control may be used to generate artificial network traffic when a connection - is idle. If a connection is idle for more than twice the negotiated heartbeat delay, the - peers MAY be considered disconnected. - - - - - - - - - - This control indicates that the sender wants to close the connection. The reason for close - is indicated with the reply-code and reply-text. The channel this control is sent on MAY be - used to indicate which channel caused the connection to close. - - - - - - - - - - Indicates the reason for connection closure. - - - - - This text can be logged as an aid to resolving issues. - - - - - - - - - This control confirms a connection.close control and tells the recipient that it is safe to - release resources for the connection and close the socket. - - - - - A peer that detects a socket closure without having received a Close-Ok handshake control - SHOULD log the error. - - - - - - - - - - - - - - A session is a named interaction between two peers. Session names are chosen by the upper - layers and may be used indefinitely. The model layer may associate long-lived or durable state - with a given session name. The session layer provides transport of commands associated with - this interaction. - - - - The controls defined within this class are specified in terms of the "sender" of commands and - the "receiver" of commands. Since both client and server send and receive commands, the - overall session dialog is symmetric, however the semantics of the session controls are defined - in terms of a single sender/receiver pair, and it is assumed that the client and server will - each contain both a sender and receiver implementation. - - - - - The transport MUST be attached in order to use any control other than "attach", "attached", - "detach", or "detached". A peer receiving any other control on a detached transport MUST - discard it and send a session.detached with the "not-attached" reason code. - - - - - - - - - The sender of commands. - - - - - The receiver of commands. - - - - - - The session name uniquely identifies an interaction between two peers. It is scoped to a - given authentication principal. - - - - - - - - The session was detached by request. - - - - - The session is currently attached to another transport. - - - - - The transport is currently attached to another session. - - - - - The transport is not currently attached to any session. - - - - - Command data was received prior to any use of the command-point control. - - - - - - - - - - - The session header appears on commands after the class and command id, but prior to command - arguments. - - - - - Request notification of completion for this command. - - - - - - - - - - - - - - - - - - - Requests that the current transport be attached to the named session. Success or failure - will be indicated with an attached or detached response. This control is idempotent. - - - - - A session MUST NOT be attached to more than one transport at a time. - - - - - - A transport MUST NOT be attached to more than one session at a time. - - - - - - Attaching a session to its current transport MUST succeed and result in an attached - response. - - - - - - Attachment to the same session name from distinct authentication principals MUST succeed. - - - - - - - - - - - - Identifies the session to be attached to the current transport. - - - - - - If set then a busy session will be forcibly detached from its other transport and - reattached to the current transport. - - - - - - - Confirms successful attachment of the transport to the named session. - - - - - - - - Identifies the session now attached to the current transport. - - - - - - - Detaches the current transport from the named session. - - - - - - - - - - Identifies the session to detach. - - - - - - - Confirms detachment of the current transport from the named session. - - - - - - - - Identifies the detached session. - - - - - Identifies the reason for detaching from the named session. - - - - - - - - - This control may be sent by either the sender or receiver of commands. It requests that the - execution timeout be changed. This is the minimum amount of time that a peer must preserve - execution state for a detached session. - - - - - The handler of this request MUST set his timeout to the maximum allowed value less than or - equal to the requested timeout, and MUST convey the chosen timeout in the response. - - - - - - - - - - - The requested timeout for execution state in seconds. If not set, this control requests - that execution state is preserved indefinitely. - - - - - - - This control may be sent by the either the sender or receiver of commands. It is a - one-to-one reply to the request-timeout control that indicates the granted timeout for - execution state. - - - - - - - - The timeout for execution state. If not set, then execution state is preserved - indefinitely. - - - - - - - This control is sent by the sender of commands and handled by the receiver of commands. This - establishes the sequence numbers associated with all subsequent command data sent from the - sender to the receiver. The subsequent command data will be numbered starting with the - values supplied in this control and proceeding sequentially. This must be used at least once - prior to sending any command data on newly attached transports. - - - - - If command data is sent on a newly attached transport the session MUST be detached with an - "unknown-id" reason-code. - - - - - - If the offset is zero, the next data frame MUST have the first-frame and first-segment - flags set. Violation of this is a framing error. - - - - - - If the offset is nonzero, the next data frame MUST NOT have both the first-frame and - first-segment flag set. Violation of this is a framing error. - - - - - - - - - - - - This control is sent by the receiver of commands and handled by the sender of commands. It - informs the sender of what commands and command fragments are expected at the receiver. - This control is only sent in response to a flush control with the expected flag set. The - expected control is never sent spontaneously. - - - - - The set of expected commands MUST include the next command after the highest seen command. - - - - - - The set of expected commands MUST have zero elements if and only if the sender holds no - execution state for the session (i.e. it is a new session). - - - - - - If a command-id appears in the commands field, it MUST NOT appear in the fragments field. - - - - - - When choice is permitted, a command MUST appear in the commands field rather than the - fragments field. - - - - - - - - - - - - This control is sent by the receiver of commands and handled by the sender of commands. This - sends the set of commands that will definitely be completed by this peer to the sender. This - excludes commands known by the receiver to be considered confirmed or complete at the - sender. - - - This control must be sent if the partner requests the set of confirmed commands using the - session.flush control with the confirmed flag set. - - - This control may be sent spontaneously. One reason for separating confirmation from - completion is for large persistent messages, where the receipt (and storage to a durable - store) of part of the message will result in less data needing to be replayed in the case of - transport failure during transmission. - - - A simple implementation of an AMQP client or server may be implemented to take no action on - receipt of session.confirmed controls, and take action only when receiving - session.completed controls. - - - A simple implementation of an AMQP client or server may be implemented such that it never - spontaneously sends session.confirmed and that when requested for the set of confirmed - commands (via the session.flush control) it responds with the same set of commands as it - would to when the set of completed commands was requested (trivially all completed commands - are confirmed). - - - - - If a command has durable implications, it MUST NOT be confirmed until the fact of the - command has been recorded on durable media. - - - - - - If a command-id appears in the commands field, it MUST NOT appear in the fragments field. - - - - - - When choice is permitted, a command MUST appear in the commands field rather than the - fragments field. - - - - - - - - - Command-ids included in prior known-complete replies MUST be excluded from the set of - all confirmed commands. - - - - - - - - - This control is sent by the receiver of commands, and handled by the sender of commands. It - informs the sender of all commands completed by the receiver. This excludes commands known - by the receiver to be considered complete at the sender. - - - - - The sender MUST eventually reply with a known-completed set that covers the completed ids. - - - - - - The known-complete reply MAY be delayed at the senders discretion if the timely-reply - field is not set. - - - - - - Multiple replies may be merged by sending a single known-completed that includes the union - of the merged command-id sets. - - - - - - - - The ids of all completed commands. This excludes commands known by the receiver to be - considered complete at the sender. - - - - - The sender MUST consider any completed commands to also be confirmed. - - - - - - Command-ids included in prior known-complete replies MUST be excluded from the set of - all completed commands. - - - - - - If set, the sender is no longer free to delay the known-completed reply. - - - - - - - This control is sent by the sender of commands, and handled by the receiver of commands. It - is sent in reply to one or more completed controls from the receiver. It informs the - receiver that commands are known to be completed by the sender. - - - - - The sender need not keep state to generate this reply. It is sufficient to reply to any - completed control with an exact echo of the completed ids. - - - - - - - - The set of completed commands for one or more session.completed controls. - - - - - The receiver MUST treat any of the specified commands to be considered by the sender as - confirmed as well as completed. - - - - - - - - This control is sent by the sender of commands and handled by the receiver of commands. It - requests that the receiver produce the indicated command sets. The receiver should issue the - indicated sets at the earliest possible opportunity. - - - - - - - - - - - - This control is sent by the sender of commands and handled by the receiver of commands. It - sends command ranges for which there will be no further data forthcoming. The receiver - should proceed with the next available commands that arrive after the gap. - - - - - The command-ids covered by a session.gap MUST be added to the completed and confirmed sets - by the receiver. - - - - - - If a session.gap covers a partially received command, the receiving peer MUST treat the - command as aborted. - - - - - - If a session.gap covers a completed or confirmed command, the receiving peer MUST continue - to treat the command as completed or confirmed. - - - - - - - - The set of command-ids that are contained in this gap. - - - - - - - - - - - The execution class provides commands that carry execution information about other model level - commands. - - - - - - - - - - The client attempted to work with a server entity to which it has no access due to - security settings. - - - - - - The client attempted to work with a server entity that does not exist. - - - - - - The client attempted to work with a server entity to which it has no access because - another client is working with it. - - - - - - The client requested a command that was not allowed because some precondition failed. - - - - - - A server entity the client is working with has been deleted. - - - - - - The peer sent a command that is not permitted in the current state of the session. - - - - - - The command segments could not be decoded. - - - - - - The client exceeded its resource allocation. - - - - - - The peer tried to use a command a manner that is inconsistent with the rules described - in the specification. - - - - - - The command argument is malformed, i.e. it does not fall within the specified domain. - The illegal-argument exception can be raised on execution of any command which has - domain valued fields. - - - - - - The peer tried to use functionality that is not implemented in its partner. - - - - - - The peer could not complete the command because of an internal error. The peer may - require intervention by an operator in order to resume normal operations. - - - - - - An invalid argument was passed to a command, and the operation could not - proceed. An invalid argument is not illegal (see illegal-argument), i.e. it matches - the domain definition; however the particular value is invalid in this context. - - - - - - - - - - This command is complete when all prior commands are completed. - - - - - - - - - - - This command carries data resulting from the execution of a command. - - - - - - - - - - - - - - This command informs a peer of an execution exception. The command-id, when given, - correlates the error to a specific command. - - - - - - - - - The command-id of the command which caused the exception. If the exception was not caused - by a specific command, this value is not set. - - - - - - - The zero based index of the exceptional field within the arguments to the exceptional - command. If the exception was not caused by a specific field, this value is not set. - - - - - The description provided is implementation defined, but MUST be in the language - appropriate for the selected locale. The intention is that this description is suitable - for logging or alerting output. - - - - - - - - - - - - - The message class provides commands that support an industry-standard messaging model. - - - - START: - - The message has yet to be sent to the recipient. - - NOT-ACQUIRED: - - The message has been sent to the recipient, but is not - acquired by the recipient. - - ACQUIRED: - - The message has been sent to and acquired by the recipient. - - END: - - The transfer is complete. - - - END]]> - | /|\ - | | - +-------------------------------+ - - - - message = *:TRANSFER [ R:ACQUIRE ] [ R:ACCEPT / R:REJECT / R:RELEASE ] - / *:RESUME - / *:SET-FLOW-MODE - / *:FLOW - / *:STOP - / C:SUBSCRIBE - / C:CANCEL - / C:FLUSH - - - - - The server SHOULD respect the delivery-mode property of messages and SHOULD make a - best-effort to hold persistent messages on a reliable storage mechanism. - - - Send a persistent message to queue, stop server, restart server and then verify whether - message is still present. Assumes that queues are durable. Persistence without durable - queues makes no sense. - - - - - - The server MUST NOT discard a persistent message in case of a queue overflow. - - - Create a queue overflow situation with persistent messages and verify that messages do not - get lost (presumably the server will write them to disk). - - - - - - The server MAY use the message.flow command to slow or stop a message publisher when - necessary. - - - - - - The server MAY overflow non-persistent messages to persistent storage. - - - - - - The server MAY discard or dead-letter non-persistent messages on a priority basis if the - queue size exceeds some configured limit. - - - - - - The server MUST implement at least 2 priority levels for messages, where priorities 0 and - 9 are treated as two distinct levels. - - - - - - The server SHOULD implement distinct priority levels in the following manner: - - - If the server implements n distinct priorities then priorities 0 to 5 - ceiling(n/2) should - be treated equivalently and should be the lowest effective priority. The priorities 4 + - floor(n/2) should be treated equivalently and should be the highest effective priority. The - priorities (5 - ceiling(n/2)) to (4 + floor(n/2)) inclusive must be treated as distinct - priorities. - - - Thus, for example, if 2 distinct priorities are implemented, then levels 0 to 4 are - equivalent, and levels 5 to 9 are equivalent and levels 4 and 5 are distinct. If 3 distinct - priorities are implements the 0 to 3 are equivalent, 5 to 9 are equivalent and 3, 4 and 5 - are distinct. - - - This scheme ensures that if two priorities are distinct for a server which implements m - separate priority levels they are also distinct for a server which implements n different - priority levels where n > m. - - - - - - The server MUST deliver messages of the same priority in order irrespective of their - individual persistence. - - - Send a set of messages with the same priority but different persistence settings to a queue. - Subscribe and verify that messages arrive in same order as originally published. - - - - - - - - - Specifies the destination to which the message is to be transferred. - - - - - - Controls how the sender of messages is notified of successful transfer. - - - - - - Successful transfer is signaled by message.accept. An acquired message (whether - acquisition was implicit as in pre-acquired mode or explicit as in not-acquired mode) is - not considered transferred until a message.accept that includes the transfer command is - received. - - - - - - Successful transfer is assumed when accept-mode is "pre-acquired". Messages transferred - with an accept-mode of "not-acquired" cannot be acquired when accept-mode is "none". - - - - - - - - Indicates whether a transferred message can be considered as automatically acquired or - whether an explicit request is necessary in order to acquire it. - - - - - - the message is acquired when the transfer starts - - - - - - the message is not acquired when it arrives, and must be explicitly acquired by the - recipient - - - - - - - - Code specifying the reason for a message reject. - - - - - Rejected for an unspecified reason. - - - - - Delivery was attempted but there were no queues which the message could be routed to. - - - - - The rejected message had the immediate flag set to true, but at the time of the transfer - at least one of the queues to which it was to be routed did not have any subscriber able - to take the message. - - - - - - - - A resume-id serves to identify partially transferred message content. The id is chosen by - the sender, and must be unique to a given user. A resume-id is not expected to be unique - across users. - - - - - - - Used to set the reliability requirements for a message which is transferred to the server. - - - - - A non-persistent message may be lost in event of a failure, but the nature of the - communication is such that an occasional message loss is tolerable. This is the lowest - overhead mode. Non-persistent messages are delivered at most once only. - - - - - - A persistent message is one which must be stored on a persistent medium (usually hard - drive) at every stage of delivery so that it will not be lost in event of failure (other - than of the medium itself). This is normally accomplished with some additional overhead. - A persistent message may be delivered more than once if there is uncertainty about the - state of its delivery after a failure and recovery. - - - - - - - - Used to assign a priority to a message transfer. Priorities range from 0 (lowest) to 9 - (highest). - - - - - Lowest possible priority message. - - - - - - Very low priority message - - - - - - Low priority message. - - - - - - Below average priority message. - - - - - - Medium priority message. - - - - - - - Above average priority message - - - - - - - High priority message - - - - - - Higher priority message - - - - - - Very high priority message. - - - - - - Highest possible priority message. - - - - - - - - - If set on a message that is not routable the broker can discard it. If not set, an - unroutable message should be handled by reject when accept-mode is explicit; or by routing - to the alternate-exchange if defined when accept-mode is none. - - - - - - If the immediate flag is set to true on a message transferred to a Server, then the - message should be considered unroutable (and not delivered to any queues) if, for any - queue that it is to be routed to according to the standard routing behavior, there is not - a subscription on that queue able to receive the message. The treatment of unroutable - messages is dependent on the value of the discard-unroutable flag. - - - The immediate flag is ignored on transferred to a Client. - - - - - - This boolean flag indicates that the message may have been previously delivered to this - or another client. - - - If the redelivered flag is set on transfer to a Server, then any delivery of the message - from that Server to a Client must also have the redelivered flag set to true. - - - - The server MUST try to signal redelivered messages when it can. When redelivering a - message that was not successfully accepted, the server SHOULD deliver it to the original - client if possible. - - - Create a shared queue and publish a message to the queue. Subscribe using explicit - accept-mode, but do not accept the message. Close the session, reconnect, and subscribe - to the queue again. The message MUST arrive with the redelivered flag set. - - - - - The client should not rely on the redelivered field to detect duplicate messages where - publishers may themselves produce duplicates. A fully robust client should be able to - track duplicate received messages on non-transacted, and locally-transacted sessions. - - - - - - Message priority, which can be between 0 and 9. Messages with higher priorities may be - delivered before those with lower priorities. - - - - The delivery mode may be non-persistent or persistent. - - - - Duration in milliseconds for which the message should be considered "live". If this is - set then a message expiration time will be computed based on the current time plus this - value. Messages that live longer than their expiration time will be discarded (or dead - lettered). - - - If a message is transferred between brokers before delivery to a final subscriber the - ttl should be decremented before peer to peer transfer and both timestamp and expiration - should be cleared. - - - - - - - The timestamp is set by the broker on arrival of the message. - - - - - - The expiration header assigned by the broker. After receiving the message the broker sets - expiration to the sum of the ttl specified in the publish command and the current time. - (ttl=expiration - timestamp) - - - - - - Identifies the exchange specified in the destination field of the message.transfer used to - publish the message. This MUST be set by the broker upon receipt of a message. - - - - - - The value of the key determines to which queue the exchange will send the message. The way - in which keys are used to make this routing decision depends on the type of exchange to - which the message is sent. For example, a direct exchange will route a message to a queue - if that queue is bound to the exchange with a binding-key identical to the routing-key of - the message. - - - - - - When a resume-id is provided the recipient MAY use it to retain message data should the - session expire while the message transfer is still incomplete. - - - - - - When a resume-ttl is provided the recipient MAY use it has a guideline for how long to - retain the partially complete data when a resume-id is specified. If no resume-id is - specified then this value should be ignored. - - - - - - - These properties permit the transfer of message fragments. These may be used in conjunction - with byte level flow control to limit the rate at which large messages are received. Only - the first fragment carries the delivery-properties and message-properties. - - Syntactically each fragment appears as a complete message to the lower layers of the - protocol, however the model layer is required to treat all the fragments as a single - message. For example all fragments must be delivered to the same client. In pre-acquired - mode, no message fragments can be delivered by the broker until the entire message has been - received. - - - - True if this fragment contains the start of the message, false otherwise. - - - - True if this fragment contains the end of the message, false otherwise. - - - - This field may optionally contain the size of the fragment. - - - - - The reply-to domain provides a simple address structure for replying to to a message to a - destination within the same virtual-host. - - - - - - - - The length of the body segment in bytes. - - - - - - Message-id is an optional property of UUID type which uniquely identifies a message within - the message system. The message producer is usually responsible for setting the - message-id. The server MAY discard a message as a duplicate if the value of the message-id - matches that of a previously received message. Duplicate messages MUST still be accepted - if transferred with an accept-mode of "explicit". - - - - - A message-id MUST be unique within a given server instance. A message-id SHOULD be - globally unique (i.e. across different systems). - - - - - - A message ID is immutable. Once set, a message-id MUST NOT be changed or reassigned, - even if the message is replicated, resent or sent to multiple queues. - - - - - - - This is a client-specific id that may be used to mark or identify messages between - clients. The server ignores this field. - - - - - - The destination of any message that is sent in reply to this message. - - - - - - The RFC-2046 MIME type for the message content (such as "text/plain"). This is set by the - originating client. - - - - - - The encoding for character-based message content. This is set by the originating client. - Examples include UTF-8 and ISO-8859-15. - - - - - - The identity of the user responsible for producing the message. The client sets this - value, and it is authenticated by the broker. - - - - - The server MUST produce an unauthorized-access exception if the user-id field is set to - a principle for which the client is not authenticated. - - - - - - - The identity of the client application responsible for producing the message. - - - - - - This is a collection of user-defined headers or properties which may be set by the - producing client and retrieved by the consuming client. - - - - - - - - - Credit based flow control. - - - - - - Window based flow control. - - - - - - - - - Indicates a value specified in messages. - - - Indicates a value specified in bytes. - - - - - - - - - This command transfers a message between two peers. When a client uses this command to - publish a message to a broker, the destination identifies a specific exchange. The message - will then be routed to queues as defined by the exchange configuration. - - The client may request a broker to transfer messages to it, from a particular queue, by - issuing a subscribe command. The subscribe command specifies the destination that the broker - should use for any resulting transfers. - - - - - If a transfer to an exchange occurs within a transaction, then it is not available from - the queue until the transaction commits. It is not specified whether routing takes place - when the transfer is received or when the transaction commits. - - - - - - - - - - Specifies the destination to which the message is to be transferred. - - - - - The server MUST accept a blank destination to mean the default exchange. - - - - - - If the destination refers to an exchange that does not exist, the peer MUST raise a - session exception. - - - - - - - Indicates whether message.accept, session.complete, or nothing at all is required to - indicate successful transfer of the message. - - - - - - Indicates whether or not the transferred message has been acquired. - - - - -
- - - -
- -
-
- - - - - - Accepts the message. Once a transfer is accepted, the command-id may no longer be referenced - from other commands. - - - - - The recipient MUST have acquired a message in order to accept it. - - - - - - - - - Identifies the messages previously transferred that should be accepted. - - - - - - - - - Indicates that the message transfers are unprocessable in some way. A server may reject a - message if it is unroutable. A client may reject a message if it is invalid. A message may - be rejected for other reasons as well. Once a transfer is rejected, the command-id may no - longer be referenced from other commands. - - - - - When a client rejects a message, the server MUST deliver that message to the - alternate-exchange on the queue from which it was delivered. If no alternate-exchange is - defined for that queue the broker MAY discard the message. - - - - - - The recipient MUST have acquired a message in order to reject it. If the message is not - acquired any reject MUST be ignored. - - - - - - - - - Identifies the messages previously transferred that should be rejected. - - - - - Code describing the reason for rejection. - - - - - Text describing the reason for rejection. - - - - - - - - - Release previously transferred messages. When acquired messages are released, they become - available for acquisition by any subscriber. Once a transfer is released, the command-id may - no longer be referenced from other commands. - - - - - Acquired messages that have been released MAY subsequently be delivered out of order. - Implementations SHOULD ensure that released messages keep their position with respect to - undelivered messages of the same priority. - - - - - - - - - Indicates the messages to be released. - - - - - By setting set-redelivered to true, any acquired messages released to a queue with this - command will be marked as redelivered on their next transfer from that queue. If this flag - is not set, then an acquired message will retain its original redelivered status on the - queue. Messages that are not acquired are unaffected by the value of this flag. - - - - - - - - - Acquires previously transferred messages for consumption. The acquired ids (if any) are - sent via message.acquired. - - - - - Each acquire MUST produce exactly one message.acquired even if it is empty. - - - - - - - - Indicates the messages to be acquired. - - - - - - - Identifies a set of previously transferred messages that have now been acquired. - - - - - Indicates the acquired messages. - - - - - - - - - - - This command resumes an interrupted transfer. The recipient should return the amount of - partially transferred data associated with the given resume-id, or zero if there is no data - at all. If a non-zero result is returned, the recipient should expect to receive message - fragment(s) containing the remainder of the interrupted message. - - - - - - - - The destination to which the remaining message fragments are transferred. - - - - If the destination does not exist, the recipient MUST close the session. - - - - - - The name of the transfer being resumed. - - - - If the resume-id is not known, the recipient MUST return an offset of zero. - - - - - - - - Indicates the amount of data already transferred. - - - - - - - - - - This command asks the server to start a "subscription", which is a request for messages - from a specific queue. Subscriptions last as long as the session they were created on, or - until the client cancels them. - - - The server SHOULD support at least 16 subscriptions per queue, and ideally, impose no - limit except as defined by available resources. - Create a queue and create subscriptions on that queue until the server - closes the connection. Verify that the number of subscriptions created was at least - sixteen and report the total number. - - - - The default flow mode for new subscriptions is window-mode. - - - - - If the queue for this subscription is deleted, any subscribing sessions MUST be closed. - This exception may occur at any time after the subscription has been completed. - - - - - If the queue for this subscription does not exist, then the subscribing session MUST - be closed. - - - - - Immediately after a subscription is created, the initial byte and message credit for that - destination is zero. - - - - - - - Specifies the name of the subscribed queue. - - - - The client specified name for the subscription. This is used as the destination for - all messages transferred from this subscription. The destination is scoped to the session. - - - - The client MUST NOT specify a destination that refers to an existing subscription on - the same session. - Attempt to create two subscriptions on the same session with the - same non-empty destination. - - - - - The accept-mode to use for messages transferred from this subscription. - - - - The acquire-mode to use for messages transferred from this subscription. - - - - Request an exclusive subscription. This prevents other subscribers from subscribing to - the queue. - - - The server MUST NOT grant an exclusive subscription to a queue that already has - subscribers. - Open two connections to a server, and in one connection create a - shared (non-exclusive) queue and then subscribe to the queue. In the second connection - attempt to subscribe to the same queue using the exclusive option. - - - - - Requests that the broker use the supplied resume-id when transferring messages for - this subscription. - - - - Requested duration in milliseconds for the broker use as resume-ttl when transferring - messages for this subscription. - - - - The syntax and semantics of these arguments depends on the providers implementation. - - - - - - - - - This command cancels a subscription. This does not affect already delivered messages, but it - does mean the server will not send any more messages for that subscription. The client may - receive an arbitrary number of messages in between sending the cancel command and receiving - notification that the cancel command is complete. - - - - - Canceling a subscription MUST NOT affect pending transfers. A transfer made prior to - canceling transfers to the destination MUST be able to be accepted, released, acquired, or - rejected after the subscription is canceled. - - - - - - - - - If the subscription specified by the destination is not found, the server MUST close the - session. - - - - - - - - - - Sets the mode of flow control used for a given destination to either window or credit based - flow control. - - With credit based flow control, the sender of messages continually maintains its current - credit balance with the recipient. The credit balance consists of two values, a message - count, and a byte count. Whenever message data is sent, both counts must be decremented. - If either value reaches zero, the flow of message data must stop. Additional credit is - received via the message.flow command. - - The sender MUST NOT send partial assemblies. This means that if there is not enough byte - credit available to send a complete message, the sender must either wait or use message - fragmentation (see the fragment-properties header struct) to send the first part of the - message data in a complete assembly. - - Window based flow control is identical to credit based flow control, however message - transfer completion implicitly grants a single unit of message credit, and the size of the - message in byte credits for each completed message transfer. Completion of the transfer - command with session.completed is the only way credit is implicitly updated; message.accept, - message.release, message.reject, tx.commit and tx.rollback have no effect on the outstanding - credit balances. - - - - - The byte count is decremented by the payload size of each transmitted frame with segment - type header or body appearing within a message.transfer command. Note that the payload - size is the frame size less the frame header size. - - - - - - Mode switching may only occur if both the byte and message credit balance are zero. There - are three ways for a recipient of messages to be sure that the sender's credit balances - are zero: - - 1) The recipient may send a message.stop command to the sender. When the recipient - receives notification of completion for the message.stop command, it knows that the - sender's credit is zero. - - 2) The recipient may perform the same steps described in (1) with the message.flush - command substituted for the message.stop command. - - 3) Immediately after a subscription is created with message.subscribe, the credit for - that destination is zero. - - - - - - Prior to receiving an explicit set-flow-mode command, a peer MUST consider the flow-mode - to be window. - - - - - - - - - - The new flow control mode. - - - - - - - - - This command controls the flow of message data to a given destination. It is used by the - recipient of messages to dynamically match the incoming rate of message flow to its - processing or forwarding capacity. Upon receipt of this command, the sender must add "value" - number of the specified unit to the available credit balance for the specified destination. - A value of (0xFFFFFFFF) indicates an infinite amount of credit. This disables any limit for - the given unit until the credit balance is zeroed with message.stop or message.flush. - - - - - - - - - - - The unit of value. - - - - - If the value is not set then this indicates an infinite amount of credit. - - - - - - - - - Forces the sender to exhaust his credit supply. The sender's credit will always be zero when - this command completes. The command completes when immediately available message data has - been transferred, or when the credit supply is exhausted. - - - - - - - - - - - - On receipt of this command, a producer of messages MUST set his credit to zero for the given - destination. When notifying of completion, credit MUST be zero and no further messages will - be sent until such a time as further credit is received. - - - - - - - - -
- - - - - - Standard transactions provide so-called "1.5 phase commit". We can ensure that work is never - lost, but there is a chance of confirmations being lost, so that messages may be resent. - Applications that use standard transactions must be able to detect and ignore duplicate - messages. - - - - tx = C:SELECT - / C:COMMIT - / C:ROLLBACK - - - - - - An client using standard transactions SHOULD be able to track all messages received within a - reasonable period, and thus detect and reject duplicates of the same message. It SHOULD NOT - pass these to the application layer. - - - - - - - - - - This command sets the session to use standard transactions. The client must use this command - exactly once on a session before using the Commit or Rollback commands. - - - - - A client MUST NOT select standard transactions on a session that is already transactional. - - - - - - A client MUST NOT select standard transactions on a session that is already enlisted in a - distributed transaction. - - - - - - On a session on which tx.select has been issued, a client MUST NOT issue a - message.subscribe command with the accept-mode property set to any value other than - explicit. Similarly a tx.select MUST NOT be issued on a session on which a there is a non - cancelled subscriber with accept-mode of none. - - - - - - - - - - - This command commits all messages published and accepted in the current transaction. A - new transaction starts immediately after a commit. - - - In more detail, the commit acts on all messages which have been transferred from the Client - to the Server, and on all acceptances of messages sent from Server to Client. Since the - commit acts on commands sent in the same direction as the commit command itself, there is no - ambiguity on the scope of the commands being committed. Further, the commit will not be - completed until all preceding commands which it affects have been completed. - - - Since transactions act on explicit accept commands, the only valid accept-mode for message - subscribers is explicit. For transferring messages from Client to Server (publishing) all - accept-modes are permitted. - - - - - A client MUST NOT issue tx.commit on a session that has not been selected for standard - transactions with tx.select. - - - - - - - - - - - - - This command abandons the current transaction. In particular the transfers from Client to - Server (publishes) and accepts of transfers from Server to Client which occurred in the - current transaction are discarded. A new transaction starts immediately after a rollback. - - - In more detail, when a rollback is issued, any the effects of transfers which occurred from - Client to Server are discarded. The Server will issue completion notification for all such - transfers prior to the completion of the rollback. Similarly the effects of any - message.accept issued from Client to Server prior to the issuance of the tx.rollback will be - discarded; and notification of completion for all such commands will be issued before the - issuance of the completion for the rollback. - - - After the completion of the rollback, the client will still hold the messages which it has - not yet accepted (including those for which accepts were previously issued within the - transaction); i.e. the messages remain "acquired". If the Client wishes to release those - messages back to the Server, then appropriate message.release commands must be issued. - - - - - A client MUST NOT issue tx.rollback on a session that has not been selected for standard - transactions with tx.select. - - - - - - - - - - - - - This provides the X-Open XA distributed transaction protocol support. It allows a session - to be selected for use with distributed transactions, the transactional boundaries for work on - that session to be demarcated and allows the transaction manager to coordinate transaction - outcomes. - - - - dtx-demarcation = C:SELECT *demarcation - demarcation = C:START C:END - - - - dtx-coordination = *coordination - coordination = command - / outcome - / recovery - command = C:SET-TIMEOUT - / C:GET-TIMEOUT - outcome = one-phase-commit - / one-phase-rollback - / two-phase-commit - / two-phase-rollback - one-phase-commit = C:COMMIT - one-phase-rollback = C:ROLLBACK - two-phase-commit = C:PREPARE C:COMMIT - two-phase-rollback = C:PREPARE C:ROLLBACK - recovery = C:RECOVER *recovery-outcome - recovery-outcome = one-phase-commit - / one-phase-rollback - / C:FORGET - - - - - - Enabling XA transaction support on a session requires that the server MUST manage - transactions demarcated by start-end blocks. That is to say that on this XA-enabled session, - work undergone within transactional blocks is performed on behalf a transaction branch - whereas work performed outside of transactional blocks is NOT transactional. - - - - - - - - - - - - - Normal execution completion (no error). - - - - - - The rollback was caused for an unspecified reason. - - - - - - A transaction branch took too long. - - - - - - The transaction branch may have been heuristically completed. - - - - - - The transaction branch has been heuristically committed. - - - - - - The transaction branch has been heuristically rolled back. - - - - - - The transaction branch has been heuristically committed and rolled back. - - - - - - The transaction branch was read-only and has been committed. - - - - - - - - - - - - - - An xid uniquely identifies a transaction branch. - - - - - - - - - - - - This command sets the session to use distributed transactions. The client must use this - command at least once on a session before using XA demarcation operations. - - - - - - - - - - This command is called when messages should be produced and consumed on behalf a transaction - branch identified by xid. - - - - - If the command is invoked in an improper context (see class grammar) then the server MUST - send a session exception. - - - - - - If neither join nor resume is specified is specified and the transaction branch specified - by xid has previously been seen then the server MUST raise an exception. - - - - - - If join and resume are specified then the server MUST raise an exception. - - - - - - - - Specifies the xid of the transaction branch to be started. - - - - - If xid is already known by the broker then the server MUST raise an exception. - - - - - - - Indicate whether this is joining an already associated xid. Indicate that the start - applies to joining a transaction previously seen. - - - - - If the broker does not support join the server MUST raise an exception. - - - - - - - Indicate that the start applies to resuming a suspended transaction branch specified. - - - - - - This confirms to the client that the transaction branch is started or specify the error - condition. - - The value of this field may be one of the following constants: - - xa-ok: Normal execution. - - xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified - reason. - - xa-rbtimeout: The work represented by this transaction branch took too long. - - - - - - - - - This command is called when the work done on behalf a transaction branch finishes or needs - to be suspended. - - - - - If the command is invoked in an improper context (see class grammar) then the server MUST - raise an exception. - - - - - - If suspend and fail are specified then the server MUST raise an exception. - - - - - - If neither fail nor suspend are specified then the portion of work has completed - successfully. - - - - - - When a session is closed then the currently associated transaction branches MUST be marked - rollback-only. - - - - - - - - Specifies the xid of the transaction branch to be ended. - - - - - The session MUST be currently associated with the given xid (through an earlier start - call with the same xid). - - - - - - - If set, indicates that this portion of work has failed; otherwise this portion of work has - completed successfully. - - - - - An implementation MAY elect to roll a transaction back if this failure notification is - received. Should an implementation elect to implement this behavior, and this bit is - set, then then the transaction branch SHOULD be marked as rollback-only and the end - result SHOULD have the xa-rbrollback status set. - - - - - - - Indicates that the transaction branch is temporarily suspended in an incomplete state. - - - - - The transaction context is in a suspended state and must be resumed via the start - command with resume specified. - - - - - - - - This command confirms to the client that the transaction branch is ended or specify the - error condition. - - The value of this field may be one of the following constants: - - xa-ok: Normal execution. - - xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified - reason. If an implementation chooses to implement rollback-on-failure behavior, then - this value should be selected if the dtx.end.fail bit was set. - - xa-rbtimeout: The work represented by this transaction branch took too long. - - - - - - - - - Commit the work done on behalf a transaction branch. This command commits the work - associated with xid. Any produced messages are made available and any consumed messages are - discarded. - - - - - If the command is invoked in an improper context (see class grammar) then the server MUST - raise an exception. - - - - - - - - Specifies the xid of the transaction branch to be committed. - - - - - If xid is unknown (the transaction branch has not been started or has already been - ended) then the server MUST raise an exception. - - - - - - If this command is called when xid is still associated with a session then the server - MUST raise an exception. - - - - - - - Used to indicate whether one-phase or two-phase commit is used. - - - - - The one-phase bit MUST be set if a commit is sent without a preceding prepare. - - - - - - The one-phase bit MUST NOT be set if the commit has been preceded by prepare. - - - - - - - This confirms to the client that the transaction branch is committed or specify the - error condition. - - The value of this field may be one of the following constants: - - xa-ok: Normal execution - - xa-heurhaz: Due to some failure, the work done on behalf of the specified transaction - branch may have been heuristically completed. - - xa-heurcom: Due to a heuristic decision, the work done on behalf of the specified - transaction branch was committed. - - xa-heurrb: Due to a heuristic decision, the work done on behalf of the specified - transaction branch was rolled back. - - xa-heurmix: Due to a heuristic decision, the work done on behalf of the specified - transaction branch was partially committed and partially rolled back. - - xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified - reason. - - xa-rbtimeout: The work represented by this transaction branch took too long. - - - - - - - - - This command is called to forget about a heuristically completed transaction branch. - - - - - If the command is invoked in an improper context (see class grammar) then the server MUST - raise an exception. - - - - - - - - Specifies the xid of the transaction branch to be forgotten. - - - - - If xid is unknown (the transaction branch has not been started or has already been - ended) then the server MUST raise an exception. - - - - - - If this command is called when xid is still associated with a session then the server - MUST raise an exception. - - - - - - - - - - This command obtains the current transaction timeout value in seconds. If set-timeout was - not used prior to invoking this command, the return value is the default timeout; otherwise, - the value used in the previous set-timeout call is returned. - - - - - - - Specifies the xid of the transaction branch for getting the timeout. - - - - - If xid is unknown (the transaction branch has not been started or has already been - ended) then the server MUST raise an exception. - - - - - - - Returns the value of the timeout last specified through set-timeout. - - - The current transaction timeout value in seconds. - - - - - - - - - - This command prepares for commitment any message produced or consumed on behalf of xid. - - - - - If the command is invoked in an improper context (see class grammar) then the server MUST - raise an exception. - - - - - - Once this command successfully returns it is guaranteed that the transaction branch may be - either committed or rolled back regardless of failures. - - - - - - The knowledge of xid cannot be erased before commit or rollback complete the branch. - - - - - - - - Specifies the xid of the transaction branch that can be prepared. - - - - - If xid is unknown (the transaction branch has not been started or has already been - ended) then the server MUST raise an exception. - - - - - - If this command is called when xid is still associated with a session then the server - MUST raise an exception. - - - - - - - This command confirms to the client that the transaction branch is prepared or specify the - error condition. - - The value of this field may be one of the following constants: - - xa-ok: Normal execution. - - xa-rdonly: The transaction branch was read-only and has been committed. - - xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified - reason. - - xa-rbtimeout: The work represented by this transaction branch took too long. - - - - - - - - - This command is called to obtain a list of transaction branches that are in a prepared or - heuristically completed state. - - - - - - - - Returns to the client a table with single item that is a sequence of transaction xids - that are in a prepared or heuristically completed state. - - - - Array containing the xids to be recovered (xids that are in a prepared or - heuristically completed state). - - - - - - - - - - - This command rolls back the work associated with xid. Any produced messages are discarded - and any consumed messages are re-enqueued. - - - - - If the command is invoked in an improper context (see class grammar) then the server MUST - raise an exception. - - - - - - - - Specifies the xid of the transaction branch that can be rolled back. - - - - - If xid is unknown (the transaction branch has not been started or has already been - ended) then the server MUST raise an exception. - - - - - - If this command is called when xid is still associated with a session then the server - MUST raise an exception. - - - - - - - This command confirms to the client that the transaction branch is rolled back or specify - the error condition. - - The value of this field may be one of the following constants: - - xa-ok: Normal execution - - xa-heurhaz: Due to some failure, the work done on behalf of the specified transaction - branch may have been heuristically completed. - - xa-heurcom: Due to a heuristic decision, the work done on behalf of the specified - transaction branch was committed. - - xa-heurrb: Due to a heuristic decision, the work done on behalf of the specified - transaction branch was rolled back. - - xa-heurmix: Due to a heuristic decision, the work done on behalf of the specified - transaction branch was partially committed and partially rolled back. - - xa-rbrollback: The broker marked the transaction branch rollback-only for an unspecified - reason. - - xa-rbtimeout: The work represented by this transaction branch took too long. - - - - - - - - - Sets the specified transaction branch timeout value in seconds. - - - - - Once set, this timeout value is effective until this command is reinvoked with a different - value. - - - - - - A value of zero resets the timeout value to the default value. - - - - - - - - Specifies the xid of the transaction branch for setting the timeout. - - - - - If xid is unknown (the transaction branch has not been started or has already been - ended) then the server MUST raise an exception. - - - - - - - - The transaction timeout value in seconds. - - - - - - - - - - - Exchanges match and distribute messages across queues. Exchanges can be configured in the - server or created at runtime. - - - - exchange = C:DECLARE - / C:DELETE - / C:QUERY - - - - - The server MUST implement these standard exchange types: fanout, direct. - - - Client attempts to declare an exchange with each of these standard types. - - - - - - The server SHOULD implement these standard exchange types: topic, headers. - - - Client attempts to declare an exchange with each of these standard types. - - - - - - The server MUST, in each virtual host, pre-declare an exchange instance for each standard - exchange type that it implements, where the name of the exchange instance, if defined, is - "amq." followed by the exchange type name. - - The server MUST, in each virtual host, pre-declare at least two direct exchange instances: - one named "amq.direct", the other with no public name that serves as a default exchange for - publish commands (such as message.transfer). - - - Client creates a temporary queue and attempts to bind to each required exchange instance - ("amq.fanout", "amq.direct", "amq.topic", and "amq.headers" if those types are defined). - - - - - - The server MUST pre-declare a direct exchange with no public name to act as the default - exchange for content publish commands (such as message.transfer) and for default queue - bindings. - - - Client checks that the default exchange is active by publishing a message with a suitable - routing key but without specifying the exchange name, then ensuring that the message arrives - in the queue correctly. - - - - - - The default exchange MUST NOT be accessible to the client except by specifying an empty - exchange name in a content publish command (such as message.transfer). That is, the server - must not let clients explicitly bind, unbind, delete, or make any other reference to this - exchange. - - - - - - The server MAY implement other exchange types as wanted. - - - - - - - - - The exchange name is a client-selected string that identifies the exchange for publish - commands. Exchange names may consist of any mixture of digits, letters, and underscores. - Exchange names are scoped by the virtual host. - - - - - - - - This command creates an exchange if it does not already exist, and if the exchange exists, - verifies that it is of the correct and expected class. - - - - - The server SHOULD support a minimum of 16 exchanges per virtual host and ideally, impose - no limit except as defined by available resources. - - - The client creates as many exchanges as it can until the server reports an error; the - number of exchanges successfully created must be at least sixteen. - - - - - - - - - Exchange names starting with "amq." are reserved for pre-declared and standardized - exchanges. The client MUST NOT attempt to create an exchange starting with "amq.". - - - - - - The name of the exchange MUST NOT be a blank or empty string. - - - - - - - Each exchange belongs to one of a set of exchange types implemented by the server. The - exchange types define the functionality of the exchange - i.e. how messages are routed - through it. It is not valid or meaningful to attempt to change the type of an existing - exchange. - - - - - Exchanges cannot be redeclared with different types. The client MUST NOT attempt to - redeclare an existing exchange with a different type than used in the original - exchange.declare command. - - - - - - If the client attempts to create an exchange which the server does not recognize, an - exception MUST be sent. - - - - - - - In the event that a message cannot be routed, this is the name of the exchange to which - the message will be sent. Messages transferred using message.transfer will be routed to - the alternate-exchange only if they are sent with the "none" accept-mode, and the - discard-unroutable delivery property is set to false, and there is no queue to route to - for the given message according to the bindings on this exchange. - - - - - If alternate-exchange is not set (its name is an empty string), unroutable messages - that would be sent to the alternate-exchange MUST be dropped silently. - - - - - - If the alternate-exchange is not empty and if the exchange already exists with a - different alternate-exchange, then the declaration MUST result in an exception. - - - - - - A message which is being routed to a alternate exchange, MUST NOT be re-routed to a - secondary alternate exchange if it fails to route in the primary alternate exchange. - After such a failure, the message MUST be dropped. This prevents looping. - - - - - - - If set, the server will not create the exchange. The client can use this to check whether - an exchange exists without modifying the server state. - - - - If set, and the exchange does not already exist, the server MUST raise an exception. - - - - - - - If set when creating a new exchange, the exchange will be marked as durable. Durable - exchanges remain active when a server restarts. Non-durable exchanges (transient - exchanges) are purged if/when a server restarts. - - - - - The server MUST support both durable and transient exchanges. - - - - - - The server MUST ignore the durable field if the exchange already exists. - - - - - - - If set, the exchange is deleted automatically when there remain no bindings between the - exchange and any queue. Such an exchange will not be automatically deleted until at least - one binding has been made to prevent the immediate deletion of the exchange upon creation. - - - - The server MUST ignore the auto-delete field if the exchange already exists. - - - - - - - A set of arguments for the declaration. The syntax and semantics of these arguments - depends on the server implementation. This field is ignored if passive is 1. - - - - - If the arguments field contains arguments which are not understood by the server, - it MUST raise an exception. - - - - - - - - - - This command deletes an exchange. When an exchange is deleted all queue bindings on the - exchange are cancelled. - - - - - - - - The client MUST NOT attempt to delete an exchange that does not exist. - - - - - - The name of the exchange MUST NOT be a missing or empty string. - - - - - - An exchange MUST NOT be deleted if it is in use as an alternate-exchange by a queue or - by another exchange. - - - - - - - - If set, the server will only delete the exchange if it has no queue bindings. If the - exchange has queue bindings the server does not delete it but raises an exception - instead. - - - - If the exchange has queue bindings, and the if-unused flag is set, the server MUST NOT - delete the exchange, but MUST raise and exception. - - - - - - - - - - This command is used to request information on a particular exchange. - - - - - - - The name of the exchange for which information is requested. If not specified explicitly - the default exchange is implied. - - - - - - - This is sent in response to a query request and conveys information on a particular - exchange. - - - - - The type of the exchange. Will be empty if the exchange is not found. - - - - - - The durability of the exchange, i.e. if set the exchange is durable. Will not be set - if the exchange is not found. - - - - - - If set, the exchange for which information was requested is not known. - - - - - - A set of properties of the exchange whose syntax and semantics depends on the server - implementation. Will be empty if the exchange is not found. - - - - - - - - - - This command binds a queue to an exchange. Until a queue is bound it will not receive - any messages. In a classic messaging model, store-and-forward queues are bound to a direct - exchange and subscription queues are bound to a topic exchange. - - - - A server MUST ignore duplicate bindings - that is, two or more bind commands with the - same exchange, queue, and binding-key - without treating these as an error. The value of - the arguments used for the binding MUST NOT be altered by subsequent binding requests. - - - A client binds a named queue to an exchange. The client then repeats the bind (with - identical exchange, queue, and binding-key). The second binding should use a different - value for the arguments field. - - - - - Bindings between durable queues and durable exchanges are automatically durable and - the server MUST restore such bindings after a server restart. - A server creates a named durable queue and binds it to a durable - exchange. The server is restarted. The client then attempts to use the queue/exchange - combination. - - - - The server SHOULD support at least 4 bindings per queue, and ideally, impose no limit - except as defined by available resources. - A client creates a named queue and attempts to bind it to 4 different - exchanges. - - - - Where more than one binding exists between a particular exchange instance and a - particular queue instance any given message published to that exchange should be delivered - to that queue at most once, regardless of how many distinct bindings match. - A client creates a named queue and binds it to the same topic exchange - at least three times using intersecting binding-keys (for example, "animals.*", - "animals.dogs.*", "animal.dogs.chihuahua"). Verify that a message matching all the - bindings (using previous example, routing key = "animal.dogs.chihuahua") is delivered once - only. - - - - - - Specifies the name of the queue to bind. - - - A client MUST NOT be allowed to bind a non-existent and unnamed queue (i.e. empty - queue name) to an exchange. - A client attempts to bind with an unnamed (empty) queue name to an - exchange. - - - - A client MUST NOT be allowed to bind a non-existent queue (i.e. not previously - declared) to an exchange. - A client attempts to bind an undeclared queue name to an exchange. - - - - - - - A client MUST NOT be allowed to bind a queue to a non-existent exchange. - A client attempts to bind a named queue to a undeclared exchange. - - - - - The name of the exchange MUST NOT be a blank or empty string. - - - - - The binding-key uniquely identifies a binding between a given (exchange, queue) pair. - Depending on the exchange configuration, the binding key may be matched against the - message routing key in order to make routing decisions. The match algorithm depends on the - exchange type. Some exchange types may ignore the binding key when making routing - decisions. Refer to the specific exchange type documentation. The meaning of an empty - binding key depends on the exchange implementation. - - - - A set of arguments for the binding. The syntax and semantics of these arguments - depends on the exchange class. - - - If the arguments field contains arguments which are not understood by the server, it - MUST raise an exception. - - - - - - - - - This command unbinds a queue from an exchange. - - - - - - - Specifies the name of the queue to unbind. - - - - If the queue does not exist the server MUST raise an exception. - - - - - - - The name of the exchange to unbind from. - - - - - If the exchange does not exist the server MUST raise an exception. - - - - - - The name of the exchange MUST NOT be a blank or empty string. - - - - - - - Specifies the binding-key of the binding to unbind. - - - - - If there is no matching binding-key the server MUST raise an exception. - - - - - - - - - - This command is used to request information on the bindings to a particular exchange. - - - - - - - The name of the exchange for which binding information is being requested. If not - specified explicitly the default exchange is implied. - - - - - - If populated then determine whether the given queue is bound to the exchange. - - - - - - If populated defines the binding-key of the binding of interest, if not populated the - request will ignore the binding-key on bindings when searching for a match. - - - - - - If populated defines the arguments of the binding of interest if not populated the request - will ignore the arguments on bindings when searching for a match - - - - - - - - If set, the exchange for which information was requested is not known. - - - - - - If set, the queue specified is not known. - - - - - - A bit which if set indicates that no binding was found from the specified exchange to - the specified queue. - - - - - - A bit which if set indicates that no binding was found from the specified exchange - with the specified binding-key. - - - - - - A bit which if set indicates that no binding was found from the specified exchange - with the specified arguments. - - - - - - - - - - - - - Queues store and forward messages. Queues can be configured in the server or created at - runtime. Queues must be attached to at least one exchange in order to receive messages from - publishers. - - - - queue = C:DECLARE - / C:BIND - / C:PURGE - / C:DELETE - / C:QUERY - / C:UNBIND - - - - - A server MUST allow any content class to be sent to any queue, in any mix, and queue and - deliver these content classes independently. Note that all commands that fetch content off - queues are specific to a given content class. - - - Client creates an exchange of each standard type and several queues that it binds to each - exchange. It must then successfully send each of the standard content types to each of the - available queues. - - - - - - - - - The queue name identifies the queue within the virtual host. Queue names must have a length - of between 1 and 255 characters inclusive, must start with a digit, letter or underscores - ('_') character, and must be otherwise encoded in UTF-8. - - - - - - - - This command creates or checks a queue. When creating a new queue the client can specify - various properties that control the durability of the queue and its contents, and the level - of sharing for the queue. - - - - - The server MUST create a default binding for a newly-created queue to the default - exchange, which is an exchange of type 'direct' and use the queue name as the binding-key. - - - Client creates a new queue, and then without explicitly binding it to an exchange, - attempts to send a message through the default exchange binding, i.e. publish a message to - the empty exchange, with the queue name as binding-key. - - - - - - The server SHOULD support a minimum of 256 queues per virtual host and ideally, impose no - limit except as defined by available resources. - - - Client attempts to create as many queues as it can until the server reports an error. The - resulting count must at least be 256. - - - - - - - - - Queue names starting with "amq." are reserved for pre-declared and standardized server - queues. A client MUST NOT attempt to declare a queue with a name that starts with "amq." - and the passive option set to zero. - - - A client attempts to create a queue with a name starting with "amq." and with the - passive option set to zero. - - - - - - - The alternate-exchange field specifies how messages on this queue should be treated when - they are rejected by a subscriber, or when they are orphaned by queue deletion. When - present, rejected or orphaned messages MUST be routed to the alternate-exchange. In all - cases the messages MUST be removed from the queue. - - - - - If the alternate-exchange is not empty and if the queue already exists with a different - alternate-exchange, then the declaration MUST result in an exception. - - - - - - if the alternate-exchange does not match the name of any existing exchange on the - server, then an exception must be raised. - - - - - - - If set, the server will not create the queue. This field allows the client to assert the - presence of a queue without modifying the server state. - - - - - The client MAY ask the server to assert that a queue exists without creating the queue - if not. If the queue does not exist, the server treats this as a failure. - - - Client declares an existing queue with the passive option and expects the command to - succeed. Client then attempts to declare a non-existent queue with the passive option, - and the server must close the session with the correct exception. - - - - - - - If set when creating a new queue, the queue will be marked as durable. Durable queues - remain active when a server restarts. Non-durable queues (transient queues) are purged - if/when a server restarts. Note that durable queues do not necessarily hold persistent - messages, although it does not make sense to send persistent messages to a transient - queue. - - - - - The queue definition MUST survive the server losing all transient memory, e.g. a - machine restart. - - - Client creates a durable queue; server is then restarted. Client then attempts to send - message to the queue. The message should be successfully delivered. - - - - - - The server MUST support both durable and transient queues. - - - A client creates two named queues, one durable and one transient. - - - - - - The server MUST ignore the durable field if the queue already exists. - - - A client creates two named queues, one durable and one transient. The client then - attempts to declare the two queues using the same names again, but reversing the value - of the durable flag in each case. Verify that the queues still exist with the original - durable flag values. - - - - - - - Exclusive queues can only be used from one session at a time. Once a session - declares an exclusive queue, that queue cannot be used by any other session until the - declaring session closes. - - - - - The server MUST support both exclusive (private) and non-exclusive (shared) queues. - - - A client creates two named queues, one exclusive and one non-exclusive. - - - - - - If the server receives a declare, bind, consume or get request for a queue that has been - declared as exclusive by an existing client session, it MUST raise an exception. - - - A client declares an exclusive named queue. A second client on a different session - attempts to declare a queue of the same name. - - - - - - - If this field is set and the exclusive field is also set, then the queue MUST be deleted - when the session closes. - - If this field is set and the exclusive field is not set the queue is deleted when all - the consumers have finished using it. Last consumer can be cancelled either explicitly - or because its session is closed. If there was no consumer ever on the queue, it won't - be deleted. - - - - - The server MUST ignore the auto-delete field if the queue already exists. - - - A client creates two named queues, one as auto-delete and one explicit-delete. The - client then attempts to declare the two queues using the same names again, but reversing - the value of the auto-delete field in each case. Verify that the queues still exist with - the original auto-delete flag values. - - - - - - - A set of arguments for the declaration. The syntax and semantics of these arguments - depends on the server implementation. This field is ignored if passive is 1. - - - - - If the arguments field contains arguments which are not understood by the server, - it MUST raise an exception. - - - - - - - - - - This command deletes a queue. When a queue is deleted any pending messages are sent to the - alternate-exchange if defined, or discarded if it is not. - - - - - - - - Specifies the name of the queue to delete. - - - - - If the queue name in this command is empty, the server MUST raise an exception. - - - - - - The queue must exist. If the client attempts to delete a non-existing queue the server - MUST raise an exception. - - - - - - - If set, the server will only delete the queue if it has no consumers. If the queue has - consumers the server does does not delete it but raises an exception instead. - - - - - The server MUST respect the if-unused flag when deleting a queue. - - - - - - - If set, the server will only delete the queue if it has no messages. - - - - If the queue is not empty the server MUST raise an exception. - - - - - - - - - - This command removes all messages from a queue. It does not cancel subscribers. Purged - messages are deleted without any formal "undo" mechanism. - - - - - A call to purge MUST result in an empty queue. - - - - - - The server MUST NOT purge messages that have already been sent to a client but not yet - accepted. - - - - - - The server MAY implement a purge queue or log that allows system administrators to recover - accidentally-purged messages. The server SHOULD NOT keep purged messages in the same - storage spaces as the live messages since the volumes of purged messages may get very - large. - - - - - - - - Specifies the name of the queue to purge. - - - - - If the the queue name in this command is empty, the server MUST raise an exception. - - - - - - The queue MUST exist. Attempting to purge a non-existing queue MUST cause an exception. - - - - - - - - - - This command requests information about a queue. - - - - - - - - - - This is sent in response to queue.query, and conveys the requested information about a - queue. If no queue with the specified name exists then none of the fields within the - returned result struct will be populated. - - - - - Reports the name of the queue. - - - - - - - - - - - - - - - Reports the number of messages in the queue. - - - - - Reports the number of subscribers for the queue. - - - - - - - - - - - - - The file class provides commands that support reliable file transfer. File messages have a - specific set of properties that are required for interoperability with file transfer - applications. File messages and acknowledgements are subject to session transactions. Note - that the file class does not provide message browsing commands; these are not compatible with - the staging model. Applications that need browsable file transfer should use Message content - and the Message class. - - - - file = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL - / C:OPEN S:OPEN-OK C:STAGE content - / S:OPEN C:OPEN-OK S:STAGE content - / C:PUBLISH - / S:DELIVER - / S:RETURN - / C:ACK - / C:REJECT - - - - - The server MUST make a best-effort to hold file messages on a reliable storage mechanism. - - - - - - The server MUST NOT discard a file message in case of a queue overflow. The server MUST use - the Session.Flow command to slow or stop a file message publisher when necessary. - - - - - - The server MUST implement at least 2 priority levels for file messages, where priorities 0-4 - and 5-9 are treated as two distinct levels. The server MAY implement up to 10 priority - levels. - - - - - - The server MUST support both automatic and explicit acknowledgements on file content. - - - - - - - - - - - - - - - - - - - - - - - The return code. The AMQP return codes are defined by this enum. - - - - - The client attempted to transfer content larger than the server could accept. - - - - - - The exchange cannot route a message, most likely due to an invalid routing key. Only - when the mandatory flag is set. - - - - - - The exchange cannot deliver to a consumer when the immediate flag is set. As a result of - pending data on the queue or the absence of any consumers of the queue. - - - - - - - - - - This command requests a specific quality of service. The QoS can be specified for the - current session or for all sessions on the connection. The particular properties and - semantics of a qos command always depend on the content class semantics. Though the qos - command could in principle apply to both peers, it is currently meaningful only for the - server. - - - - - - - - - The client can request that messages be sent in advance so that when the client finishes - processing a message, the following message is already held locally, rather than needing - to be sent within the session. Pre-fetching gives a performance improvement. This field - specifies the pre-fetch window size in octets. May be set to zero, meaning "no specific - limit". Note that other pre-fetch limits may still apply. The prefetch-size is ignored if - the no-ack option is set. - - - - - - Specifies a pre-fetch window in terms of whole messages. This is compatible with some file - API implementations. This field may be used in combination with the prefetch-size field; a - message will only be sent in advance if both pre-fetch windows (and those at the session - and connection level) allow it. The prefetch-count is ignored if the no-ack option is set. - - - - - The server MAY send less data in advance than allowed by the client's specified - pre-fetch windows but it MUST NOT send more. - - - - - - - By default the QoS settings apply to the current session only. If this field is set, they - are applied to the entire connection. - - - - - - - - - This command tells the client that the requested QoS levels could be handled by the server. - The requested QoS applies to all active consumers until a new QoS is defined. - - - - - - - - - - This command asks the server to start a "consumer", which is a transient request for - messages from a specific queue. Consumers last as long as the session they were created on, - or until the client cancels them. - - - - - The server SHOULD support at least 16 consumers per queue, unless the queue was declared - as private, and ideally, impose no limit except as defined by available resources. - - - - - - - - - - Specifies the name of the queue to consume from. - - - - - If the queue name in this command is empty, the server MUST raise an exception. - - - - - - - Specifies the identifier for the consumer. The consumer tag is local to a connection, so - two clients can use the same consumer tags. - - - - - The tag MUST NOT refer to an existing consumer. If the client attempts to create two - consumers with the same non-empty tag the server MUST raise an exception. - - - - - - The client MUST NOT specify a tag that is empty or blank. - - - Attempt to create a consumers with an empty tag. - - - - - - If the no-local field is set the server will not send messages to the connection that - published them. - - - - - If this field is set the server does not expect acknowledgements for messages. That is, - when a message is delivered to the client the server automatically and silently - acknowledges it on behalf of the client. This functionality increases performance but at - the cost of reliability. Messages can get lost if a client dies before it can deliver them - to the application. - - - - - - Request exclusive consumer access, meaning only this consumer can access the queue. - - - - - If the server cannot grant exclusive access to the queue when asked, - because there are - other consumers active - it MUST raise an exception. - - - - - - - If set, the server will not respond to the command. The client should not wait for a reply - command. If the server could not complete the command it will raise an exception. - - - - - - A set of arguments for the consume. The syntax and semantics of these arguments depends on - the providers implementation. - - - - - - - This command provides the client with a consumer tag which it MUST use in commands that work - with the consumer. - - - - - - - Holds the consumer tag specified by the client or provided by the server. - - - - - - - - - This command cancels a consumer. This does not affect already delivered messages, but it - does mean the server will not send any more messages for that consumer. - - - - - - - the identifier of the consumer to be cancelled. - - - - - - - - - This command requests permission to start staging a message. Staging means sending the - message into a temporary area at the recipient end and then delivering the message by - referring to this temporary area. Staging is how the protocol handles partial file transfers - - if a message is partially staged and the connection breaks, the next time the sender - starts to stage it, it can restart from where it left off. - - - - - - - - - - This is the staging identifier. This is an arbitrary string chosen by the sender. For - staging to work correctly the sender must use the same staging identifier when staging the - same message a second time after recovery from a failure. A good choice for the staging - identifier would be the SHA1 hash of the message properties data (including the original - filename, revised time, etc.). - - - - - - The size of the content in octets. The recipient may use this information to allocate or - check available space in advance, to avoid "disk full" errors during staging of very large - messages. - - - - - The sender MUST accurately fill the content-size field. Zero-length content is - permitted. - - - - - - - - - - This command confirms that the recipient is ready to accept staged data. If the message was - already partially-staged at a previous time the recipient will report the number of octets - already staged. - - - - - - - - - - The amount of previously-staged content in octets. For a new message this will be zero. - - - - - The sender MUST start sending data from this octet offset in the message, counting from - zero. - - - - - - The recipient MAY decide how long to hold partially-staged content and MAY implement - staging by always discarding partially-staged content. However if it uses the file - content type it MUST support the staging commands. - - - - - - - - - - This command stages the message, sending the message content to the recipient from the octet - offset specified in the Open-Ok command. - - - - - - -
- -
- -
-
- - - - - - This command publishes a staged file message to a specific exchange. The file message will - be routed to queues as defined by the exchange configuration and distributed to any active - consumers when the transaction, if any, is committed. - - - - - - - Specifies the name of the exchange to publish to. The exchange name can be empty, meaning - the default exchange. If the exchange name is specified, and that exchange does not exist, - the server will raise an exception. - - - - - The server MUST accept a blank exchange name to mean the default exchange. - - - - - - The exchange MAY refuse file content in which case it MUST send an exception. - - - - - - - Specifies the routing key for the message. The routing key is used for routing messages - depending on the exchange configuration. - - - - - - This flag tells the server how to react if the message cannot be routed to a queue. If - this flag is set, the server will return an unroutable message with a Return command. If - this flag is zero, the server silently drops the message. - - - - - The server SHOULD implement the mandatory flag. - - - - - - - This flag tells the server how to react if the message cannot be routed to a queue - consumer immediately. If this flag is set, the server will return an undeliverable message - with a Return command. If this flag is zero, the server will queue the message, but with - no guarantee that it will ever be consumed. - - - - - The server SHOULD implement the immediate flag. - - - - - - - This is the staging identifier of the message to publish. The message must have been - staged. Note that a client can send the Publish command asynchronously without waiting for - staging to finish. - - - - - - - - - This command returns an undeliverable message that was published with the "immediate" flag - set, or an unroutable message published with the "mandatory" flag set. The reply code and - text provide information about the reason that the message was undeliverable. - - - - - - - - - This text can be logged as an aid to resolving issues. - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - - Specifies the routing key name specified when the message was published. - - - - -
- -
- -
-
- - - - - - This command delivers a staged file message to the client, via a consumer. In the - asynchronous message delivery model, the client starts a consumer using the consume command, - then the server responds with Deliver commands as and when messages arrive for that - consumer. - - - - - The server SHOULD track the number of times a message has been delivered to clients and - when a message is redelivered a certain number of times - e.g. 5 times - without being - acknowledged, the server SHOULD consider the message to be non-processable (possibly - causing client applications to abort), and move the message to a dead letter queue. - - - - - - - - - - The server-assigned and session-specific delivery tag - - - - - The server MUST NOT use a zero value for delivery tags. Zero is reserved for client use, - meaning "all messages so far received". - - - - - - - This boolean flag indicates that the message may have been previously delivered to this - or another client. - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - - Specifies the routing key name specified when the message was published. - - - - - - This is the staging identifier of the message to deliver. The message must have been - staged. Note that a server can send the Deliver command asynchronously without waiting for - staging to finish. - - - - - - - - - This command acknowledges one or more messages delivered via the Deliver command. The client - can ask to confirm a single message or a set of messages up to and including a specific - message. - - - - - - - The identifier of the message being acknowledged - - - - The delivery tag is valid only within the session from which the message was received. - i.e. A client MUST NOT receive a message on one session and then acknowledge it on - another. - - - - - - - If set to 1, the delivery tag is treated as "up to and including", so that the client can - acknowledge multiple messages with a single command. If set to zero, the delivery tag - refers to a single message. If the multiple field is 1, and the delivery tag is zero, - tells the server to acknowledge all outstanding messages. - - - - - The server MUST validate that a non-zero delivery-tag refers to an delivered message, - and raise an exception if this is not the case. - - - - - - - - - - This command allows a client to reject a message. It can be used to return untreatable - messages to their original queue. Note that file content is staged before delivery, so the - client will not use this command to interrupt delivery of a large message. - - - - - The server SHOULD interpret this command as meaning that the client is unable to process - the message at this time. - - - - - - A client MUST NOT use this command as a means of selecting messages to process. A rejected - message MAY be discarded or dead-lettered, not necessarily passed to another client. - - - - - - - - the identifier of the message to be rejected - - - - The delivery tag is valid only within the session from which the message was received. - i.e. A client MUST NOT receive a message on one session and then reject it on another. - - - - - - - If this field is zero, the message will be discarded. If this bit is 1, the server will - attempt to requeue the message. - - - - - The server MUST NOT deliver the message to the same client within the context of the - current session. The recommended strategy is to attempt to deliver the message to an - alternative consumer, and if that is not possible, to move the message to a dead-letter - queue. The server MAY use more sophisticated tracking to hold the message on the queue - and redeliver it to the same client at a later stage. - - - - - -
- - - - - - The stream class provides commands that support multimedia streaming. The stream class uses - the following semantics: one message is one packet of data; delivery is unacknowledged and - unreliable; the consumer can specify quality of service parameters that the server can try to - adhere to; lower-priority messages may be discarded in favor of high priority messages. - - - - stream = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL - / C:PUBLISH content - / S:RETURN - / S:DELIVER content - - - - - The server SHOULD discard stream messages on a priority basis if the queue size exceeds some - configured limit. - - - - - - The server MUST implement at least 2 priority levels for stream messages, where priorities - 0-4 and 5-9 are treated as two distinct levels. The server MAY implement up to 10 priority - levels. - - - - - - The server MUST implement automatic acknowledgements on stream content. That is, as soon as - a message is delivered to a client via a Deliver command, the server must remove it from the - queue. - - - - - - - - - - - - - - - - - - The return code. The AMQP return codes are defined by this enum. - - - - - The client attempted to transfer content larger than the server could accept. - - - - - - The exchange cannot route a message, most likely due to an invalid routing key. Only - when the mandatory flag is set. - - - - - - The exchange cannot deliver to a consumer when the immediate flag is set. As a result of - pending data on the queue or the absence of any consumers of the queue. - - - - - - - - - - This command requests a specific quality of service. The QoS can be specified for the - current session or for all sessions on the connection. The particular properties and - semantics of a qos command always depend on the content class semantics. Though the qos - command could in principle apply to both peers, it is currently meaningful only for the - server. - - - - - - - - - The client can request that messages be sent in advance so that when the client finishes - processing a message, the following message is already held locally, rather than needing - to be sent within the session. Pre-fetching gives a performance improvement. This field - specifies the pre-fetch window size in octets. May be set to zero, meaning "no specific - limit". Note that other pre-fetch limits may still apply. - - - - - - Specifies a pre-fetch window in terms of whole messages. This field may be used in - combination with the prefetch-size field; a message will only be sent in advance if both - pre-fetch windows (and those at the session and connection level) allow it. - - - - - - Specifies a desired transfer rate in octets per second. This is usually determined by the - application that uses the streaming data. A value of zero means "no limit", i.e. as - rapidly as possible. - - - - - The server MAY ignore the pre-fetch values and consume rates, depending on the type of - stream and the ability of the server to queue and/or reply it. - - - - - - The server MAY drop low-priority messages in favor of high-priority messages. - - - - - - - By default the QoS settings apply to the current session only. If this field is set, they - are applied to the entire connection. - - - - - - - - - This command tells the client that the requested QoS levels could be handled by the server. - The requested QoS applies to all active consumers until a new QoS is defined. - - - - - - - - - - This command asks the server to start a "consumer", which is a transient request for - messages from a specific queue. Consumers last as long as the session they were created on, - or until the client cancels them. - - - - - The server SHOULD support at least 16 consumers per queue, unless the queue was declared - as private, and ideally, impose no limit except as defined by available resources. - - - - - - Streaming applications SHOULD use different sessions to select different streaming - resolutions. AMQP makes no provision for filtering and/or transforming streams except on - the basis of priority-based selective delivery of individual messages. - - - - - - - - - - Specifies the name of the queue to consume from. - - - - - If the queue name in this command is empty, the server MUST raise an exception. - - - - - - - Specifies the identifier for the consumer. The consumer tag is local to a connection, so - two clients can use the same consumer tags. - - - - - The tag MUST NOT refer to an existing consumer. If the client attempts to create two - consumers with the same non-empty tag the server MUST raise an exception. - - - - - - The client MUST NOT specify a tag that is empty or blank. - - - Attempt to create a consumers with an empty tag. - - - - - - If the no-local field is set the server will not send messages to the connection that - published them. - - - - - Request exclusive consumer access, meaning only this consumer can access the queue. - - - - - If the server cannot grant exclusive access to the queue when asked, - because there are - other consumers active - it MUST raise an exception with return code 405 - (resource locked). - - - - - - - If set, the server will not respond to the command. The client should not wait for a reply - command. If the server could not complete the command it will raise an exception. - - - - - - A set of arguments for the consume. The syntax and semantics of these arguments depends on - the providers implementation. - - - - - - - - - This command provides the client with a consumer tag which it may use in commands that work - with the consumer. - - - - - - - Holds the consumer tag specified by the client or provided by the server. - - - - - - - - - This command cancels a consumer. Since message delivery is asynchronous the client may - continue to receive messages for a short while after cancelling a consumer. It may process - or discard these as appropriate. - - - - - - - - - - - - This command publishes a message to a specific exchange. The message will be routed to - queues as defined by the exchange configuration and distributed to any active consumers as - appropriate. - - - - - - - Specifies the name of the exchange to publish to. The exchange name can be empty, meaning - the default exchange. If the exchange name is specified, and that exchange does not exist, - the server will raise an exception. - - - - - The server MUST accept a blank exchange name to mean the default exchange. - - - - - - The exchange MAY refuse stream content in which case it MUST respond with an exception. - - - - - - - Specifies the routing key for the message. The routing key is used for routing messages - depending on the exchange configuration. - - - - - - This flag tells the server how to react if the message cannot be routed to a queue. If - this flag is set, the server will return an unroutable message with a Return command. If - this flag is zero, the server silently drops the message. - - - - - The server SHOULD implement the mandatory flag. - - - - - - - This flag tells the server how to react if the message cannot be routed to a queue - consumer immediately. If this flag is set, the server will return an undeliverable message - with a Return command. If this flag is zero, the server will queue the message, but with - no guarantee that it will ever be consumed. - - - - - The server SHOULD implement the immediate flag. - - - - - -
- -
- -
-
- - - - - - This command returns an undeliverable message that was published with the "immediate" flag - set, or an unroutable message published with the "mandatory" flag set. The reply code and - text provide information about the reason that the message was undeliverable. - - - - - - - - - The localized reply text. This text can be logged as an aid to resolving issues. - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - - Specifies the routing key name specified when the message was published. - - - - -
- -
- -
-
- - - - - - This command delivers a message to the client, via a consumer. In the asynchronous message - delivery model, the client starts a consumer using the Consume command, then the server - responds with Deliver commands as and when messages arrive for that consumer. - - - - - - - - - The server-assigned and session-specific delivery tag - - - - The delivery tag is valid only within the session from which the message was received. - i.e. A client MUST NOT receive a message on one session and then acknowledge it on - another. - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - - Specifies the name of the queue that the message came from. Note that a single session can - start many consumers on different queues. - - - - -
- -
- -
-
- -
- -
diff --git a/python/qpid/specs/amqp.0-10.dtd b/python/qpid/specs/amqp.0-10.dtd deleted file mode 100644 index 2be198525a..0000000000 --- a/python/qpid/specs/amqp.0-10.dtd +++ /dev/null @@ -1,246 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/python/qpid/specs/amqp.0-8.xml b/python/qpid/specs/amqp.0-8.xml deleted file mode 100644 index 0463f45fa9..0000000000 --- a/python/qpid/specs/amqp.0-8.xml +++ /dev/null @@ -1,3998 +0,0 @@ - - - - - - - - AMQ Protocol 0.80 - - - - - - - - - - - - - - Indicates that the method completed successfully. This reply code is - reserved for future use - the current protocol design does not use - positive confirmation and reply codes are sent only in case of an - error. - - - The client asked for a specific message that is no longer available. - The message was delivered to another client, or was purged from the - queue for some other reason. - - - The client attempted to transfer content larger than the server - could accept at the present time. The client may retry at a later - time. - - - An operator intervened to close the connection for some reason. - The client may retry at some later date. - - - The client tried to work with an unknown virtual host or cluster. - - - The client attempted to work with a server entity to which it has - no due to security settings. - - - The client attempted to work with a server entity that does not exist. - - - The client attempted to work with a server entity to which it has - no access because another client is working with it. - - - The client sent a malformed frame that the server could not decode. - This strongly implies a programming error in the client. - - - The client sent a frame that contained illegal values for one or more - fields. This strongly implies a programming error in the client. - - - The client sent an invalid sequence of frames, attempting to perform - an operation that was considered invalid by the server. This usually - implies a programming error in the client. - - - The client attempted to work with a channel that had not been - correctly opened. This most likely indicates a fault in the client - layer. - - - The server could not complete the method because it lacked sufficient - resources. This may be due to the client creating too many of some - type of entity. - - - The client tried to work with some entity in a manner that is - prohibited by the server, due to security settings or by some other - criteria. - - - The client tried to use functionality that is not implemented in the - server. - - - The server could not complete the method because of an internal error. - The server may require intervention by an operator in order to resume - normal operations. - - - - access ticket granted by server - - An access ticket granted by the server for a certain set of access - rights within a specific realm. Access tickets are valid within the - channel where they were created, and expire when the channel closes. - - - - - - consumer tag - - Identifier for the consumer, valid within the current connection. - - - The consumer tag is valid only within the channel from which the - consumer was created. I.e. a client MUST NOT create a consumer in - one channel and then use it in another. - - - - server-assigned delivery tag - - The server-assigned and channel-specific delivery tag - - - The delivery tag is valid only within the channel from which the - message was received. I.e. a client MUST NOT receive a message on - one channel and then acknowledge it on another. - - - The server MUST NOT use a zero value for delivery tags. Zero is - reserved for client use, meaning "all messages so far received". - - - - exchange name - - The exchange name is a client-selected string that identifies - the exchange for publish methods. Exchange names may consist - of any mixture of digits, letters, and underscores. Exchange - names are scoped by the virtual host. - - - - -list of known hosts - -Specifies the list of equivalent or alternative hosts that the server -knows about, which will normally include the current server itself. -Clients can cache this information and use it when reconnecting to a -server after a failure. - - -The server MAY leave this field empty if it knows of no other -hosts than itself. - - - - - no acknowledgement needed - - If this field is set the server does not expect acknowledgments - for messages. That is, when a message is delivered to the client - the server automatically and silently acknowledges it on behalf - of the client. This functionality increases performance but at - the cost of reliability. Messages can get lost if a client dies - before it can deliver them to the application. - - - - do not deliver own messages - - If the no-local field is set the server will not send messages to - the client that published them. - - - - - Must start with a slash "/" and continue with path names - separated by slashes. A path name consists of any combination - of at least one of [A-Za-z0-9] plus zero or more of [.-_+!=:]. - - - - - - - -This string provides a set of peer properties, used for -identification, debugging, and general information. - - -The properties SHOULD contain these fields: -"product", giving the name of the peer product, "version", giving -the name of the peer version, "platform", giving the name of the -operating system, "copyright", if appropriate, and "information", -giving other general information. - - - - queue name - - The queue name identifies the queue within the vhost. Queue - names may consist of any mixture of digits, letters, and - underscores. - - - - - message is being redelivered - - This indicates that the message has been previously delivered to - this or another client. - - - The server SHOULD try to signal redelivered messages when it can. - When redelivering a message that was not successfully acknowledged, - the server SHOULD deliver it to the original client if possible. - - - The client MUST NOT rely on the redelivered field but MUST take it - as a hint that the message may already have been processed. A - fully robust client must be able to track duplicate received messages - on non-transacted, and locally-transacted channels. - - - -reply code from server - - The reply code. The AMQ reply codes are defined in AMQ RFC 011. - - - - -localised reply text - - The localised reply text. This text can be logged as an aid to - resolving issues. - - - - - - work with socket connections - - The connection class provides methods for a client to establish a - network connection to a server, and for both peers to operate the - connection thereafter. - - - connection = open-connection *use-connection close-connection - open-connection = C:protocol-header - S:START C:START-OK - *challenge - S:TUNE C:TUNE-OK - C:OPEN S:OPEN-OK | S:REDIRECT - challenge = S:SECURE C:SECURE-OK - use-connection = *channel - close-connection = C:CLOSE S:CLOSE-OK - / S:CLOSE C:CLOSE-OK - - - - - - start connection negotiation - - This method starts the connection negotiation process by telling - the client the protocol version that the server proposes, along - with a list of security mechanisms which the client can use for - authentication. - - - If the client cannot handle the protocol version suggested by the - server it MUST close the socket connection. - - - The server MUST provide a protocol version that is lower than or - equal to that requested by the client in the protocol header. If - the server cannot support the specified protocol it MUST NOT send - this method, but MUST close the socket connection. - - - - - protocol major version - - The protocol major version that the server agrees to use, which - cannot be higher than the client's major version. - - - - protocol major version - - The protocol minor version that the server agrees to use, which - cannot be higher than the client's minor version. - - - - server properties - - - available security mechanisms - - A list of the security mechanisms that the server supports, delimited - by spaces. Currently ASL supports these mechanisms: PLAIN. - - - - - - available message locales - - A list of the message locales that the server supports, delimited - by spaces. The locale defines the language in which the server - will send reply texts. - - - All servers MUST support at least the en_US locale. - - - - - - select security mechanism and locale - - This method selects a SASL security mechanism. ASL uses SASL - (RFC2222) to negotiate authentication and encryption. - - - - client properties - - - selected security mechanism - - A single security mechanisms selected by the client, which must be - one of those specified by the server. - - - The client SHOULD authenticate using the highest-level security - profile it can handle from the list provided by the server. - - - The mechanism field MUST contain one of the security mechanisms - proposed by the server in the Start method. If it doesn't, the - server MUST close the socket. - - - - - security response data - - A block of opaque data passed to the security mechanism. The contents - of this data are defined by the SASL security mechanism. For the - PLAIN security mechanism this is defined as a field table holding - two fields, LOGIN and PASSWORD. - - - - - selected message locale - - A single message local selected by the client, which must be one - of those specified by the server. - - - - - - - security mechanism challenge - - The SASL protocol works by exchanging challenges and responses until - both peers have received sufficient information to authenticate each - other. This method challenges the client to provide more information. - - - - - security challenge data - - Challenge information, a block of opaque binary data passed to - the security mechanism. - - - - - - security mechanism response - - This method attempts to authenticate, passing a block of SASL data - for the security mechanism at the server side. - - - - security response data - - A block of opaque data passed to the security mechanism. The contents - of this data are defined by the SASL security mechanism. - - - - - - - propose connection tuning parameters - - This method proposes a set of connection configuration values - to the client. The client can accept and/or adjust these. - - - - - proposed maximum channels - - The maximum total number of channels that the server allows - per connection. Zero means that the server does not impose a - fixed limit, but the number of allowed channels may be limited - by available server resources. - - - - proposed maximum frame size - - The largest frame size that the server proposes for the - connection. The client can negotiate a lower value. Zero means - that the server does not impose any specific limit but may reject - very large frames if it cannot allocate resources for them. - - - Until the frame-max has been negotiated, both peers MUST accept - frames of up to 4096 octets large. The minimum non-zero value for - the frame-max field is 4096. - - - - desired heartbeat delay - - The delay, in seconds, of the connection heartbeat that the server - wants. Zero means the server does not want a heartbeat. - - - - - negotiate connection tuning parameters - - This method sends the client's connection tuning parameters to the - server. Certain fields are negotiated, others provide capability - information. - - - - negotiated maximum channels - - The maximum total number of channels that the client will use - per connection. May not be higher than the value specified by - the server. - - - The server MAY ignore the channel-max value or MAY use it for - tuning its resource allocation. - - - - - - negotiated maximum frame size - - The largest frame size that the client and server will use for - the connection. Zero means that the client does not impose any - specific limit but may reject very large frames if it cannot - allocate resources for them. Note that the frame-max limit - applies principally to content frames, where large contents - can be broken into frames of arbitrary size. - - - Until the frame-max has been negotiated, both peers must accept - frames of up to 4096 octets large. The minimum non-zero value for - the frame-max field is 4096. - - - - desired heartbeat delay - - The delay, in seconds, of the connection heartbeat that the client - wants. Zero means the client does not want a heartbeat. - - - - - - open connection to virtual host - - This method opens a connection to a virtual host, which is a - collection of resources, and acts to separate multiple application - domains within a server. - - - The client MUST open the context before doing any work on the - connection. - - - - - - virtual host name - - - The name of the virtual host to work with. - - - If the server supports multiple virtual hosts, it MUST enforce a - full separation of exchanges, queues, and all associated entities - per virtual host. An application, connected to a specific virtual - host, MUST NOT be able to access resources of another virtual host. - - - The server SHOULD verify that the client has permission to access - the specified virtual host. - - - The server MAY configure arbitrary limits per virtual host, such - as the number of each type of entity that may be used, per - connection and/or in total. - - - - required capabilities - - The client may specify a number of capability names, delimited by - spaces. The server can use this string to how to process the - client's connection request. - - - - insist on connecting to server - - In a configuration with multiple load-sharing servers, the server - may respond to a Connection.Open method with a Connection.Redirect. - The insist option tells the server that the client is insisting on - a connection to the specified server. - - - When the client uses the insist option, the server SHOULD accept - the client connection unless it is technically unable to do so. - - - - - signal that the connection is ready - - This method signals to the client that the connection is ready for - use. - - - - - - asks the client to use a different server - - This method redirects the client to another server, based on the - requested virtual host and/or capabilities. - - - When getting the Connection.Redirect method, the client SHOULD - reconnect to the host specified, and if that host is not present, - to any of the hosts specified in the known-hosts list. - - - - server to connect to - - Specifies the server to connect to. This is an IP address or a - DNS name, optionally followed by a colon and a port number. If - no port number is specified, the client should use the default - port number for the protocol. - - - - - - - - request a connection close - - This method indicates that the sender wants to close the connection. - This may be due to internal conditions (e.g. a forced shut-down) or - due to an error handling a specific method, i.e. an exception. When - a close is due to an exception, the sender provides the class and - method id of the method which caused the exception. - - - After sending this method any received method except the Close-OK - method MUST be discarded. - - - The peer sending this method MAY use a counter or timeout to - detect failure of the other peer to respond correctly with - the Close-OK method. - - - When a server receives the Close method from a client it MUST - delete all server-side resources associated with the client's - context. A client CANNOT reconnect to a context after sending - or receiving a Close method. - - - - - - - - failing method class - - When the close is provoked by a method exception, this is the - class of the method. - - - - failing method ID - - When the close is provoked by a method exception, this is the - ID of the method. - - - - - confirm a connection close - - This method confirms a Connection.Close method and tells the - recipient that it is safe to release resources for the connection - and close the socket. - - - A peer that detects a socket closure without having received a - Close-Ok handshake method SHOULD log the error. - - - - - - - - work with channels - - The channel class provides methods for a client to establish a virtual - connection - a channel - to a server and for both peers to operate the - virtual connection thereafter. - - - channel = open-channel *use-channel close-channel - open-channel = C:OPEN S:OPEN-OK - use-channel = C:FLOW S:FLOW-OK - / S:FLOW C:FLOW-OK - / S:ALERT - / functional-class - close-channel = C:CLOSE S:CLOSE-OK - / S:CLOSE C:CLOSE-OK - - - - - - open a channel for use - - This method opens a virtual connection (a channel). - - - This method MUST NOT be called when the channel is already open. - - - - - out-of-band settings - - Configures out-of-band transfers on this channel. The syntax and - meaning of this field will be formally defined at a later date. - - - - - - signal that the channel is ready - - This method signals to the client that the channel is ready for use. - - - - - - enable/disable flow from peer - - This method asks the peer to pause or restart the flow of content - data. This is a simple flow-control mechanism that a peer can use - to avoid oveflowing its queues or otherwise finding itself receiving - more messages than it can process. Note that this method is not - intended for window control. The peer that receives a request to - stop sending content should finish sending the current content, if - any, and then wait until it receives a Flow restart method. - - - When a new channel is opened, it is active. Some applications - assume that channels are inactive until started. To emulate this - behaviour a client MAY open the channel, then pause it. - - - When sending content data in multiple frames, a peer SHOULD monitor - the channel for incoming methods and respond to a Channel.Flow as - rapidly as possible. - - - A peer MAY use the Channel.Flow method to throttle incoming content - data for internal reasons, for example, when exchangeing data over a - slower connection. - - - The peer that requests a Channel.Flow method MAY disconnect and/or - ban a peer that does not respect the request. - - - - - - start/stop content frames - - If 1, the peer starts sending content frames. If 0, the peer - stops sending content frames. - - - - - confirm a flow method - - Confirms to the peer that a flow command was received and processed. - - - - - current flow setting - - Confirms the setting of the processed flow method: 1 means the - peer will start sending or continue to send content frames; 0 - means it will not. - - - - - - send a non-fatal warning message - - This method allows the server to send a non-fatal warning to the - client. This is used for methods that are normally asynchronous - and thus do not have confirmations, and for which the server may - detect errors that need to be reported. Fatal errors are handled - as channel or connection exceptions; non-fatal errors are sent - through this method. - - - - - - detailed information for warning - - A set of fields that provide more information about the - problem. The meaning of these fields are defined on a - per-reply-code basis (TO BE DEFINED). - - - - - - request a channel close - - This method indicates that the sender wants to close the channel. - This may be due to internal conditions (e.g. a forced shut-down) or - due to an error handling a specific method, i.e. an exception. When - a close is due to an exception, the sender provides the class and - method id of the method which caused the exception. - - - After sending this method any received method except - Channel.Close-OK MUST be discarded. - - - The peer sending this method MAY use a counter or timeout to detect - failure of the other peer to respond correctly with Channel.Close-OK.. - - - - - - - - failing method class - - When the close is provoked by a method exception, this is the - class of the method. - - - - failing method ID - - When the close is provoked by a method exception, this is the - ID of the method. - - - - - confirm a channel close - - This method confirms a Channel.Close method and tells the recipient - that it is safe to release resources for the channel and close the - socket. - - - A peer that detects a socket closure without having received a - Channel.Close-Ok handshake method SHOULD log the error. - - - - - - - - work with access tickets - - The protocol control access to server resources using access tickets. - A client must explicitly request access tickets before doing work. - An access ticket grants a client the right to use a specific set of - resources - called a "realm" - in specific ways. - - - access = C:REQUEST S:REQUEST-OK - - - - - - request an access ticket - - This method requests an access ticket for an access realm. - The server responds by granting the access ticket. If the - client does not have access rights to the requested realm - this causes a connection exception. Access tickets are a - per-channel resource. - - - The realm name MUST start with either "/data" (for application - resources) or "/admin" (for server administration resources). - If the realm starts with any other path, the server MUST raise - a connection exception with reply code 403 (access refused). - - - The server MUST implement the /data realm and MAY implement the - /admin realm. The mapping of resources to realms is not - defined in the protocol - this is a server-side configuration - issue. - - - - - name of requested realm - - If the specified realm is not known to the server, the server - must raise a channel exception with reply code 402 (invalid - path). - - - - request exclusive access - - Request exclusive access to the realm. If the server cannot grant - this - because there are other active tickets for the realm - it - raises a channel exception. - - - - request passive access - - Request message passive access to the specified access realm. - Passive access lets a client get information about resources in - the realm but not to make any changes to them. - - - - request active access - - Request message active access to the specified access realm. - Acvtive access lets a client get create and delete resources in - the realm. - - - - request write access - - Request write access to the specified access realm. Write access - lets a client publish messages to all exchanges in the realm. - - - - request read access - - Request read access to the specified access realm. Read access - lets a client consume messages from queues in the realm. - - - - - grant access to server resources - - This method provides the client with an access ticket. The access - ticket is valid within the current channel and for the lifespan of - the channel. - - - The client MUST NOT use access tickets except within the same - channel as originally granted. - - - The server MUST isolate access tickets per channel and treat an - attempt by a client to mix these as a connection exception. - - - - - - - - work with exchanges - - Exchanges match and distribute messages across queues. Exchanges can be - configured in the server or created at runtime. - - - exchange = C:DECLARE S:DECLARE-OK - / C:DELETE S:DELETE-OK - - - - - amq_exchange_19 - The server MUST implement the direct and fanout exchange types, and - predeclare the corresponding exchanges named amq.direct and amq.fanout - in each virtual host. The server MUST also predeclare a direct - exchange to act as the default exchange for content Publish methods - and for default queue bindings. - - - amq_exchange_20 - The server SHOULD implement the topic exchange type, and predeclare - the corresponding exchange named amq.topic in each virtual host. - - - amq_exchange_21 - The server MAY implement the system exchange type, and predeclare the - corresponding exchanges named amq.system in each virtual host. If the - client attempts to bind a queue to the system exchange, the server - MUST raise a connection exception with reply code 507 (not allowed). - - - amq_exchange_22 - The default exchange MUST be defined as internal, and be inaccessible - to the client except by specifying an empty exchange name in a content - Publish method. That is, the server MUST NOT let clients make explicit - bindings to this exchange. - - - - declare exchange, create if needed - - This method creates an exchange if it does not already exist, and if the - exchange exists, verifies that it is of the correct and expected class. - - - amq_exchange_23 - The server SHOULD support a minimum of 16 exchanges per virtual host - and ideally, impose no limit except as defined by available resources. - - - - - - When a client defines a new exchange, this belongs to the access realm - of the ticket used. All further work done with that exchange must be - done with an access ticket for the same realm. - - - The client MUST provide a valid access ticket giving "active" access - to the realm in which the exchange exists or will be created, or - "passive" access if the if-exists flag is set. - - - - - amq_exchange_15 - Exchange names starting with "amq." are reserved for predeclared - and standardised exchanges. If the client attempts to create an - exchange starting with "amq.", the server MUST raise a channel - exception with reply code 403 (access refused). - - - - - exchange type - - Each exchange belongs to one of a set of exchange types implemented - by the server. The exchange types define the functionality of the - exchange - i.e. how messages are routed through it. It is not valid - or meaningful to attempt to change the type of an existing exchange. - - - amq_exchange_16 - If the exchange already exists with a different type, the server - MUST raise a connection exception with a reply code 507 (not allowed). - - - amq_exchange_18 - If the server does not support the requested exchange type it MUST - raise a connection exception with a reply code 503 (command invalid). - - - - - do not create exchange - - If set, the server will not create the exchange. The client can use - this to check whether an exchange exists without modifying the server - state. - - - amq_exchange_05 - If set, and the exchange does not already exist, the server MUST - raise a channel exception with reply code 404 (not found). - - - - request a durable exchange - - If set when creating a new exchange, the exchange will be marked as - durable. Durable exchanges remain active when a server restarts. - Non-durable exchanges (transient exchanges) are purged if/when a - server restarts. - - - amq_exchange_24 - The server MUST support both durable and transient exchanges. - - - The server MUST ignore the durable field if the exchange already - exists. - - - - auto-delete when unused - - If set, the exchange is deleted when all queues have finished - using it. - - - amq_exchange_02 - The server SHOULD allow for a reasonable delay between the point - when it determines that an exchange is not being used (or no longer - used), and the point when it deletes the exchange. At the least it - must allow a client to create an exchange and then bind a queue to - it, with a small but non-zero delay between these two actions. - - - amq_exchange_25 - The server MUST ignore the auto-delete field if the exchange already - exists. - - - - create internal exchange - - If set, the exchange may not be used directly by publishers, but - only when bound to other exchanges. Internal exchanges are used to - construct wiring that is not visible to applications. - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - arguments for declaration - - A set of arguments for the declaration. The syntax and semantics - of these arguments depends on the server implementation. This - field is ignored if passive is 1. - - - - - confirms an exchange declaration - - This method confirms a Declare method and confirms the name of the - exchange, essential for automatically-named exchanges. - - - - - - delete an exchange - - This method deletes an exchange. When an exchange is deleted all queue - bindings on the exchange are cancelled. - - - - - - The client MUST provide a valid access ticket giving "active" - access rights to the exchange's access realm. - - - - - amq_exchange_11 - The exchange MUST exist. Attempting to delete a non-existing exchange - causes a channel exception. - - - - - delete only if unused - - If set, the server will only delete the exchange if it has no queue - bindings. If the exchange has queue bindings the server does not - delete it but raises a channel exception instead. - - - amq_exchange_12 - If set, the server SHOULD delete the exchange but only if it has - no queue bindings. - - - amq_exchange_13 - If set, the server SHOULD raise a channel exception if the exchange is in - use. - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - confirm deletion of an exchange - - This method confirms the deletion of an exchange. - - - - - - - - - Message routing key - - Specifies the routing key for the message. The routing key is - used for routing messages depending on the exchange configuration. - - - - - - - - - - - - - - - - - work with queues - - - Queues store and forward messages. Queues can be configured in the server - or created at runtime. Queues must be attached to at least one exchange - in order to receive messages from publishers. - - - queue = C:DECLARE S:DECLARE-OK - / C:BIND S:BIND-OK - / C:PURGE S:PURGE-OK - / C:DELETE S:DELETE-OK - - - - - amq_queue_33 - A server MUST allow any content class to be sent to any queue, in any - mix, and queue and delivery these content classes independently. Note - that all methods that fetch content off queues are specific to a given - content class. - - - - declare queue, create if needed - - This method creates or checks a queue. When creating a new queue - the client can specify various properties that control the durability - of the queue and its contents, and the level of sharing for the queue. - - - amq_queue_34 - The server MUST create a default binding for a newly-created queue - to the default exchange, which is an exchange of type 'direct'. - - - amq_queue_35 - The server SHOULD support a minimum of 256 queues per virtual host - and ideally, impose no limit except as defined by available resources. - - - - - - When a client defines a new queue, this belongs to the access realm - of the ticket used. All further work done with that queue must be - done with an access ticket for the same realm. - - - The client provides a valid access ticket giving "active" access - to the realm in which the queue exists or will be created, or - "passive" access if the if-exists flag is set. - - - - - amq_queue_10 - The queue name MAY be empty, in which case the server MUST create - a new queue with a unique generated name and return this to the - client in the Declare-Ok method. - - - amq_queue_32 - Queue names starting with "amq." are reserved for predeclared and - standardised server queues. If the queue name starts with "amq." - and the passive option is zero, the server MUST raise a connection - exception with reply code 403 (access refused). - - - - - do not create queue - - If set, the server will not create the queue. The client can use - this to check whether a queue exists without modifying the server - state. - - - amq_queue_05 - If set, and the queue does not already exist, the server MUST - respond with a reply code 404 (not found) and raise a channel - exception. - - - - request a durable queue - - If set when creating a new queue, the queue will be marked as - durable. Durable queues remain active when a server restarts. - Non-durable queues (transient queues) are purged if/when a - server restarts. Note that durable queues do not necessarily - hold persistent messages, although it does not make sense to - send persistent messages to a transient queue. - - - amq_queue_03 - The server MUST recreate the durable queue after a restart. - - - amq_queue_36 - The server MUST support both durable and transient queues. - - - amq_queue_37 - The server MUST ignore the durable field if the queue already - exists. - - - - request an exclusive queue - - Exclusive queues may only be consumed from by the current connection. - Setting the 'exclusive' flag always implies 'auto-delete'. - - - amq_queue_38 - The server MUST support both exclusive (private) and non-exclusive - (shared) queues. - - - amq_queue_04 - The server MUST raise a channel exception if 'exclusive' is specified - and the queue already exists and is owned by a different connection. - - - - auto-delete queue when unused - - If set, the queue is deleted when all consumers have finished - using it. Last consumer can be cancelled either explicitly or because - its channel is closed. If there was no consumer ever on the queue, it - won't be deleted. - - - amq_queue_02 - The server SHOULD allow for a reasonable delay between the point - when it determines that a queue is not being used (or no longer - used), and the point when it deletes the queue. At the least it - must allow a client to create a queue and then create a consumer - to read from it, with a small but non-zero delay between these - two actions. The server should equally allow for clients that may - be disconnected prematurely, and wish to re-consume from the same - queue without losing messages. We would recommend a configurable - timeout, with a suitable default value being one minute. - - - amq_queue_31 - The server MUST ignore the auto-delete field if the queue already - exists. - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - arguments for declaration - - A set of arguments for the declaration. The syntax and semantics - of these arguments depends on the server implementation. This - field is ignored if passive is 1. - - - - - confirms a queue definition - - This method confirms a Declare method and confirms the name of the - queue, essential for automatically-named queues. - - - - - Reports the name of the queue. If the server generated a queue - name, this field contains that name. - - - - - number of messages in queue - - Reports the number of messages in the queue, which will be zero - for newly-created queues. - - - - number of consumers - - Reports the number of active consumers for the queue. Note that - consumers can suspend activity (Channel.Flow) in which case they - do not appear in this count. - - - - - - bind queue to an exchange - - This method binds a queue to an exchange. Until a queue is - bound it will not receive any messages. In a classic messaging - model, store-and-forward queues are bound to a dest exchange - and subscription queues are bound to a dest_wild exchange. - - - amq_queue_25 - A server MUST allow ignore duplicate bindings - that is, two or - more bind methods for a specific queue, with identical arguments - - without treating these as an error. - - - amq_queue_39 - If a bind fails, the server MUST raise a connection exception. - - - amq_queue_12 - The server MUST NOT allow a durable queue to bind to a transient - exchange. If the client attempts this the server MUST raise a - channel exception. - - - amq_queue_13 - Bindings for durable queues are automatically durable and the - server SHOULD restore such bindings after a server restart. - - - amq_queue_17 - If the client attempts to an exchange that was declared as internal, - the server MUST raise a connection exception with reply code 530 - (not allowed). - - - amq_queue_40 - The server SHOULD support at least 4 bindings per queue, and - ideally, impose no limit except as defined by available resources. - - - - - - The client provides a valid access ticket giving "active" - access rights to the queue's access realm. - - - - - - Specifies the name of the queue to bind. If the queue name is - empty, refers to the current queue for the channel, which is - the last declared queue. - - - If the client did not previously declare a queue, and the queue - name in this method is empty, the server MUST raise a connection - exception with reply code 530 (not allowed). - - - If the queue does not exist the server MUST raise a channel exception - with reply code 404 (not found). - - - - - The name of the exchange to bind to. - - amq_queue_14 - If the exchange does not exist the server MUST raise a channel - exception with reply code 404 (not found). - - - - message routing key - - Specifies the routing key for the binding. The routing key is - used for routing messages depending on the exchange configuration. - Not all exchanges use a routing key - refer to the specific - exchange documentation. If the routing key is empty and the queue - name is empty, the routing key will be the current queue for the - channel, which is the last declared queue. - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - arguments for binding - - A set of arguments for the binding. The syntax and semantics of - these arguments depends on the exchange class. - - - - - confirm bind successful - - This method confirms that the bind was successful. - - - - - - purge a queue - - This method removes all messages from a queue. It does not cancel - consumers. Purged messages are deleted without any formal "undo" - mechanism. - - - amq_queue_15 - A call to purge MUST result in an empty queue. - - - amq_queue_41 - On transacted channels the server MUST not purge messages that have - already been sent to a client but not yet acknowledged. - - - amq_queue_42 - The server MAY implement a purge queue or log that allows system - administrators to recover accidentally-purged messages. The server - SHOULD NOT keep purged messages in the same storage spaces as the - live messages since the volumes of purged messages may get very - large. - - - - - - The access ticket must be for the access realm that holds the - queue. - - - The client MUST provide a valid access ticket giving "read" access - rights to the queue's access realm. Note that purging a queue is - equivalent to reading all messages and discarding them. - - - - - Specifies the name of the queue to purge. If the queue name is - empty, refers to the current queue for the channel, which is - the last declared queue. - - - If the client did not previously declare a queue, and the queue - name in this method is empty, the server MUST raise a connection - exception with reply code 530 (not allowed). - - - The queue must exist. Attempting to purge a non-existing queue - causes a channel exception. - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - confirms a queue purge - - This method confirms the purge of a queue. - - - - number of messages purged - - Reports the number of messages purged. - - - - - - delete a queue - - This method deletes a queue. When a queue is deleted any pending - messages are sent to a dead-letter queue if this is defined in the - server configuration, and all consumers on the queue are cancelled. - - - amq_queue_43 - The server SHOULD use a dead-letter queue to hold messages that - were pending on a deleted queue, and MAY provide facilities for - a system administrator to move these messages back to an active - queue. - - - - - - The client provides a valid access ticket giving "active" - access rights to the queue's access realm. - - - - - - Specifies the name of the queue to delete. If the queue name is - empty, refers to the current queue for the channel, which is the - last declared queue. - - - If the client did not previously declare a queue, and the queue - name in this method is empty, the server MUST raise a connection - exception with reply code 530 (not allowed). - - - The queue must exist. Attempting to delete a non-existing queue - causes a channel exception. - - - - - delete only if unused - - If set, the server will only delete the queue if it has no - consumers. If the queue has consumers the server does does not - delete it but raises a channel exception instead. - - - amq_queue_29 - amq_queue_30 - The server MUST respect the if-unused flag when deleting a queue. - - - - delete only if empty - amq_queue_27 - - If set, the server will only delete the queue if it has no - messages. If the queue is not empty the server raises a channel - exception. - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - confirm deletion of a queue - - This method confirms the deletion of a queue. - - - - number of messages purged - - Reports the number of messages purged. - - - - - - - work with basic content - - The Basic class provides methods that support an industry-standard - messaging model. - - - - basic = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL S:CANCEL-OK - / C:PUBLISH content - / S:RETURN content - / S:DELIVER content - / C:GET ( S:GET-OK content / S:GET-EMPTY ) - / C:ACK - / C:REJECT - - - - - - - The server SHOULD respect the persistent property of basic messages - and SHOULD make a best-effort to hold persistent basic messages on a - reliable storage mechanism. - - - The server MUST NOT discard a persistent basic message in case of a - queue overflow. The server MAY use the Channel.Flow method to slow - or stop a basic message publisher when necessary. - - - The server MAY overflow non-persistent basic messages to persistent - storage and MAY discard or dead-letter non-persistent basic messages - on a priority basis if the queue size exceeds some configured limit. - - - The server MUST implement at least 2 priority levels for basic - messages, where priorities 0-4 and 5-9 are treated as two distinct - levels. The server MAY implement up to 10 priority levels. - - - The server MUST deliver messages of the same priority in order - irrespective of their individual persistence. - - - The server MUST support both automatic and explicit acknowledgements - on Basic content. - - - - - - MIME content type - - - MIME content encoding - - - Message header field table - - - Non-persistent (1) or persistent (2) - - - The message priority, 0 to 9 - - - The application correlation identifier - - - The destination to reply to - - - Message expiration specification - - - The application message identifier - - - The message timestamp - - - The message type name - - - The creating user id - - - The creating application id - - - Intra-cluster routing identifier - - - - - - - specify quality of service - - This method requests a specific quality of service. The QoS can - be specified for the current channel or for all channels on the - connection. The particular properties and semantics of a qos method - always depend on the content class semantics. Though the qos method - could in principle apply to both peers, it is currently meaningful - only for the server. - - - - - - prefetch window in octets - - The client can request that messages be sent in advance so that - when the client finishes processing a message, the following - message is already held locally, rather than needing to be sent - down the channel. Prefetching gives a performance improvement. - This field specifies the prefetch window size in octets. The - server will send a message in advance if it is equal to or - smaller in size than the available prefetch size (and also falls - into other prefetch limits). May be set to zero, meaning "no - specific limit", although other prefetch limits may still apply. - The prefetch-size is ignored if the no-ack option is set. - - - The server MUST ignore this setting when the client is not - processing any messages - i.e. the prefetch size does not limit - the transfer of single messages to a client, only the sending in - advance of more messages while the client still has one or more - unacknowledged messages. - - - - - prefetch window in messages - - Specifies a prefetch window in terms of whole messages. This - field may be used in combination with the prefetch-size field; - a message will only be sent in advance if both prefetch windows - (and those at the channel and connection level) allow it. - The prefetch-count is ignored if the no-ack option is set. - - - The server MAY send less data in advance than allowed by the - client's specified prefetch windows but it MUST NOT send more. - - - - - apply to entire connection - - By default the QoS settings apply to the current channel only. If - this field is set, they are applied to the entire connection. - - - - - - confirm the requested qos - - This method tells the client that the requested QoS levels could - be handled by the server. The requested QoS applies to all active - consumers until a new QoS is defined. - - - - - - - - start a queue consumer - - This method asks the server to start a "consumer", which is a - transient request for messages from a specific queue. Consumers - last as long as the channel they were created on, or until the - client cancels them. - - - The server SHOULD support at least 16 consumers per queue, unless - the queue was declared as private, and ideally, impose no limit - except as defined by available resources. - - - - - - - The client MUST provide a valid access ticket giving "read" access - rights to the realm for the queue. - - - - - - Specifies the name of the queue to consume from. If the queue name - is null, refers to the current queue for the channel, which is the - last declared queue. - - - If the client did not previously declare a queue, and the queue name - in this method is empty, the server MUST raise a connection exception - with reply code 530 (not allowed). - - - - - - Specifies the identifier for the consumer. The consumer tag is - local to a connection, so two clients can use the same consumer - tags. If this field is empty the server will generate a unique - tag. - - - The tag MUST NOT refer to an existing consumer. If the client - attempts to create two consumers with the same non-empty tag - the server MUST raise a connection exception with reply code - 530 (not allowed). - - - - - - - - - request exclusive access - - Request exclusive consumer access, meaning only this consumer can - access the queue. - - - If the server cannot grant exclusive access to the queue when asked, - - because there are other consumers active - it MUST raise a channel - exception with return code 403 (access refused). - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - A set of arguments for the consume. The syntax and semantics - of these arguments depends on the server implementation. This - field is ignored if passive is 1. - - - - - - confirm a new consumer - - The server provides the client with a consumer tag, which is used - by the client for methods called on the consumer at a later stage. - - - - - - Holds the consumer tag specified by the client or provided by - the server. - - - - - - - - - end a queue consumer - - This method cancels a consumer. This does not affect already - delivered messages, but it does mean the server will not send any - more messages for that consumer. The client may receive an - abitrary number of messages in between sending the cancel method - and receiving the cancel-ok reply. - - - If the queue no longer exists when the client sends a cancel command, - or the consumer has been cancelled for other reasons, this command - has no effect. - - - - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - confirm a cancelled consumer - - This method confirms that the cancellation was completed. - - - - - - - - - - - publish a message - - This method publishes a message to a specific exchange. The message - will be routed to queues as defined by the exchange configuration - and distributed to any active consumers when the transaction, if any, - is committed. - - - - - - The client MUST provide a valid access ticket giving "write" - access rights to the access realm for the exchange. - - - - - - Specifies the name of the exchange to publish to. The exchange - name can be empty, meaning the default exchange. If the exchange - name is specified, and that exchange does not exist, the server - will raise a channel exception. - - - The server MUST accept a blank exchange name to mean the default - exchange. - - - If the exchange was declared as an internal exchange, the server - MUST raise a channel exception with a reply code 403 (access - refused). - - - The exchange MAY refuse basic content in which case it MUST raise - a channel exception with reply code 540 (not implemented). - - - - - Message routing key - - Specifies the routing key for the message. The routing key is - used for routing messages depending on the exchange configuration. - - - - - indicate mandatory routing - - This flag tells the server how to react if the message cannot be - routed to a queue. If this flag is set, the server will return an - unroutable message with a Return method. If this flag is zero, the - server silently drops the message. - - - The server SHOULD implement the mandatory flag. - - - - - request immediate delivery - - This flag tells the server how to react if the message cannot be - routed to a queue consumer immediately. If this flag is set, the - server will return an undeliverable message with a Return method. - If this flag is zero, the server will queue the message, but with - no guarantee that it will ever be consumed. - - - The server SHOULD implement the immediate flag. - - - - - - return a failed message - - This method returns an undeliverable message that was published - with the "immediate" flag set, or an unroutable message published - with the "mandatory" flag set. The reply code and text provide - information about the reason that the message was undeliverable. - - - - - - - - - Specifies the name of the exchange that the message was - originally published to. - - - - - Message routing key - - Specifies the routing key name specified when the message was - published. - - - - - - - - - notify the client of a consumer message - - This method delivers a message to the client, via a consumer. In - the asynchronous message delivery model, the client starts a - consumer using the Consume method, then the server responds with - Deliver methods as and when messages arrive for that consumer. - - - The server SHOULD track the number of times a message has been - delivered to clients and when a message is redelivered a certain - number of times - e.g. 5 times - without being acknowledged, the - server SHOULD consider the message to be unprocessable (possibly - causing client applications to abort), and move the message to a - dead letter queue. - - - - - - - - - - - - Specifies the name of the exchange that the message was - originally published to. - - - - - Message routing key - - Specifies the routing key name specified when the message was - published. - - - - - - - - - direct access to a queue - - This method provides a direct access to the messages in a queue - using a synchronous dialogue that is designed for specific types of - application where synchronous functionality is more important than - performance. - - - - - - - - The client MUST provide a valid access ticket giving "read" - access rights to the realm for the queue. - - - - - - Specifies the name of the queue to consume from. If the queue name - is null, refers to the current queue for the channel, which is the - last declared queue. - - - If the client did not previously declare a queue, and the queue name - in this method is empty, the server MUST raise a connection exception - with reply code 530 (not allowed). - - - - - - - - provide client with a message - - This method delivers a message to the client following a get - method. A message delivered by 'get-ok' must be acknowledged - unless the no-ack option was set in the get method. - - - - - - - - - - Specifies the name of the exchange that the message was originally - published to. If empty, the message was published to the default - exchange. - - - - - Message routing key - - Specifies the routing key name specified when the message was - published. - - - - - number of messages pending - - This field reports the number of messages pending on the queue, - excluding the message being delivered. Note that this figure is - indicative, not reliable, and can change arbitrarily as messages - are added to the queue and removed by other clients. - - - - - - - indicate no messages available - - This method tells the client that the queue has no messages - available for the client. - - - - - Cluster id - - For use by cluster applications, should not be used by - client applications. - - - - - - - - acknowledge one or more messages - - This method acknowledges one or more messages delivered via the - Deliver or Get-Ok methods. The client can ask to confirm a - single message or a set of messages up to and including a specific - message. - - - - - - acknowledge multiple messages - - If set to 1, the delivery tag is treated as "up to and including", - so that the client can acknowledge multiple messages with a single - method. If set to zero, the delivery tag refers to a single - message. If the multiple field is 1, and the delivery tag is zero, - tells the server to acknowledge all outstanding mesages. - - - The server MUST validate that a non-zero delivery-tag refers to an - delivered message, and raise a channel exception if this is not the - case. - - - - - - - - reject an incoming message - - This method allows a client to reject a message. It can be used to - interrupt and cancel large incoming messages, or return untreatable - messages to their original queue. - - - The server SHOULD be capable of accepting and process the Reject - method while sending message content with a Deliver or Get-Ok - method. I.e. the server should read and process incoming methods - while sending output frames. To cancel a partially-send content, - the server sends a content body frame of size 1 (i.e. with no data - except the frame-end octet). - - - The server SHOULD interpret this method as meaning that the client - is unable to process the message at this time. - - - A client MUST NOT use this method as a means of selecting messages - to process. A rejected message MAY be discarded or dead-lettered, - not necessarily passed to another client. - - - - - - - requeue the message - - If this field is zero, the message will be discarded. If this bit - is 1, the server will attempt to requeue the message. - - - The server MUST NOT deliver the message to the same client within - the context of the current channel. The recommended strategy is - to attempt to deliver the message to an alternative consumer, and - if that is not possible, to move the message to a dead-letter - queue. The server MAY use more sophisticated tracking to hold - the message on the queue and redeliver it to the same client at - a later stage. - - - - - - redeliver unacknowledged messages - - This method asks the broker to redeliver all unacknowledged messages on a - specified channel. Zero or more messages may be redelivered. This method - is only allowed on non-transacted channels. - - - - - requeue the message - - If this field is zero, the message will be redelivered to the original - recipient. If this bit is 1, the server will attempt to requeue the - message, potentially then delivering it to an alternative subscriber. - - - - The server MUST set the redelivered flag on all messages that are resent. - - - The server MUST raise a channel exception if this is called on a - transacted channel. - - - - - confirm a successful recover - - This method confirms to the client that the recover succeeded. - Note that if an recover fails, the server raises a channel exception. - - - - - - - - - - work with file content - - The file class provides methods that support reliable file transfer. - File messages have a specific set of properties that are required for - interoperability with file transfer applications. File messages and - acknowledgements are subject to channel transactions. Note that the - file class does not provide message browsing methods; these are not - compatible with the staging model. Applications that need browsable - file transfer should use Basic content and the Basic class. - - - - file = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL S:CANCEL-OK - / C:OPEN S:OPEN-OK C:STAGE content - / S:OPEN C:OPEN-OK S:STAGE content - / C:PUBLISH - / S:DELIVER - / S:RETURN - / C:ACK - / C:REJECT - - - - - - - The server MUST make a best-effort to hold file messages on a - reliable storage mechanism. - - - The server MUST NOT discard a file message in case of a queue - overflow. The server MUST use the Channel.Flow method to slow or stop - a file message publisher when necessary. - - - The server MUST implement at least 2 priority levels for file - messages, where priorities 0-4 and 5-9 are treated as two distinct - levels. The server MAY implement up to 10 priority levels. - - - The server MUST support both automatic and explicit acknowledgements - on file content. - - - - - - MIME content type - - - MIME content encoding - - - Message header field table - - - The message priority, 0 to 9 - - - The destination to reply to - - - The application message identifier - - - The message filename - - - The message timestamp - - - Intra-cluster routing identifier - - - - - - - specify quality of service - - This method requests a specific quality of service. The QoS can - be specified for the current channel or for all channels on the - connection. The particular properties and semantics of a qos method - always depend on the content class semantics. Though the qos method - could in principle apply to both peers, it is currently meaningful - only for the server. - - - - - - prefetch window in octets - - The client can request that messages be sent in advance so that - when the client finishes processing a message, the following - message is already held locally, rather than needing to be sent - down the channel. Prefetching gives a performance improvement. - This field specifies the prefetch window size in octets. May be - set to zero, meaning "no specific limit". Note that other - prefetch limits may still apply. The prefetch-size is ignored - if the no-ack option is set. - - - - - prefetch window in messages - - Specifies a prefetch window in terms of whole messages. This - is compatible with some file API implementations. This field - may be used in combination with the prefetch-size field; a - message will only be sent in advance if both prefetch windows - (and those at the channel and connection level) allow it. - The prefetch-count is ignored if the no-ack option is set. - - - The server MAY send less data in advance than allowed by the - client's specified prefetch windows but it MUST NOT send more. - - - - - apply to entire connection - - By default the QoS settings apply to the current channel only. If - this field is set, they are applied to the entire connection. - - - - - - confirm the requested qos - - This method tells the client that the requested QoS levels could - be handled by the server. The requested QoS applies to all active - consumers until a new QoS is defined. - - - - - - - - start a queue consumer - - This method asks the server to start a "consumer", which is a - transient request for messages from a specific queue. Consumers - last as long as the channel they were created on, or until the - client cancels them. - - - The server SHOULD support at least 16 consumers per queue, unless - the queue was declared as private, and ideally, impose no limit - except as defined by available resources. - - - - - - - The client MUST provide a valid access ticket giving "read" access - rights to the realm for the queue. - - - - - - Specifies the name of the queue to consume from. If the queue name - is null, refers to the current queue for the channel, which is the - last declared queue. - - - If the client did not previously declare a queue, and the queue name - in this method is empty, the server MUST raise a connection exception - with reply code 530 (not allowed). - - - - - - Specifies the identifier for the consumer. The consumer tag is - local to a connection, so two clients can use the same consumer - tags. If this field is empty the server will generate a unique - tag. - - - The tag MUST NOT refer to an existing consumer. If the client - attempts to create two consumers with the same non-empty tag - the server MUST raise a connection exception with reply code - 530 (not allowed). - - - - - - - - - request exclusive access - - Request exclusive consumer access, meaning only this consumer can - access the queue. - - - If the server cannot grant exclusive access to the queue when asked, - - because there are other consumers active - it MUST raise a channel - exception with return code 405 (resource locked). - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - confirm a new consumer - - This method provides the client with a consumer tag which it MUST - use in methods that work with the consumer. - - - - - - Holds the consumer tag specified by the client or provided by - the server. - - - - - - - - - end a queue consumer - - This method cancels a consumer. This does not affect already - delivered messages, but it does mean the server will not send any - more messages for that consumer. - - - - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - confirm a cancelled consumer - - This method confirms that the cancellation was completed. - - - - - - - - - - - request to start staging - - This method requests permission to start staging a message. Staging - means sending the message into a temporary area at the recipient end - and then delivering the message by referring to this temporary area. - Staging is how the protocol handles partial file transfers - if a - message is partially staged and the connection breaks, the next time - the sender starts to stage it, it can restart from where it left off. - - - - - - - staging identifier - - This is the staging identifier. This is an arbitrary string chosen - by the sender. For staging to work correctly the sender must use - the same staging identifier when staging the same message a second - time after recovery from a failure. A good choice for the staging - identifier would be the SHA1 hash of the message properties data - (including the original filename, revised time, etc.). - - - - - message content size - - The size of the content in octets. The recipient may use this - information to allocate or check available space in advance, to - avoid "disk full" errors during staging of very large messages. - - - The sender MUST accurately fill the content-size field. - Zero-length content is permitted. - - - - - - confirm staging ready - - This method confirms that the recipient is ready to accept staged - data. If the message was already partially-staged at a previous - time the recipient will report the number of octets already staged. - - - - - - - already staged amount - - The amount of previously-staged content in octets. For a new - message this will be zero. - - - The sender MUST start sending data from this octet offset in the - message, counting from zero. - - - The recipient MAY decide how long to hold partially-staged content - and MAY implement staging by always discarding partially-staged - content. However if it uses the file content type it MUST support - the staging methods. - - - - - - - - stage message content - - This method stages the message, sending the message content to the - recipient from the octet offset specified in the Open-Ok method. - - - - - - - - - - publish a message - - This method publishes a staged file message to a specific exchange. - The file message will be routed to queues as defined by the exchange - configuration and distributed to any active consumers when the - transaction, if any, is committed. - - - - - - The client MUST provide a valid access ticket giving "write" - access rights to the access realm for the exchange. - - - - - - Specifies the name of the exchange to publish to. The exchange - name can be empty, meaning the default exchange. If the exchange - name is specified, and that exchange does not exist, the server - will raise a channel exception. - - - The server MUST accept a blank exchange name to mean the default - exchange. - - - If the exchange was declared as an internal exchange, the server - MUST respond with a reply code 403 (access refused) and raise a - channel exception. - - - The exchange MAY refuse file content in which case it MUST respond - with a reply code 540 (not implemented) and raise a channel - exception. - - - - - Message routing key - - Specifies the routing key for the message. The routing key is - used for routing messages depending on the exchange configuration. - - - - - indicate mandatory routing - - This flag tells the server how to react if the message cannot be - routed to a queue. If this flag is set, the server will return an - unroutable message with a Return method. If this flag is zero, the - server silently drops the message. - - - The server SHOULD implement the mandatory flag. - - - - - request immediate delivery - - This flag tells the server how to react if the message cannot be - routed to a queue consumer immediately. If this flag is set, the - server will return an undeliverable message with a Return method. - If this flag is zero, the server will queue the message, but with - no guarantee that it will ever be consumed. - - - The server SHOULD implement the immediate flag. - - - - - staging identifier - - This is the staging identifier of the message to publish. The - message must have been staged. Note that a client can send the - Publish method asynchronously without waiting for staging to - finish. - - - - - - return a failed message - - This method returns an undeliverable message that was published - with the "immediate" flag set, or an unroutable message published - with the "mandatory" flag set. The reply code and text provide - information about the reason that the message was undeliverable. - - - - - - - - - Specifies the name of the exchange that the message was - originally published to. - - - - - Message routing key - - Specifies the routing key name specified when the message was - published. - - - - - - - - - notify the client of a consumer message - - This method delivers a staged file message to the client, via a - consumer. In the asynchronous message delivery model, the client - starts a consumer using the Consume method, then the server - responds with Deliver methods as and when messages arrive for - that consumer. - - - The server SHOULD track the number of times a message has been - delivered to clients and when a message is redelivered a certain - number of times - e.g. 5 times - without being acknowledged, the - server SHOULD consider the message to be unprocessable (possibly - causing client applications to abort), and move the message to a - dead letter queue. - - - - - - - - - - - - Specifies the name of the exchange that the message was originally - published to. - - - - - Message routing key - - Specifies the routing key name specified when the message was - published. - - - - - staging identifier - - This is the staging identifier of the message to deliver. The - message must have been staged. Note that a server can send the - Deliver method asynchronously without waiting for staging to - finish. - - - - - - - - - acknowledge one or more messages - - This method acknowledges one or more messages delivered via the - Deliver method. The client can ask to confirm a single message or - a set of messages up to and including a specific message. - - - - - - acknowledge multiple messages - - If set to 1, the delivery tag is treated as "up to and including", - so that the client can acknowledge multiple messages with a single - method. If set to zero, the delivery tag refers to a single - message. If the multiple field is 1, and the delivery tag is zero, - tells the server to acknowledge all outstanding mesages. - - - The server MUST validate that a non-zero delivery-tag refers to an - delivered message, and raise a channel exception if this is not the - case. - - - - - - - - - reject an incoming message - - This method allows a client to reject a message. It can be used to - return untreatable messages to their original queue. Note that file - content is staged before delivery, so the client will not use this - method to interrupt delivery of a large message. - - - The server SHOULD interpret this method as meaning that the client - is unable to process the message at this time. - - - A client MUST NOT use this method as a means of selecting messages - to process. A rejected message MAY be discarded or dead-lettered, - not necessarily passed to another client. - - - - - - - requeue the message - - If this field is zero, the message will be discarded. If this bit - is 1, the server will attempt to requeue the message. - - - The server MUST NOT deliver the message to the same client within - the context of the current channel. The recommended strategy is - to attempt to deliver the message to an alternative consumer, and - if that is not possible, to move the message to a dead-letter - queue. The server MAY use more sophisticated tracking to hold - the message on the queue and redeliver it to the same client at - a later stage. - - - - - - - - - work with streaming content - - - The stream class provides methods that support multimedia streaming. - The stream class uses the following semantics: one message is one - packet of data; delivery is unacknowleged and unreliable; the consumer - can specify quality of service parameters that the server can try to - adhere to; lower-priority messages may be discarded in favour of high - priority messages. - - - - stream = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL S:CANCEL-OK - / C:PUBLISH content - / S:RETURN - / S:DELIVER content - - - - - - - The server SHOULD discard stream messages on a priority basis if - the queue size exceeds some configured limit. - - - The server MUST implement at least 2 priority levels for stream - messages, where priorities 0-4 and 5-9 are treated as two distinct - levels. The server MAY implement up to 10 priority levels. - - - The server MUST implement automatic acknowledgements on stream - content. That is, as soon as a message is delivered to a client - via a Deliver method, the server must remove it from the queue. - - - - - - - MIME content type - - - MIME content encoding - - - Message header field table - - - The message priority, 0 to 9 - - - The message timestamp - - - - - - - specify quality of service - - This method requests a specific quality of service. The QoS can - be specified for the current channel or for all channels on the - connection. The particular properties and semantics of a qos method - always depend on the content class semantics. Though the qos method - could in principle apply to both peers, it is currently meaningful - only for the server. - - - - - - prefetch window in octets - - The client can request that messages be sent in advance so that - when the client finishes processing a message, the following - message is already held locally, rather than needing to be sent - down the channel. Prefetching gives a performance improvement. - This field specifies the prefetch window size in octets. May be - set to zero, meaning "no specific limit". Note that other - prefetch limits may still apply. - - - - - prefetch window in messages - - Specifies a prefetch window in terms of whole messages. This - field may be used in combination with the prefetch-size field; - a message will only be sent in advance if both prefetch windows - (and those at the channel and connection level) allow it. - - - - - transfer rate in octets/second - - Specifies a desired transfer rate in octets per second. This is - usually determined by the application that uses the streaming - data. A value of zero means "no limit", i.e. as rapidly as - possible. - - - The server MAY ignore the prefetch values and consume rates, - depending on the type of stream and the ability of the server - to queue and/or reply it. The server MAY drop low-priority - messages in favour of high-priority messages. - - - - - apply to entire connection - - By default the QoS settings apply to the current channel only. If - this field is set, they are applied to the entire connection. - - - - - - confirm the requested qos - - This method tells the client that the requested QoS levels could - be handled by the server. The requested QoS applies to all active - consumers until a new QoS is defined. - - - - - - - - start a queue consumer - - This method asks the server to start a "consumer", which is a - transient request for messages from a specific queue. Consumers - last as long as the channel they were created on, or until the - client cancels them. - - - The server SHOULD support at least 16 consumers per queue, unless - the queue was declared as private, and ideally, impose no limit - except as defined by available resources. - - - Streaming applications SHOULD use different channels to select - different streaming resolutions. AMQP makes no provision for - filtering and/or transforming streams except on the basis of - priority-based selective delivery of individual messages. - - - - - - - The client MUST provide a valid access ticket giving "read" access - rights to the realm for the queue. - - - - - - Specifies the name of the queue to consume from. If the queue name - is null, refers to the current queue for the channel, which is the - last declared queue. - - - If the client did not previously declare a queue, and the queue name - in this method is empty, the server MUST raise a connection exception - with reply code 530 (not allowed). - - - - - - Specifies the identifier for the consumer. The consumer tag is - local to a connection, so two clients can use the same consumer - tags. If this field is empty the server will generate a unique - tag. - - - The tag MUST NOT refer to an existing consumer. If the client - attempts to create two consumers with the same non-empty tag - the server MUST raise a connection exception with reply code - 530 (not allowed). - - - - - - - request exclusive access - - Request exclusive consumer access, meaning only this consumer can - access the queue. - - - If the server cannot grant exclusive access to the queue when asked, - - because there are other consumers active - it MUST raise a channel - exception with return code 405 (resource locked). - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - - confirm a new consumer - - This method provides the client with a consumer tag which it may - use in methods that work with the consumer. - - - - - - Holds the consumer tag specified by the client or provided by - the server. - - - - - - - - end a queue consumer - - This method cancels a consumer. Since message delivery is - asynchronous the client may continue to receive messages for - a short while after canceling a consumer. It may process or - discard these as appropriate. - - - - - - - - do not send a reply method - - If set, the server will not respond to the method. The client should - not wait for a reply method. If the server could not complete the - method it will raise a channel or connection exception. - - - - - - confirm a cancelled consumer - - This method confirms that the cancellation was completed. - - - - - - - - - - - publish a message - - This method publishes a message to a specific exchange. The message - will be routed to queues as defined by the exchange configuration - and distributed to any active consumers as appropriate. - - - - - - The client MUST provide a valid access ticket giving "write" - access rights to the access realm for the exchange. - - - - - - Specifies the name of the exchange to publish to. The exchange - name can be empty, meaning the default exchange. If the exchange - name is specified, and that exchange does not exist, the server - will raise a channel exception. - - - The server MUST accept a blank exchange name to mean the default - exchange. - - - If the exchange was declared as an internal exchange, the server - MUST respond with a reply code 403 (access refused) and raise a - channel exception. - - - The exchange MAY refuse stream content in which case it MUST - respond with a reply code 540 (not implemented) and raise a - channel exception. - - - - - Message routing key - - Specifies the routing key for the message. The routing key is - used for routing messages depending on the exchange configuration. - - - - - indicate mandatory routing - - This flag tells the server how to react if the message cannot be - routed to a queue. If this flag is set, the server will return an - unroutable message with a Return method. If this flag is zero, the - server silently drops the message. - - - The server SHOULD implement the mandatory flag. - - - - - request immediate delivery - - This flag tells the server how to react if the message cannot be - routed to a queue consumer immediately. If this flag is set, the - server will return an undeliverable message with a Return method. - If this flag is zero, the server will queue the message, but with - no guarantee that it will ever be consumed. - - - The server SHOULD implement the immediate flag. - - - - - - return a failed message - - This method returns an undeliverable message that was published - with the "immediate" flag set, or an unroutable message published - with the "mandatory" flag set. The reply code and text provide - information about the reason that the message was undeliverable. - - - - - - - - - Specifies the name of the exchange that the message was - originally published to. - - - - - Message routing key - - Specifies the routing key name specified when the message was - published. - - - - - - - - - notify the client of a consumer message - - This method delivers a message to the client, via a consumer. In - the asynchronous message delivery model, the client starts a - consumer using the Consume method, then the server responds with - Deliver methods as and when messages arrive for that consumer. - - - - - - - - - - Specifies the name of the exchange that the message was originally - published to. - - - - - - Specifies the name of the queue that the message came from. Note - that a single channel can start many consumers on different - queues. - - - - - - - - - work with standard transactions - - - Standard transactions provide so-called "1.5 phase commit". We can - ensure that work is never lost, but there is a chance of confirmations - being lost, so that messages may be resent. Applications that use - standard transactions must be able to detect and ignore duplicate - messages. - - - An client using standard transactions SHOULD be able to track all - messages received within a reasonable period, and thus detect and - reject duplicates of the same message. It SHOULD NOT pass these to - the application layer. - - - tx = C:SELECT S:SELECT-OK - / C:COMMIT S:COMMIT-OK - / C:ROLLBACK S:ROLLBACK-OK - - - - - -select standard transaction mode - - This method sets the channel to use standard transactions. The - client must use this method at least once on a channel before - using the Commit or Rollback methods. - - - - - -confirm transaction mode - - This method confirms to the client that the channel was successfully - set to use standard transactions. - - - - - -commit the current transaction - - This method commits all messages published and acknowledged in - the current transaction. A new transaction starts immediately - after a commit. - - - - - -confirm a successful commit - - This method confirms to the client that the commit succeeded. - Note that if a commit fails, the server raises a channel exception. - - - - - -abandon the current transaction - - This method abandons all messages published and acknowledged in - the current transaction. A new transaction starts immediately - after a rollback. - - - - - -confirm a successful rollback - - This method confirms to the client that the rollback succeeded. - Note that if an rollback fails, the server raises a channel exception. - - - - - - - work with distributed transactions - - - Distributed transactions provide so-called "2-phase commit". The - AMQP distributed transaction model supports the X-Open XA - architecture and other distributed transaction implementations. - The Dtx class assumes that the server has a private communications - channel (not AMQP) to a distributed transaction coordinator. - - - dtx = C:SELECT S:SELECT-OK - C:START S:START-OK - - - - - -select standard transaction mode - - This method sets the channel to use distributed transactions. The - client must use this method at least once on a channel before - using the Start method. - - - - - -confirm transaction mode - - This method confirms to the client that the channel was successfully - set to use distributed transactions. - - - - - - start a new distributed transaction - - This method starts a new distributed transaction. This must be - the first method on a new channel that uses the distributed - transaction mode, before any methods that publish or consume - messages. - - - - - transaction identifier - - The distributed transaction key. This identifies the transaction - so that the AMQP server can coordinate with the distributed - transaction coordinator. - - - - - - confirm the start of a new distributed transaction - - This method confirms to the client that the transaction started. - Note that if a start fails, the server raises a channel exception. - - - - - - - methods for protocol tunneling. - - - The tunnel methods are used to send blocks of binary data - which - can be serialised AMQP methods or other protocol frames - between - AMQP peers. - - - tunnel = C:REQUEST - / S:REQUEST - - - - - Message header field table - - - The identity of the tunnelling proxy - - - The name or type of the message being tunnelled - - - The message durability indicator - - - The message broadcast mode - - - - sends a tunnelled method - - This method tunnels a block of binary data, which can be an - encoded AMQP method or other data. The binary data is sent - as the content for the Tunnel.Request method. - - - - meta data for the tunnelled block - - This field table holds arbitrary meta-data that the sender needs - to pass to the recipient. - - - - - - - test functional primitives of the implementation - - - The test class provides methods for a peer to test the basic - operational correctness of another peer. The test methods are - intended to ensure that all peers respect at least the basic - elements of the protocol, such as frame and content organisation - and field types. We assume that a specially-designed peer, a - "monitor client" would perform such tests. - - - test = C:INTEGER S:INTEGER-OK - / S:INTEGER C:INTEGER-OK - / C:STRING S:STRING-OK - / S:STRING C:STRING-OK - / C:TABLE S:TABLE-OK - / S:TABLE C:TABLE-OK - / C:CONTENT S:CONTENT-OK - / S:CONTENT C:CONTENT-OK - - - - - - test integer handling - - This method tests the peer's capability to correctly marshal integer - data. - - - - - - octet test value - - An octet integer test value. - - - - short test value - - A short integer test value. - - - - long test value - - A long integer test value. - - - - long-long test value - - A long long integer test value. - - - - operation to test - - The client must execute this operation on the provided integer - test fields and return the result. - - - return sum of test values - return lowest of test values - return highest of test values - - - - - report integer test result - - This method reports the result of an Integer method. - - - - - result value - - The result of the tested operation. - - - - - - test string handling - - This method tests the peer's capability to correctly marshal string - data. - - - - - - short string test value - - An short string test value. - - - - long string test value - - A long string test value. - - - - operation to test - - The client must execute this operation on the provided string - test fields and return the result. - - - return concatentation of test strings - return shortest of test strings - return longest of test strings - - - - - report string test result - - This method reports the result of a String method. - - - - - result value - - The result of the tested operation. - - - - - - test field table handling - - This method tests the peer's capability to correctly marshal field - table data. - - - - - - field table of test values - - A field table of test values. - - - - operation to test on integers - - The client must execute this operation on the provided field - table integer values and return the result. - - - return sum of numeric field values - return min of numeric field values - return max of numeric field values - - - - operation to test on strings - - The client must execute this operation on the provided field - table string values and return the result. - - - return concatenation of string field values - return shortest of string field values - return longest of string field values - - - - - report table test result - - This method reports the result of a Table method. - - - - - integer result value - - The result of the tested integer operation. - - - - string result value - - The result of the tested string operation. - - - - - - test content handling - - This method tests the peer's capability to correctly marshal content. - - - - - - - report content test result - - This method reports the result of a Content method. It contains the - content checksum and echoes the original content as provided. - - - - - content hash - - The 32-bit checksum of the content, calculated by adding the - content into a 32-bit accumulator. - - - - - diff --git a/python/qpid/specs/amqp.0-9.xml b/python/qpid/specs/amqp.0-9.xml deleted file mode 100644 index 73cace7015..0000000000 --- a/python/qpid/specs/amqp.0-9.xml +++ /dev/null @@ -1,5248 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Indicates that the method completed successfully. This reply code is - reserved for future use - the current protocol design does not use positive - confirmation and reply codes are sent only in case of an error. - - - - - - The client asked for a specific message that is no longer available. - The message was delivered to another client, or was purged from the queue - for some other reason. - - - - - - The client attempted to transfer content larger than the server could accept - at the present time. The client may retry at a later time. - - - - - - When the exchange cannot route the result of a .Publish, most likely due - to an invalid routing key. Only when the mandatory flag is set. - - - - - - When the exchange cannot deliver to a consumer when the immediate flag is - set. As a result of pending data on the queue or the absence of any - consumers of the queue. - - - - - - An operator intervened to close the connection for some reason. The client - may retry at some later date. - - - - - - The client tried to work with an unknown virtual host. - - - - - - The client attempted to work with a server entity to which it has no - access due to security settings. - - - - - The client attempted to work with a server entity that does not exist. - - - - - The client attempted to work with a server entity to which it has no - access because another client is working with it. - - - - - - The client requested a method that was not allowed because some precondition - failed. - - - - - - The client sent a malformed frame that the server could not decode. This - strongly implies a programming error in the client. - - - - - - The client sent a frame that contained illegal values for one or more - fields. This strongly implies a programming error in the client. - - - - - - The client sent an invalid sequence of frames, attempting to perform an - operation that was considered invalid by the server. This usually implies - a programming error in the client. - - - - - - The client attempted to work with a channel that had not been correctly - opened. This most likely indicates a fault in the client layer. - - - - - - The server could not complete the method because it lacked sufficient - resources. This may be due to the client creating too many of some type - of entity. - - - - - - The client tried to work with some entity in a manner that is prohibited - by the server, due to security settings or by some other criteria. - - - - - - The client tried to use functionality that is not implemented in the - server. - - - - - - The server could not complete the method because of an internal error. - The server may require intervention by an operator in order to resume - normal operations. - - - - - - - - An access ticket granted by the server for a certain set of access rights - within a specific realm. Access tickets are valid within the channel where - they were created, and expire when the channel closes. - - - - - - - - - Identifier for the consumer, valid within the current connection. - - - - - - The server-assigned and channel-specific delivery tag - - - - The delivery tag is valid only within the channel from which the message was - received. I.e. a client MUST NOT receive a message on one channel and then - acknowledge it on another. - - - - - The server MUST NOT use a zero value for delivery tags. Zero is reserved - for client use, meaning "all messages so far received". - - - - - - - The exchange name is a client-selected string that identifies the exchange for publish - methods. Exchange names may consist of any mixture of digits, letters, and underscores. - Exchange names are scoped by the virtual host. - - - - - - - Specifies the list of equivalent or alternative hosts that the server knows about, - which will normally include the current server itself. Clients can cache this - information and use it when reconnecting to a server after a failure. This field - may be empty. - - - - - - - - If this field is set the server does not expect acknowledgements for - messages. That is, when a message is delivered to the client the server - automatically and silently acknowledges it on behalf of the client. This - functionality increases performance but at the cost of reliability. - Messages can get lost if a client dies before it can deliver them to the - application. - - - - - - If the no-local field is set the server will not send messages to the connection that - published them. - - - - - - Must start with a slash "/" and continue with path names separated by slashes. A path - name consists of any combination of at least one of [A-Za-z0-9] plus zero or more of - [.-_+!=:]. - - - - - - - - - - This string provides a set of peer properties, used for identification, debugging, and - general information. - - - - - - The queue name identifies the queue within the vhost. Queue names may consist of any - mixture of digits, letters, and underscores. - - - - - - - This indicates that the message has been previously delivered to this or - another client. - - - - The server SHOULD try to signal redelivered messages when it can. When - redelivering a message that was not successfully acknowledged, the server - SHOULD deliver it to the original client if possible. - - - Create a shared queue and publish a message to the queue. Consume the - message using explicit acknowledgements, but do not acknowledge the - message. Close the connection, reconnect, and consume from the queue - again. The message should arrive with the redelivered flag set. - - - - - The client MUST NOT rely on the redelivered field but should take it as a - hint that the message may already have been processed. A fully robust - client must be able to track duplicate received messages on non-transacted, - and locally-transacted channels. - - - - - - - The reply code. The AMQ reply codes are defined as constants at the start - of this formal specification. - - - - - - - The localised reply text. This text can be logged as an aid to resolving - issues. - - - - - - - - - - - - - Specifies the destination to which the message is to be - transferred. The destination can be empty, meaning the - default exchange or consumer. - - - - - - The reject code must be one of 0 (generic) or 1 (immediate - delivery was attempted but failed). - - - - - - - Used for authentication, replay prevention, and encrypted bodies. - - - - - - - - - - - - - - - - - - - - - The connection class provides methods for a client to establish a network connection to - a server, and for both peers to operate the connection thereafter. - - - - connection = open-connection *use-connection close-connection - open-connection = C:protocol-header - S:START C:START-OK - *challenge - S:TUNE C:TUNE-OK - C:OPEN S:OPEN-OK | S:REDIRECT - challenge = S:SECURE C:SECURE-OK - use-connection = *channel - close-connection = C:CLOSE S:CLOSE-OK - / S:CLOSE C:CLOSE-OK - - - - - - - - - - This method starts the connection negotiation process by telling the client the - protocol version that the server proposes, along with a list of security mechanisms - which the client can use for authentication. - - - - - If the server cannot support the protocol specified in the protocol header, - it MUST close the socket connection without sending any response method. - - - The client sends a protocol header containing an invalid protocol name. - The server must respond by closing the connection. - - - - - The server MUST provide a protocol version that is lower than or equal to - that requested by the client in the protocol header. - - - The client requests a protocol version that is higher than any valid - implementation, e.g. 9.0. The server must respond with a current - protocol version, e.g. 1.0. - - - - - If the client cannot handle the protocol version suggested by the server - it MUST close the socket connection. - - - The server sends a protocol version that is lower than any valid - implementation, e.g. 0.1. The client must respond by closing the - connection. - - - - - - - - - The protocol version, major component, as transmitted in the AMQP protocol - header. This, combined with the protocol minor component fully describe the - protocol version, which is written in the format major-minor. Hence, with - major=1, minor=3, the protocol version would be "1-3". - - - - - - The protocol version, minor component, as transmitted in the AMQP protocol - header. This, combined with the protocol major component fully describe the - protocol version, which is written in the format major-minor. Hence, with - major=1, minor=3, the protocol version would be "1-3". - - - - - - - The properties SHOULD contain at least these fields: "host", specifying the - server host name or address, "product", giving the name of the server product, - "version", giving the name of the server version, "platform", giving the name - of the operating system, "copyright", if appropriate, and "information", giving - other general information. - - - Client connects to server and inspects the server properties. It checks for - the presence of the required fields. - - - - - - - A list of the security mechanisms that the server supports, delimited by spaces. - - - - - - - A list of the message locales that the server supports, delimited by spaces. The - locale defines the language in which the server will send reply texts. - - - - The server MUST support at least the en_US locale. - - - Client connects to server and inspects the locales field. It checks for - the presence of the required locale(s). - - - - - - - - - This method selects a SASL security mechanism. - - - - - - - - - The properties SHOULD contain at least these fields: "product", giving the name - of the client product, "version", giving the name of the client version, "platform", - giving the name of the operating system, "copyright", if appropriate, and - "information", giving other general information. - - - - - - - A single security mechanisms selected by the client, which must be one of those - specified by the server. - - - - The client SHOULD authenticate using the highest-level security profile it - can handle from the list provided by the server. - - - - - If the mechanism field does not contain one of the security mechanisms - proposed by the server in the Start method, the server MUST close the - connection without sending any further data. - - - Client connects to server and sends an invalid security mechanism. The - server must respond by closing the connection (a socket close, with no - connection close negotiation). - - - - - - - - A block of opaque data passed to the security mechanism. The contents of this - data are defined by the SASL security mechanism. - - - - - - - A single message locale selected by the client, which must be one of those - specified by the server. - - - - - - - - - - The SASL protocol works by exchanging challenges and responses until both peers have - received sufficient information to authenticate each other. This method challenges - the client to provide more information. - - - - - - - - Challenge information, a block of opaque binary data passed to the security - mechanism. - - - - - - - This method attempts to authenticate, passing a block of SASL data for the security - mechanism at the server side. - - - - - - - A block of opaque data passed to the security mechanism. The contents of this - data are defined by the SASL security mechanism. - - - - - - - - - - This method proposes a set of connection configuration values to the client. The - client can accept and/or adjust these. - - - - - - - - - The maximum total number of channels that the server allows per connection. Zero - means that the server does not impose a fixed limit, but the number of allowed - channels may be limited by available server resources. - - - - - - The largest frame size that the server proposes for the connection. The client - can negotiate a lower value. Zero means that the server does not impose any - specific limit but may reject very large frames if it cannot allocate resources - for them. - - - - Until the frame-max has been negotiated, both peers MUST accept frames of up - to frame-min-size octets large, and the minimum negotiated value for frame-max - is also frame-min-size. - - - Client connects to server and sends a large properties field, creating a frame - of frame-min-size octets. The server must accept this frame. - - - - - - - - The delay, in seconds, of the connection heartbeat that the server wants. - Zero means the server does not want a heartbeat. - - - - - - - This method sends the client's connection tuning parameters to the server. - Certain fields are negotiated, others provide capability information. - - - - - - - The maximum total number of channels that the client will use per connection. - - - - If the client specifies a channel max that is higher than the value provided - by the server, the server MUST close the connection without attempting a - negotiated close. The server may report the error in some fashion to assist - implementors. - - - - - - - - - The largest frame size that the client and server will use for the connection. - Zero means that the client does not impose any specific limit but may reject - very large frames if it cannot allocate resources for them. Note that the - frame-max limit applies principally to content frames, where large contents can - be broken into frames of arbitrary size. - - - - Until the frame-max has been negotiated, both peers MUST accept frames of up - to frame-min-size octets large, and the minimum negotiated value for frame-max - is also frame-min-size. - - - - - If the client specifies a frame max that is higher than the value provided - by the server, the server MUST close the connection without attempting a - negotiated close. The server may report the error in some fashion to assist - implementors. - - - - - - - The delay, in seconds, of the connection heartbeat that the client wants. Zero - means the client does not want a heartbeat. - - - - - - - - - This method opens a connection to a virtual host, which is a collection of - resources, and acts to separate multiple application domains within a server. - The server may apply arbitrary limits per virtual host, such as the number - of each type of entity that may be used, per connection and/or in total. - - - - - - - - - - - The name of the virtual host to work with. - - - - If the server supports multiple virtual hosts, it MUST enforce a full - separation of exchanges, queues, and all associated entities per virtual - host. An application, connected to a specific virtual host, MUST NOT be able - to access resources of another virtual host. - - - - - The server SHOULD verify that the client has permission to access the - specified virtual host. - - - - - - - The client can specify zero or more capability names, delimited by spaces. - The server can use this string to how to process the client's connection - request. - - - - - - In a configuration with multiple collaborating servers, the server may respond - to a Connection.Open method with a Connection.Redirect. The insist option tells - the server that the client is insisting on a connection to the specified server. - - - - When the client uses the insist option, the server MUST NOT respond with a - Connection.Redirect method. If it cannot accept the client's connection - request it should respond by closing the connection with a suitable reply - code. - - - - - - - - This method signals to the client that the connection is ready for use. - - - - - - - - This method redirects the client to another server, based on the requested virtual - host and/or capabilities. - - - - When getting the Connection.Redirect method, the client SHOULD reconnect to - the host specified, and if that host is not present, to any of the hosts - specified in the known-hosts list. - - - - - - Specifies the server to connect to. This is an IP address or a DNS name, - optionally followed by a colon and a port number. If no port number is - specified, the client should use the default port number for the protocol. - - - - - - - - - - - This method indicates that the sender wants to close the connection. This may be - due to internal conditions (e.g. a forced shut-down) or due to an error handling - a specific method, i.e. an exception. When a close is due to an exception, the - sender provides the class and method id of the method which caused the exception. - - - - - After sending this method any received method except the Close-OK method MUST - be discarded. - - - - - - - - - - - - - When the close is provoked by a method exception, this is the class of the - method. - - - - - - When the close is provoked by a method exception, this is the ID of the method. - - - - - - - This method confirms a Connection.Close method and tells the recipient that it is - safe to release resources for the connection and close the socket. - - - - A peer that detects a socket closure without having received a Close-Ok - handshake method SHOULD log the error. - - - - - - - - - - - - The channel class provides methods for a client to establish a channel to a - server and for both peers to operate the channel thereafter. - - - - channel = open-channel *use-channel close-channel - open-channel = C:OPEN S:OPEN-OK - / C:RESUME S:OK - use-channel = C:FLOW S:FLOW-OK - / S:FLOW C:FLOW-OK - / S:PING C:OK - / C:PONG S:OK - / C:PING S:OK - / S:PONG C:OK - / functional-class - close-channel = C:CLOSE S:CLOSE-OK - / S:CLOSE C:CLOSE-OK - - - - - - - - - - This method opens a channel to the server. - - - - The client MUST NOT use this method on an already-opened channel. - - - Client opens a channel and then reopens the same channel. - - - - - - - Configures out-of-band transfers on this channel. The syntax and meaning of this - field will be formally defined at a later date. - - - - - - - - This method signals to the client that the channel is ready for use. - - - - - - - - - - This method asks the peer to pause or restart the flow of content data. This is a - simple flow-control mechanism that a peer can use to avoid overflowing its queues or - otherwise finding itself receiving more messages than it can process. Note that this - method is not intended for window control. The peer that receives a disable flow - method should finish sending the current content frame, if any, then pause. - - - - - When a new channel is opened, it is active (flow is active). Some applications - assume that channels are inactive until started. To emulate this behaviour a - client MAY open the channel, then pause it. - - - - - - When sending content frames, a peer SHOULD monitor the channel for incoming - methods and respond to a Channel.Flow as rapidly as possible. - - - - - - A peer MAY use the Channel.Flow method to throttle incoming content data for - internal reasons, for example, when exchanging data over a slower connection. - - - - - - The peer that requests a Channel.Flow method MAY disconnect and/or ban a peer - that does not respect the request. This is to prevent badly-behaved clients - from overwhelming a broker. - - - - - - - - - - - If 1, the peer starts sending content frames. If 0, the peer stops sending - content frames. - - - - - - - Confirms to the peer that a flow command was received and processed. - - - - - - Confirms the setting of the processed flow method: 1 means the peer will start - sending or continue to send content frames; 0 means it will not. - - - - - - - - - This method indicates that the sender wants to close the channel. This may be due to - internal conditions (e.g. a forced shut-down) or due to an error handling a specific - method, i.e. an exception. When a close is due to an exception, the sender provides - the class and method id of the method which caused the exception. - - - - - - After sending this method any received method except the Close-OK method MUST - be discarded. - - - - - - - - - - - - - When the close is provoked by a method exception, this is the class of the - method. - - - - - - When the close is provoked by a method exception, this is the ID of the method. - - - - - - - This method confirms a Channel.Close method and tells the recipient that it is safe - to release resources for the channel. - - - - A peer that detects a socket closure without having received a Channel.Close-Ok - handshake method SHOULD log the error. - - - - - - - - - - - This method resume a previously interrupted channel. - - - - - - - - - - - [WORK IN PROGRESS] Request that the recipient issue a pong request. - - - - - - - - - [WORK IN PROGRESS] Issued after a ping request is received. Note that this is a - request issued after receiving a ping, not a response to - receiving a ping. - - - - - - - - - [WORK IN PROGRESS] Signals normal completion of a method. - - - - - - - - - - - - - The protocol control access to server resources using access tickets. A - client must explicitly request access tickets before doing work. An access - ticket grants a client the right to use a specific set of resources - - called a "realm" - in specific ways. - - - - access = C:REQUEST S:REQUEST-OK - - - - - - - - - - This method requests an access ticket for an access realm. The server - responds by granting the access ticket. If the client does not have - access rights to the requested realm this causes a connection exception. - Access tickets are a per-channel resource. - - - - - - - - Specifies the name of the realm to which the client is requesting access. - The realm is a configured server-side object that collects a set of - resources (exchanges, queues, etc.). If the channel has already requested - an access ticket onto this realm, the previous ticket is destroyed and a - new ticket is created with the requested access rights, if allowed. - - - - The client MUST specify a realm that is known to the server. The server - makes an identical response for undefined realms as it does for realms - that are defined but inaccessible to this client. - - - Client specifies an undefined realm. - - - - - - - Request exclusive access to the realm, meaning that this will be the only - channel that uses the realm's resources. - - - - The client MAY NOT request exclusive access to a realm that has active - access tickets, unless the same channel already had the only access - ticket onto that realm. - - - Client opens two channels and requests exclusive access to the same realm. - - - - - - Request message passive access to the specified access realm. Passive - access lets a client get information about resources in the realm but - not to make any changes to them. - - - - - Request message active access to the specified access realm. Active access lets - a client get create and delete resources in the realm. - - - - - Request write access to the specified access realm. Write access lets a client - publish messages to all exchanges in the realm. - - - - - Request read access to the specified access realm. Read access lets a client - consume messages from queues in the realm. - - - - - - - This method provides the client with an access ticket. The access ticket is valid - within the current channel and for the lifespan of the channel. - - - - The client MUST NOT use access tickets except within the same channel as - originally granted. - - - Client opens two channels, requests a ticket on one channel, and then - tries to use that ticket in a second channel. - - - - - - - - - - - - Exchanges match and distribute messages across queues. Exchanges can be configured in - the server or created at runtime. - - - - exchange = C:DECLARE S:DECLARE-OK - / C:DELETE S:DELETE-OK - - - - - - - - The server MUST implement these standard exchange types: fanout, direct. - - - Client attempts to declare an exchange with each of these standard types. - - - - - The server SHOULD implement these standard exchange types: topic, headers. - - - Client attempts to declare an exchange with each of these standard types. - - - - - The server MUST, in each virtual host, pre-declare an exchange instance - for each standard exchange type that it implements, where the name of the - exchange instance, if defined, is "amq." followed by the exchange type name. - - - The server MUST, in each virtual host, pre-declare at least two direct - exchange instances: one named "amq.direct", the other with no public name - that serves as a default exchange for Publish methods. - - - Client creates a temporary queue and attempts to bind to each required - exchange instance ("amq.fanout", "amq.direct", "amq.topic", and "amq.headers" - if those types are defined). - - - - - The server MUST pre-declare a direct exchange with no public name to act as - the default exchange for content Publish methods and for default queue bindings. - - - Client checks that the default exchange is active by specifying a queue - binding with no exchange name, and publishing a message with a suitable - routing key but without specifying the exchange name, then ensuring that - the message arrives in the queue correctly. - - - - - The server MUST NOT allow clients to access the default exchange except - by specifying an empty exchange name in the Queue.Bind and content Publish - methods. - - - - - The server MAY implement other exchange types as wanted. - - - - - - - - This method creates an exchange if it does not already exist, and if the exchange - exists, verifies that it is of the correct and expected class. - - - - The server SHOULD support a minimum of 16 exchanges per virtual host and - ideally, impose no limit except as defined by available resources. - - - The client creates as many exchanges as it can until the server reports - an error; the number of exchanges successfully created must be at least - sixteen. - - - - - - - - - When a client defines a new exchange, this belongs to the access realm of the - ticket used. All further work done with that exchange must be done with an - access ticket for the same realm. - - - - The client MUST provide a valid access ticket giving "active" access to - the realm in which the exchange exists or will be created, or "passive" - access if the if-exists flag is set. - - - Client creates access ticket with wrong access rights and attempts to use - in this method. - - - - - - - - Exchange names starting with "amq." are reserved for pre-declared and - standardised exchanges. The client MUST NOT attempt to create an exchange - starting with "amq.". - - - TODO. - - - - - - - - Each exchange belongs to one of a set of exchange types implemented by the - server. The exchange types define the functionality of the exchange - i.e. how - messages are routed through it. It is not valid or meaningful to attempt to - change the type of an existing exchange. - - - - Exchanges cannot be redeclared with different types. The client MUST not - attempt to redeclare an existing exchange with a different type than used - in the original Exchange.Declare method. - - - TODO. - - - - - The client MUST NOT attempt to create an exchange with a type that the - server does not support. - - - TODO. - - - - - - - - If set, the server will not create the exchange. The client can use this to - check whether an exchange exists without modifying the server state. - - - - If set, and the exchange does not already exist, the server MUST raise a - channel exception with reply code 404 (not found). - - - TODO. - - - - - - - If set when creating a new exchange, the exchange will be marked as durable. - Durable exchanges remain active when a server restarts. Non-durable exchanges - (transient exchanges) are purged if/when a server restarts. - - - - The server MUST support both durable and transient exchanges. - - - TODO. - - - - - The server MUST ignore the durable field if the exchange already exists. - - - TODO. - - - - - - - - If set, the exchange is deleted when all queues have finished using it. - - - - The server MUST ignore the auto-delete field if the exchange already - exists. - - - TODO. - - - - - - - If set, the exchange may not be used directly by publishers, but only when bound - to other exchanges. Internal exchanges are used to construct wiring that is not - visible to applications. - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - A set of arguments for the declaration. The syntax and semantics of these - arguments depends on the server implementation. This field is ignored if passive - is 1. - - - - - - - This method confirms a Declare method and confirms the name of the exchange, - essential for automatically-named exchanges. - - - - - - - - - This method deletes an exchange. When an exchange is deleted all queue bindings on - the exchange are cancelled. - - - - - - - - - The client MUST provide a valid access ticket giving "active" access - rights to the exchange's access realm. - - - Client creates access ticket with wrong access rights and attempts to use - in this method. - - - - - - - - The client MUST NOT attempt to delete an exchange that does not exist. - - - - - - - - - If set, the server will only delete the exchange if it has no queue bindings. If - the exchange has queue bindings the server does not delete it but raises a - channel exception instead. - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - This method confirms the deletion of an exchange. - - - - - - - - - - Message routing key - - Specifies the routing key for the message. The routing key is - used for routing messages depending on the exchange configuration. - - - - - - - - - - - - - - - - - - Queues store and forward messages. Queues can be configured in the server or created at - runtime. Queues must be attached to at least one exchange in order to receive messages - from publishers. - - - - queue = C:DECLARE S:DECLARE-OK - / C:BIND S:BIND-OK - / C:PURGE S:PURGE-OK - / C:DELETE S:DELETE-OK - - - - - - - - A server MUST allow any content class to be sent to any queue, in any mix, and - queue and deliver these content classes independently. Note that all methods - that fetch content off queues are specific to a given content class. - - - Client creates an exchange of each standard type and several queues that - it binds to each exchange. It must then successfully send each of the standard - content types to each of the available queues. - - - - - - - - This method creates or checks a queue. When creating a new queue the client can - specify various properties that control the durability of the queue and its - contents, and the level of sharing for the queue. - - - - - The server MUST create a default binding for a newly-created queue to the - default exchange, which is an exchange of type 'direct' and use the queue - name as the routing key. - - - Client creates a new queue, and then without explicitly binding it to an - exchange, attempts to send a message through the default exchange binding, - i.e. publish a message to the empty exchange, with the queue name as routing - key. - - - - - - - The server SHOULD support a minimum of 256 queues per virtual host and ideally, - impose no limit except as defined by available resources. - - - Client attempts to create as many queues as it can until the server reports - an error. The resulting count must at least be 256. - - - - - - - - - When a client defines a new queue, this belongs to the access realm of the - ticket used. All further work done with that queue must be done with an access - ticket for the same realm. - - - - The client MUST provide a valid access ticket giving "active" access to - the realm in which the queue exists or will be created. - - - Client creates access ticket with wrong access rights and attempts to use - in this method. - - - - - - - - The queue name MAY be empty, in which case the server MUST create a new - queue with a unique generated name and return this to the client in the - Declare-Ok method. - - - Client attempts to create several queues with an empty name. The client then - verifies that the server-assigned names are unique and different. - - - - - Queue names starting with "amq." are reserved for pre-declared and - standardised server queues. A client MAY NOT attempt to declare a queue with a - name that starts with "amq." and the passive option set to zero. - - - A client attempts to create a queue with a name starting with "amq." and with - the passive option set to zero. - - - - - - - - If set, the server will not create the queue. This field allows the client - to assert the presence of a queue without modifying the server state. - - - - The client MAY ask the server to assert that a queue exists without - creating the queue if not. If the queue does not exist, the server - treats this as a failure. - - - Client declares an existing queue with the passive option and expects - the server to respond with a declare-ok. Client then attempts to declare - a non-existent queue with the passive option, and the server must close - the channel with the correct reply-code. - - - - - - - If set when creating a new queue, the queue will be marked as durable. Durable - queues remain active when a server restarts. Non-durable queues (transient - queues) are purged if/when a server restarts. Note that durable queues do not - necessarily hold persistent messages, although it does not make sense to send - persistent messages to a transient queue. - - - - The server MUST recreate the durable queue after a restart. - - - - A client creates a durable queue. The server is then restarted. The client - then attempts to send a message to the queue. The message should be successfully - delivered. - - - - - The server MUST support both durable and transient queues. - - A client creates two named queues, one durable and one transient. - - - - - The server MUST ignore the durable field if the queue already exists. - - A client creates two named queues, one durable and one transient. The client - then attempts to declare the two queues using the same names again, but reversing - the value of the durable flag in each case. Verify that the queues still exist - with the original durable flag values. - - - - - - - - Exclusive queues may only be consumed from by the current connection. Setting - the 'exclusive' flag always implies 'auto-delete'. - - - - - - The server MUST support both exclusive (private) and non-exclusive (shared) - queues. - - - A client creates two named queues, one exclusive and one non-exclusive. - - - - - - - The client MAY NOT attempt to declare any existing and exclusive queue - on multiple connections. - - - A client declares an exclusive named queue. A second client on a different - connection attempts to declare a queue of the same name. - - - - - - - If set, the queue is deleted when all consumers have finished using it. Last - consumer can be cancelled either explicitly or because its channel is closed. If - there was no consumer ever on the queue, it won't be deleted. - - - - - - The server MUST ignore the auto-delete field if the queue already exists. - - - A client creates two named queues, one as auto-delete and one explicit-delete. - The client then attempts to declare the two queues using the same names again, - but reversing the value of the auto-delete field in each case. Verify that the - queues still exist with the original auto-delete flag values. - - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - A set of arguments for the declaration. The syntax and semantics of these - arguments depends on the server implementation. This field is ignored if passive - is 1. - - - - - - - This method confirms a Declare method and confirms the name of the queue, essential - for automatically-named queues. - - - - - - - Reports the name of the queue. If the server generated a queue name, this field - contains that name. - - - - - - - Reports the number of messages in the queue, which will be zero for - newly-created queues. - - - - - - Reports the number of active consumers for the queue. Note that consumers can - suspend activity (Channel.Flow) in which case they do not appear in this count. - - - - - - - - - This method binds a queue to an exchange. Until a queue is bound it will not receive - any messages. In a classic messaging model, store-and-forward queues are bound to a - direct exchange and subscription queues are bound to a topic exchange. - - - - - - A server MUST allow ignore duplicate bindings - that is, two or more bind - methods for a specific queue, with identical arguments - without treating these - as an error. - - - A client binds a named queue to an exchange. The client then repeats the bind - (with identical arguments). - - - - - - - If a bind fails, the server MUST raise a connection exception. - - TODO - - - - - - - The server MUST NOT allow a durable queue to bind to a transient exchange. - - - A client creates a transient exchange. The client then declares a named durable - queue and then attempts to bind the transient exchange to the durable queue. - - - - - - - Bindings for durable queues are automatically durable and the server SHOULD - restore such bindings after a server restart. - - - A server creates a named durable queue and binds it to a durable exchange. The - server is restarted. The client then attempts to use the queue/exchange combination. - - - - - - - If the client attempts to bind to an exchange that was declared as internal, the server - MUST raise a connection exception with reply code 530 (not allowed). - - - A client attempts to bind a named queue to an internal exchange. - - - - - - - The server SHOULD support at least 4 bindings per queue, and ideally, impose no - limit except as defined by available resources. - - - A client creates a named queue and attempts to bind it to 4 different non-internal - exchanges. - - - - - - - - - - The client provides a valid access ticket giving "active" access rights to the - queue's access realm. - - - - - - Specifies the name of the queue to bind. If the queue name is empty, refers to - the current queue for the channel, which is the last declared queue. - - - - - A client MUST NOT be allowed to bind a non-existent and unnamed queue (i.e. - empty queue name) to an exchange. - - - A client attempts to bind with an unnamed (empty) queue name to an exchange. - - - - - - - A client MUST NOT be allowed to bind a non-existent queue (i.e. not previously - declared) to an exchange. - - - A client attempts to bind an undeclared queue name to an exchange. - - - - - - - - - A client MUST NOT be allowed to bind a queue to a non-existent exchange. - - - A client attempts to bind an named queue to a undeclared exchange. - - - - - - - Specifies the routing key for the binding. The routing key is used for routing - messages depending on the exchange configuration. Not all exchanges use a - routing key - refer to the specific exchange documentation. If the queue name - is empty, the server uses the last queue declared on the channel. If the - routing key is also empty, the server uses this queue name for the routing - key as well. If the queue name is provided but the routing key is empty, the - server does the binding with that empty routing key. The meaning of empty - routing keys depends on the exchange implementation. - - - - If a message queue binds to a direct exchange using routing key K and a - publisher sends the exchange a message with routing key R, then the message - MUST be passed to the message queue if K = R. - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - A set of arguments for the binding. The syntax and semantics of these arguments - depends on the exchange class. - - - - - - This method confirms that the bind was successful. - - - - - - - - This method unbinds a queue from an exchange. - - If a unbind fails, the server MUST raise a connection exception. - - - - - - - The client provides a valid access ticket giving "active" - access rights to the queue's access realm. - - - - - Specifies the name of the queue to unbind. - - - If the queue does not exist the server MUST raise a channel exception - with reply code 404 (not found). - - - - - - The name of the exchange to unbind from. - - - If the exchange does not exist the server MUST raise a channel - exception with reply code 404 (not found). - - - - - - Specifies the routing key of the binding to unbind. - - - - Specifies the arguments of the binding to unbind. - - - - - This method confirms that the unbind was successful. - - - - - - - - This method removes all messages from a queue. It does not cancel consumers. Purged - messages are deleted without any formal "undo" mechanism. - - - - - A call to purge MUST result in an empty queue. - - - - - - On transacted channels the server MUST not purge messages that have already been - sent to a client but not yet acknowledged. - - - - - - - - - The server MAY implement a purge queue or log that allows system administrators - to recover accidentally-purged messages. The server SHOULD NOT keep purged - messages in the same storage spaces as the live messages since the volumes of - purged messages may get very large. - - - - - - - - - The access ticket must be for the access realm that holds the queue. - - - - The client MUST provide a valid access ticket giving "read" access rights to - the queue's access realm. Note that purging a queue is equivalent to reading - all messages and discarding them. - - - - - - - Specifies the name of the queue to purge. If the queue name is empty, refers to - the current queue for the channel, which is the last declared queue. - - - - - If the client did not previously declare a queue, and the queue name in this - method is empty, the server MUST raise a connection exception with reply - code 530 (not allowed). - - - - - - - - - The queue MUST exist. Attempting to purge a non-existing queue MUST cause a - channel exception. - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - This method confirms the purge of a queue. - - - - - Reports the number of messages purged. - - - - - - - - This method deletes a queue. When a queue is deleted any pending messages are sent - to a dead-letter queue if this is defined in the server configuration, and all - consumers on the queue are cancelled. - - - - - - - - The server SHOULD use a dead-letter queue to hold messages that were pending on - a deleted queue, and MAY provide facilities for a system administrator to move - these messages back to an active queue. - - - - - - - - - - The client provides a valid access ticket giving "active" access rights to the - queue's access realm. - - - - - - Specifies the name of the queue to delete. If the queue name is empty, refers to - the current queue for the channel, which is the last declared queue. - - - - - If the client did not previously declare a queue, and the queue name in this - method is empty, the server MUST raise a connection exception with reply - code 530 (not allowed). - - - - - - - The queue must exist. If the client attempts to delete a non-existing queue - the server MUST raise a channel exception with reply code 404 (not found). - - - - - - - If set, the server will only delete the queue if it has no consumers. If the - queue has consumers the server does does not delete it but raises a channel - exception instead. - - - - - The server MUST respect the if-unused flag when deleting a queue. - - - - - - If set, the server will only delete the queue if it has no messages. - - - - If the queue is not empty the server MUST raise a channel exception with - reply code 406 (precondition failed). - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - This method confirms the deletion of a queue. - - - - - Reports the number of messages purged. - - - - - - - - - The Basic class provides methods that support an industry-standard messaging model. - - - - basic = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL S:CANCEL-OK - / C:PUBLISH content - / S:RETURN content - / S:DELIVER content - / C:GET ( S:GET-OK content / S:GET-EMPTY ) - / C:ACK - / C:REJECT - - - - - - - - - The server SHOULD respect the persistent property of basic messages and - SHOULD make a best-effort to hold persistent basic messages on a reliable - storage mechanism. - - - Send a persistent message to queue, stop server, restart server and then - verify whether message is still present. Assumes that queues are durable. - Persistence without durable queues makes no sense. - - - - - - - The server MUST NOT discard a persistent basic message in case of a queue - overflow. - - - Create a queue overflow situation with persistent messages and verify that - messages do not get lost (presumably the server will write them to disk). - - - - - - The server MAY use the Channel.Flow method to slow or stop a basic message - publisher when necessary. - - - Create a queue overflow situation with non-persistent messages and verify - whether the server responds with Channel.Flow or not. Repeat with persistent - messages. - - - - - - - The server MAY overflow non-persistent basic messages to persistent - storage. - - - - - - - The server MAY discard or dead-letter non-persistent basic messages on a - priority basis if the queue size exceeds some configured limit. - - - - - - - - The server MUST implement at least 2 priority levels for basic messages, - where priorities 0-4 and 5-9 are treated as two distinct levels. - - - Send a number of priority 0 messages to a queue. Send one priority 9 - message. Consume messages from the queue and verify that the first message - received was priority 9. - - - - - - The server MAY implement up to 10 priority levels. - - - Send a number of messages with mixed priorities to a queue, so that all - priority values from 0 to 9 are exercised. A good scenario would be ten - messages in low-to-high priority. Consume from queue and verify how many - priority levels emerge. - - - - - - - The server MUST deliver messages of the same priority in order irrespective of - their individual persistence. - - - Send a set of messages with the same priority but different persistence - settings to a queue. Consume and verify that messages arrive in same order - as originally published. - - - - - - - The server MUST support automatic acknowledgements on Basic content, i.e. - consumers with the no-ack field set to FALSE. - - - Create a queue and a consumer using automatic acknowledgements. Publish - a set of messages to the queue. Consume the messages and verify that all - messages are received. - - - - - - The server MUST support explicit acknowledgements on Basic content, i.e. - consumers with the no-ack field set to TRUE. - - - Create a queue and a consumer using explicit acknowledgements. Publish a - set of messages to the queue. Consume the messages but acknowledge only - half of them. Disconnect and reconnect, and consume from the queue. - Verify that the remaining messages are received. - - - - - - - - - - - - - - - - - - - - - - - - - - This method requests a specific quality of service. The QoS can be specified for the - current channel or for all channels on the connection. The particular properties and - semantics of a qos method always depend on the content class semantics. Though the - qos method could in principle apply to both peers, it is currently meaningful only - for the server. - - - - - - - - The client can request that messages be sent in advance so that when the client - finishes processing a message, the following message is already held locally, - rather than needing to be sent down the channel. Prefetching gives a performance - improvement. This field specifies the prefetch window size in octets. The server - will send a message in advance if it is equal to or smaller in size than the - available prefetch size (and also falls into other prefetch limits). May be set - to zero, meaning "no specific limit", although other prefetch limits may still - apply. The prefetch-size is ignored if the no-ack option is set. - - - - - The server MUST ignore this setting when the client is not processing any - messages - i.e. the prefetch size does not limit the transfer of single - messages to a client, only the sending in advance of more messages while - the client still has one or more unacknowledged messages. - - - Define a QoS prefetch-size limit and send a single message that exceeds - that limit. Verify that the message arrives correctly. - - - - - - - Specifies a prefetch window in terms of whole messages. This field may be used - in combination with the prefetch-size field; a message will only be sent in - advance if both prefetch windows (and those at the channel and connection level) - allow it. The prefetch-count is ignored if the no-ack option is set. - - - - - The server may send less data in advance than allowed by the client's - specified prefetch windows but it MUST NOT send more. - - - Define a QoS prefetch-size limit and a prefetch-count limit greater than - one. Send multiple messages that exceed the prefetch size. Verify that - no more than one message arrives at once. - - - - - - - By default the QoS settings apply to the current channel only. If this field is - set, they are applied to the entire connection. - - - - - - - This method tells the client that the requested QoS levels could be handled by the - server. The requested QoS applies to all active consumers until a new QoS is - defined. - - - - - - - - - This method asks the server to start a "consumer", which is a transient request for - messages from a specific queue. Consumers last as long as the channel they were - created on, or until the client cancels them. - - - - - - The server SHOULD support at least 16 consumers per queue, and ideally, impose - no limit except as defined by available resources. - - - Create a queue and create consumers on that queue until the server closes the - connection. Verify that the number of consumers created was at least sixteen - and report the total number. - - - - - - - - - - The client MUST provide a valid access ticket giving "read" access rights to - the realm for the queue. - - - Attempt to create a consumer with an invalid (non-zero) access ticket. - - - - - - - Specifies the name of the queue to consume from. If the queue name is null, - refers to the current queue for the channel, which is the last declared queue. - - - - If the queue name is empty the client MUST have previously declared a - queue using this channel. - - - Attempt to create a consumer with an empty queue name and no previously - declared queue on the channel. - - - - - - - Specifies the identifier for the consumer. The consumer tag is local to a - connection, so two clients can use the same consumer tags. If this field is - empty the server will generate a unique tag. - - - - The client MUST NOT specify a tag that refers to an existing consumer. - - - Attempt to create two consumers with the same non-empty tag. - - - - - The consumer tag is valid only within the channel from which the - consumer was created. I.e. a client MUST NOT create a consumer in one - channel and then use it in another. - - - Attempt to create a consumer in one channel, then use in another channel, - in which consumers have also been created (to test that the server uses - unique consumer tags). - - - - - - - - - - - Request exclusive consumer access, meaning only this consumer can access the - queue. - - - - - The client MAY NOT gain exclusive access to a queue that already has - active consumers. - - - Open two connections to a server, and in one connection create a shared - (non-exclusive) queue and then consume from the queue. In the second - connection attempt to consume from the same queue using the exclusive - option. - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise - a channel or connection exception. - - - - - - - A set of filters for the consume. The syntax and semantics - of these filters depends on the providers implementation. - - - - - - - The server provides the client with a consumer tag, which is used by the client - for methods called on the consumer at a later stage. - - - - - Holds the consumer tag specified by the client or provided by the server. - - - - - - - - - This method cancels a consumer. This does not affect already delivered - messages, but it does mean the server will not send any more messages for - that consumer. The client may receive an arbitrary number of messages in - between sending the cancel method and receiving the cancel-ok reply. - - - - - If the queue does not exist the server MUST ignore the cancel method, so - long as the consumer tag is valid for that channel. - - - TODO. - - - - - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - - This method confirms that the cancellation was completed. - - - - - - - - - - This method publishes a message to a specific exchange. The message will be routed - to queues as defined by the exchange configuration and distributed to any active - consumers when the transaction, if any, is committed. - - - - - - - - The client MUST provide a valid access ticket giving "write" access rights - to the access realm for the exchange. - - - TODO. - - - - - - - Specifies the name of the exchange to publish to. The exchange name can be - empty, meaning the default exchange. If the exchange name is specified, and that - exchange does not exist, the server will raise a channel exception. - - - - - - The server MUST accept a blank exchange name to mean the default exchange. - - - TODO. - - - - - - - If the exchange was declared as an internal exchange, the server MUST raise - a channel exception with a reply code 403 (access refused). - - - TODO. - - - - - - - The exchange MAY refuse basic content in which case it MUST raise a channel - exception with reply code 540 (not implemented). - - - TODO. - - - - - - - Specifies the routing key for the message. The routing key is used for routing - messages depending on the exchange configuration. - - - - - - This flag tells the server how to react if the message cannot be routed to a - queue. If this flag is set, the server will return an unroutable message with a - Return method. If this flag is zero, the server silently drops the message. - - - - - The server SHOULD implement the mandatory flag. - - - TODO. - - - - - - - This flag tells the server how to react if the message cannot be routed to a - queue consumer immediately. If this flag is set, the server will return an - undeliverable message with a Return method. If this flag is zero, the server - will queue the message, but with no guarantee that it will ever be consumed. - - - - - The server SHOULD implement the immediate flag. - - - TODO. - - - - - - - - This method returns an undeliverable message that was published with the "immediate" - flag set, or an unroutable message published with the "mandatory" flag set. The - reply code and text provide information about the reason that the message was - undeliverable. - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - - Specifies the routing key name specified when the message was published. - - - - - - - - - This method delivers a message to the client, via a consumer. In the asynchronous - message delivery model, the client starts a consumer using the Consume method, then - the server responds with Deliver methods as and when messages arrive for that - consumer. - - - - - - - The server SHOULD track the number of times a message has been delivered to - clients and when a message is redelivered a certain number of times - e.g. 5 - times - without being acknowledged, the server SHOULD consider the message to be - unprocessable (possibly causing client applications to abort), and move the - message to a dead letter queue. - - - TODO. - - - - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - Specifies the routing key name specified when the message was published. - - - - - - - - This method provides a direct access to the messages in a queue using a synchronous - dialogue that is designed for specific types of application where synchronous - functionality is more important than performance. - - - - - - - - - - The client MUST provide a valid access ticket giving "read" access rights to - the realm for the queue. - - - TODO. - - - - - - - Specifies the name of the queue to consume from. If the queue name is null, - refers to the current queue for the channel, which is the last declared queue. - - - - If the client did not previously declare a queue, and the queue name in this - method is empty, the server MUST raise a connection exception with reply - code 530 (not allowed). - - - TODO. - - - - - - - - - - This method delivers a message to the client following a get method. A message - delivered by 'get-ok' must be acknowledged unless the no-ack option was set in the - get method. - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - If empty, the message was published to the default exchange. - - - - - Specifies the routing key name specified when the message was published. - - - - - This field reports the number of messages pending on the queue, excluding the - message being delivered. Note that this figure is indicative, not reliable, and - can change arbitrarily as messages are added to the queue and removed by other - clients. - - - - - - - This method tells the client that the queue has no messages available for the - client. - - - - - - - - For use by cluster applications, should not be used by client applications. - - - - - - - - - This method acknowledges one or more messages delivered via the Deliver or Get-Ok - methods. The client can ask to confirm a single message or a set of messages up to - and including a specific message. - - - - - - - - - If set to 1, the delivery tag is treated as "up to and including", so that the - client can acknowledge multiple messages with a single method. If set to zero, - the delivery tag refers to a single message. If the multiple field is 1, and the - delivery tag is zero, tells the server to acknowledge all outstanding messages. - - - - - - The server MUST validate that a non-zero delivery-tag refers to an delivered - message, and raise a channel exception if this is not the case. - - - TODO. - - - - - - - - - - This method allows a client to reject a message. It can be used to interrupt and - cancel large incoming messages, or return untreatable messages to their original - queue. - - - - - - The server SHOULD be capable of accepting and process the Reject method while - sending message content with a Deliver or Get-Ok method. I.e. the server should - read and process incoming methods while sending output frames. To cancel a - partially-send content, the server sends a content body frame of size 1 (i.e. - with no data except the frame-end octet). - - - - - - - The server SHOULD interpret this method as meaning that the client is unable to - process the message at this time. - - - TODO. - - - - - - - A client MUST NOT use this method as a means of selecting messages to process. A - rejected message MAY be discarded or dead-lettered, not necessarily passed to - another client. - - - TODO. - - - - - - - - - - If this field is zero, the message will be discarded. If this bit is 1, the - server will attempt to requeue the message. - - - - - - - The server MUST NOT deliver the message to the same client within the - context of the current channel. The recommended strategy is to attempt to - deliver the message to an alternative consumer, and if that is not possible, - to move the message to a dead-letter queue. The server MAY use more - sophisticated tracking to hold the message on the queue and redeliver it to - the same client at a later stage. - - - TODO. - - - - - - - - This method asks the broker to redeliver all unacknowledged messages on a specified - channel. Zero or more messages may be redelivered. This method is only allowed on - non-transacted channels. - - - - - The server MUST set the redelivered flag on all messages that are resent. - - - TODO. - - - - - - The server MUST raise a channel exception if this is called on a transacted - channel. - - - TODO. - - - - - - - - If this field is zero, the message will be redelivered to the original - recipient. If this bit is 1, the server will attempt to requeue the message, - potentially then delivering it to an alternative subscriber. - - - - - - - - redeliver unacknowledged messages - - This method asks the broker to redeliver all unacknowledged messages on a - specified channel. Zero or more messages may be redelivered. This method - is only allowed on non-transacted channels. - - - - - requeue the message - - If this field is zero, the message will be redelivered to the original - recipient. If this bit is 1, the server will attempt to requeue the - message, potentially then delivering it to an alternative subscriber. - - - - The server MUST set the redelivered flag on all messages that are resent. - - - The server MUST raise a channel exception if this is called on a - transacted channel. - - - - - confirm a successful recover - - This method confirms to the client that the recover succeeded. - Note that if an recover fails, the server raises a channel exception. - - - - - - - - - - - - The file class provides methods that support reliable file transfer. File - messages have a specific set of properties that are required for interoperability - with file transfer applications. File messages and acknowledgements are subject to - channel transactions. Note that the file class does not provide message browsing - methods; these are not compatible with the staging model. Applications that need - browsable file transfer should use Basic content and the Basic class. - - - - file = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL S:CANCEL-OK - / C:OPEN S:OPEN-OK C:STAGE content - / S:OPEN C:OPEN-OK S:STAGE content - / C:PUBLISH - / S:DELIVER - / S:RETURN - / C:ACK - / C:REJECT - - - - - - - - The server MUST make a best-effort to hold file messages on a reliable storage - mechanism. - - - - - - - - - - The server MUST NOT discard a file message in case of a queue overflow. The server - MUST use the Channel.Flow method to slow or stop a file message publisher when - necessary. - - - - - - - - The server MUST implement at least 2 priority levels for file messages, where - priorities 0-4 and 5-9 are treated as two distinct levels. The server MAY implement - up to 10 priority levels. - - - - - - The server MUST support both automatic and explicit acknowledgements on file - content. - - - - - - - - - - - - - - - - - - - - - This method requests a specific quality of service. The QoS can be specified for the - current channel or for all channels on the connection. The particular properties and - semantics of a qos method always depend on the content class semantics. Though the - qos method could in principle apply to both peers, it is currently meaningful only - for the server. - - - - - - - - - The client can request that messages be sent in advance so that when the client - finishes processing a message, the following message is already held locally, - rather than needing to be sent down the channel. Prefetching gives a performance - improvement. This field specifies the prefetch window size in octets. May be set - to zero, meaning "no specific limit". Note that other prefetch limits may still - apply. The prefetch-size is ignored if the no-ack option is set. - - - - - - Specifies a prefetch window in terms of whole messages. This is compatible with - some file API implementations. This field may be used in combination with the - prefetch-size field; a message will only be sent in advance if both prefetch - windows (and those at the channel and connection level) allow it. The - prefetch-count is ignored if the no-ack option is set. - - - - - - The server MAY send less data in advance than allowed by the client's - specified prefetch windows but it MUST NOT send more. - - - - - - - By default the QoS settings apply to the current channel only. If this field is - set, they are applied to the entire connection. - - - - - - - This method tells the client that the requested QoS levels could be handled by the - server. The requested QoS applies to all active consumers until a new QoS is - defined. - - - - - - - - - - This method asks the server to start a "consumer", which is a transient request for - messages from a specific queue. Consumers last as long as the channel they were - created on, or until the client cancels them. - - - - - The server SHOULD support at least 16 consumers per queue, unless the queue was - declared as private, and ideally, impose no limit except as defined by available - resources. - - - - - - - - - - - The client MUST provide a valid access ticket giving "read" access rights to - the realm for the queue. - - - - - - - Specifies the name of the queue to consume from. If the queue name is null, - refers to the current queue for the channel, which is the last declared queue. - - - - - If the client did not previously declare a queue, and the queue name in this - method is empty, the server MUST raise a connection exception with reply - code 530 (not allowed). - - - - - - - Specifies the identifier for the consumer. The consumer tag is local to a - connection, so two clients can use the same consumer tags. If this field is - empty the server will generate a unique tag. - - - - - - The tag MUST NOT refer to an existing consumer. If the client attempts to - create two consumers with the same non-empty tag the server MUST raise a - connection exception with reply code 530 (not allowed). - - - - - - - - - - - Request exclusive consumer access, meaning only this consumer can access the - queue. - - - - - - If the server cannot grant exclusive access to the queue when asked, - - because there are other consumers active - it MUST raise a channel exception - with return code 405 (resource locked). - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - A set of filters for the consume. The syntax and semantics - of these filters depends on the providers implementation. - - - - - - - This method provides the client with a consumer tag which it MUST use in methods - that work with the consumer. - - - - - - Holds the consumer tag specified by the client or provided by the server. - - - - - - - - This method cancels a consumer. This does not affect already delivered messages, but - it does mean the server will not send any more messages for that consumer. - - - - - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - This method confirms that the cancellation was completed. - - - - - - - - - - - This method requests permission to start staging a message. Staging means sending - the message into a temporary area at the recipient end and then delivering the - message by referring to this temporary area. Staging is how the protocol handles - partial file transfers - if a message is partially staged and the connection breaks, - the next time the sender starts to stage it, it can restart from where it left off. - - - - - - - - - - This is the staging identifier. This is an arbitrary string chosen by the - sender. For staging to work correctly the sender must use the same staging - identifier when staging the same message a second time after recovery from a - failure. A good choice for the staging identifier would be the SHA1 hash of the - message properties data (including the original filename, revised time, etc.). - - - - - - The size of the content in octets. The recipient may use this information to - allocate or check available space in advance, to avoid "disk full" errors during - staging of very large messages. - - - - - The sender MUST accurately fill the content-size field. Zero-length content - is permitted. - - - - - - - - This method confirms that the recipient is ready to accept staged data. If the - message was already partially-staged at a previous time the recipient will report - the number of octets already staged. - - - - - - - - - - The amount of previously-staged content in octets. For a new message this will - be zero. - - - - - The sender MUST start sending data from this octet offset in the message, - counting from zero. - - - - - - - The recipient MAY decide how long to hold partially-staged content and MAY - implement staging by always discarding partially-staged content. However if - it uses the file content type it MUST support the staging methods. - - - - - - - - - - This method stages the message, sending the message content to the recipient from - the octet offset specified in the Open-Ok method. - - - - - - - - - - - This method publishes a staged file message to a specific exchange. The file message - will be routed to queues as defined by the exchange configuration and distributed to - any active consumers when the transaction, if any, is committed. - - - - - - - - The client MUST provide a valid access ticket giving "write" access rights - to the access realm for the exchange. - - - - - - - Specifies the name of the exchange to publish to. The exchange name can be - empty, meaning the default exchange. If the exchange name is specified, and that - exchange does not exist, the server will raise a channel exception. - - - - - The server MUST accept a blank exchange name to mean the default exchange. - - - - - - If the exchange was declared as an internal exchange, the server MUST - respond with a reply code 403 (access refused) and raise a channel - exception. - - - - - - - - The exchange MAY refuse file content in which case it MUST respond with a - reply code 540 (not implemented) and raise a channel exception. - - - - - - - Specifies the routing key for the message. The routing key is used for routing - messages depending on the exchange configuration. - - - - - - This flag tells the server how to react if the message cannot be routed to a - queue. If this flag is set, the server will return an unroutable message with a - Return method. If this flag is zero, the server silently drops the message. - - - - - The server SHOULD implement the mandatory flag. - - - - - - This flag tells the server how to react if the message cannot be routed to a - queue consumer immediately. If this flag is set, the server will return an - undeliverable message with a Return method. If this flag is zero, the server - will queue the message, but with no guarantee that it will ever be consumed. - - - - - The server SHOULD implement the immediate flag. - - - - - - This is the staging identifier of the message to publish. The message must have - been staged. Note that a client can send the Publish method asynchronously - without waiting for staging to finish. - - - - - - - This method returns an undeliverable message that was published with the "immediate" - flag set, or an unroutable message published with the "mandatory" flag set. The - reply code and text provide information about the reason that the message was - undeliverable. - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - Specifies the routing key name specified when the message was published. - - - - - - - - This method delivers a staged file message to the client, via a consumer. In the - asynchronous message delivery model, the client starts a consumer using the Consume - method, then the server responds with Deliver methods as and when messages arrive - for that consumer. - - - - - - The server SHOULD track the number of times a message has been delivered to - clients and when a message is redelivered a certain number of times - e.g. 5 - times - without being acknowledged, the server SHOULD consider the message to be - unprocessable (possibly causing client applications to abort), and move the - message to a dead letter queue. - - - - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - Specifies the routing key name specified when the message was published. - - - - - This is the staging identifier of the message to deliver. The message must have - been staged. Note that a server can send the Deliver method asynchronously - without waiting for staging to finish. - - - - - - - - - This method acknowledges one or more messages delivered via the Deliver method. The - client can ask to confirm a single message or a set of messages up to and including - a specific message. - - - - - - - - - If set to 1, the delivery tag is treated as "up to and including", so that the - client can acknowledge multiple messages with a single method. If set to zero, - the delivery tag refers to a single message. If the multiple field is 1, and the - delivery tag is zero, tells the server to acknowledge all outstanding messages. - - - - - The server MUST validate that a non-zero delivery-tag refers to an delivered - message, and raise a channel exception if this is not the case. - - - - - - - - - - This method allows a client to reject a message. It can be used to return - untreatable messages to their original queue. Note that file content is staged - before delivery, so the client will not use this method to interrupt delivery of a - large message. - - - - - The server SHOULD interpret this method as meaning that the client is unable to - process the message at this time. - - - - - - - - A client MUST NOT use this method as a means of selecting messages to process. A - rejected message MAY be discarded or dead-lettered, not necessarily passed to - another client. - - - - - - - - - - If this field is zero, the message will be discarded. If this bit is 1, the - server will attempt to requeue the message. - - - - - - The server MUST NOT deliver the message to the same client within the - context of the current channel. The recommended strategy is to attempt to - deliver the message to an alternative consumer, and if that is not possible, - to move the message to a dead-letter queue. The server MAY use more - sophisticated tracking to hold the message on the queue and redeliver it to - the same client at a later stage. - - - - - - - - - - - The stream class provides methods that support multimedia streaming. The stream class - uses the following semantics: one message is one packet of data; delivery is - unacknowledged and unreliable; the consumer can specify quality of service parameters - that the server can try to adhere to; lower-priority messages may be discarded in favour - of high priority messages. - - - - stream = C:QOS S:QOS-OK - / C:CONSUME S:CONSUME-OK - / C:CANCEL S:CANCEL-OK - / C:PUBLISH content - / S:RETURN - / S:DELIVER content - - - - - - - - The server SHOULD discard stream messages on a priority basis if the queue size - exceeds some configured limit. - - - - - - - The server MUST implement at least 2 priority levels for stream messages, where - priorities 0-4 and 5-9 are treated as two distinct levels. The server MAY implement - up to 10 priority levels. - - - - - - The server MUST implement automatic acknowledgements on stream content. That is, as - soon as a message is delivered to a client via a Deliver method, the server must - remove it from the queue. - - - - - - - - - - - - - - - - This method requests a specific quality of service. The QoS can be specified for the - current channel or for all channels on the connection. The particular properties and - semantics of a qos method always depend on the content class semantics. Though the - qos method could in principle apply to both peers, it is currently meaningful only - for the server. - - - - - - - - - The client can request that messages be sent in advance so that when the client - finishes processing a message, the following message is already held locally, - rather than needing to be sent down the channel. Prefetching gives a performance - improvement. This field specifies the prefetch window size in octets. May be set - to zero, meaning "no specific limit". Note that other prefetch limits may still - apply. - - - - - - Specifies a prefetch window in terms of whole messages. This field may be used - in combination with the prefetch-size field; a message will only be sent in - advance if both prefetch windows (and those at the channel and connection level) - allow it. - - - - - - Specifies a desired transfer rate in octets per second. This is usually - determined by the application that uses the streaming data. A value of zero - means "no limit", i.e. as rapidly as possible. - - - - - - The server MAY ignore the prefetch values and consume rates, depending on - the type of stream and the ability of the server to queue and/or reply it. - The server MAY drop low-priority messages in favour of high-priority - messages. - - - - - - - By default the QoS settings apply to the current channel only. If this field is - set, they are applied to the entire connection. - - - - - - - This method tells the client that the requested QoS levels could be handled by the - server. The requested QoS applies to all active consumers until a new QoS is - defined. - - - - - - - - - - This method asks the server to start a "consumer", which is a transient request for - messages from a specific queue. Consumers last as long as the channel they were - created on, or until the client cancels them. - - - - - The server SHOULD support at least 16 consumers per queue, unless the queue was - declared as private, and ideally, impose no limit except as defined by available - resources. - - - - - - Streaming applications SHOULD use different channels to select different - streaming resolutions. AMQP makes no provision for filtering and/or transforming - streams except on the basis of priority-based selective delivery of individual - messages. - - - - - - - - - - The client MUST provide a valid access ticket giving "read" access rights to - the realm for the queue. - - - - - - - Specifies the name of the queue to consume from. If the queue name is null, - refers to the current queue for the channel, which is the last declared queue. - - - - - If the client did not previously declare a queue, and the queue name in this - method is empty, the server MUST raise a connection exception with reply - code 530 (not allowed). - - - - - - - Specifies the identifier for the consumer. The consumer tag is local to a - connection, so two clients can use the same consumer tags. If this field is - empty the server will generate a unique tag. - - - - - - The tag MUST NOT refer to an existing consumer. If the client attempts to - create two consumers with the same non-empty tag the server MUST raise a - connection exception with reply code 530 (not allowed). - - - - - - - - - Request exclusive consumer access, meaning only this consumer can access the - queue. - - - - - - - If the server cannot grant exclusive access to the queue when asked, - - because there are other consumers active - it MUST raise a channel exception - with return code 405 (resource locked). - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - A set of filters for the consume. The syntax and semantics - of these filters depends on the providers implementation. - - - - - - - This method provides the client with a consumer tag which it may use in methods that - work with the consumer. - - - - - - Holds the consumer tag specified by the client or provided by the server. - - - - - - - - This method cancels a consumer. Since message delivery is asynchronous the client - may continue to receive messages for a short while after cancelling a consumer. It - may process or discard these as appropriate. - - - - - - - - - - - If set, the server will not respond to the method. The client should not wait - for a reply method. If the server could not complete the method it will raise a - channel or connection exception. - - - - - - This method confirms that the cancellation was completed. - - - - - - - - - - - This method publishes a message to a specific exchange. The message will be routed - to queues as defined by the exchange configuration and distributed to any active - consumers as appropriate. - - - - - - - - The client MUST provide a valid access ticket giving "write" access rights - to the access realm for the exchange. - - - - - - - Specifies the name of the exchange to publish to. The exchange name can be - empty, meaning the default exchange. If the exchange name is specified, and that - exchange does not exist, the server will raise a channel exception. - - - - - The server MUST accept a blank exchange name to mean the default exchange. - - - - - - If the exchange was declared as an internal exchange, the server MUST - respond with a reply code 403 (access refused) and raise a channel - exception. - - - - - - The exchange MAY refuse stream content in which case it MUST respond with a - reply code 540 (not implemented) and raise a channel exception. - - - - - - - Specifies the routing key for the message. The routing key is used for routing - messages depending on the exchange configuration. - - - - - - This flag tells the server how to react if the message cannot be routed to a - queue. If this flag is set, the server will return an unroutable message with a - Return method. If this flag is zero, the server silently drops the message. - - - - - The server SHOULD implement the mandatory flag. - - - - - - This flag tells the server how to react if the message cannot be routed to a - queue consumer immediately. If this flag is set, the server will return an - undeliverable message with a Return method. If this flag is zero, the server - will queue the message, but with no guarantee that it will ever be consumed. - - - - - The server SHOULD implement the immediate flag. - - - - - - - This method returns an undeliverable message that was published with the "immediate" - flag set, or an unroutable message published with the "mandatory" flag set. The - reply code and text provide information about the reason that the message was - undeliverable. - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - Specifies the routing key name specified when the message was published. - - - - - - - - This method delivers a message to the client, via a consumer. In the asynchronous - message delivery model, the client starts a consumer using the Consume method, then - the server responds with Deliver methods as and when messages arrive for that - consumer. - - - - - - - - - - - Specifies the name of the exchange that the message was originally published to. - - - - - - Specifies the name of the queue that the message came from. Note that a single - channel can start many consumers on different queues. - - - - - - - - - - - Standard transactions provide so-called "1.5 phase commit". We can ensure that work is - never lost, but there is a chance of confirmations being lost, so that messages may be - resent. Applications that use standard transactions must be able to detect and ignore - duplicate messages. - - - - - - - An client using standard transactions SHOULD be able to track all messages received - within a reasonable period, and thus detect and reject duplicates of the same - message. It SHOULD NOT pass these to the application layer. - - - - - tx = C:SELECT S:SELECT-OK - / C:COMMIT S:COMMIT-OK - / C:ROLLBACK S:ROLLBACK-OK - - - - - - - - - - This method sets the channel to use standard transactions. The client must use this - method at least once on a channel before using the Commit or Rollback methods. - - - - - - - - This method confirms to the client that the channel was successfully set to use - standard transactions. - - - - - - - - - This method commits all messages published and acknowledged in the current - transaction. A new transaction starts immediately after a commit. - - - - - - - - This method confirms to the client that the commit succeeded. Note that if a commit - fails, the server raises a channel exception. - - - - - - - - - This method abandons all messages published and acknowledged in the current - transaction. A new transaction starts immediately after a rollback. - - - - - - - - This method confirms to the client that the rollback succeeded. Note that if an - rollback fails, the server raises a channel exception. - - - - - - - - - - Distributed transactions provide so-called "2-phase commit". The AMQP distributed - transaction model supports the X-Open XA architecture and other distributed transaction - implementations. The Dtx class assumes that the server has a private communications - channel (not AMQP) to a distributed transaction coordinator. - - - - dtx = C:SELECT S:SELECT-OK - C:START S:START-OK - - - - - - - - - - This method sets the channel to use distributed transactions. The client must use - this method at least once on a channel before using the Start method. - - - - - - - - This method confirms to the client that the channel was successfully set to use - distributed transactions. - - - - - - - - - This method starts a new distributed transaction. This must be the first method on a - new channel that uses the distributed transaction mode, before any methods that - publish or consume messages. - - - - - - The distributed transaction key. This identifies the transaction so that the - AMQP server can coordinate with the distributed transaction coordinator. - - - - - - - - This method confirms to the client that the transaction started. Note that if a - start fails, the server raises a channel exception. - - - - - - - - - - The tunnel methods are used to send blocks of binary data - which can be serialised AMQP - methods or other protocol frames - between AMQP peers. - - - - tunnel = C:REQUEST - / S:REQUEST - - - - - - - - - - - - - - - - This method tunnels a block of binary data, which can be an encoded - AMQP method or other data. The binary data is sent as the content for - the Tunnel.Request method. - - - - - This field table holds arbitrary meta-data that the sender needs to - pass to the recipient. - - - - - - - - - - [WORK IN PROGRESS] The message class provides methods that support an industry-standard messaging model. - - - - message = C:QOS S:OK - / C:CONSUME S:OK - / C:CANCEL S:OK - / C:TRANSFER ( S:OK / S:REJECT ) - / S:TRANSFER ( C:OK / C:REJECT ) - / C:GET ( S:OK / S:EMPTY ) - / C:RECOVER S:OK - / C:OPEN S:OK - / S:OPEN C:OK - / C:APPEND S:OK - / S:APPEND C:OK - / C:CLOSE S:OK - / S:CLOSE C:OK - / C:CHECKPOINT S:OK - / S:CHECKPOINT C:OK - / C:RESUME S:OFFSET - / S:RESUME C:OFFSET - - - - - - - - The server SHOULD respect the persistent property of messages - and SHOULD make a best-effort to hold persistent mess ages on - a reliable storage mechanism. - - - Send a persistent message to queue, stop server, restart - server and then verify whether message is still present. - Assumes that queues are durable. Persistence without durable - queues makes no sense. - - - - - - The server MUST NOT discard a persistent message in case of a - queue overflow. - - - Create a queue overflow situation with persistent messages and - verify that messages do not get lost (presumably the server - will write them to disk). - - - - - - The server MAY use the Channel.Flow method to slow or stop a - message publisher when necessary. - - - Create a queue overflow situation with non-persistent messages - and verify whether the server responds with Channel.Flow or - not. Repeat with persistent messages. - - - - - - The server MAY overflow non-persistent messages to persistent - storage. - - - - - - The server MAY discard or dead-letter non-persistent messages - on a priority basis if the queue size exceeds some configured - limit. - - - - - - The server MUST implement at least 2 priority levels for - messages, where priorities 0-4 and 5-9 are treated as two - distinct levels. - - - Send a number of priority 0 messages to a queue. Send one - priority 9 message. Consume messages from the queue and verify - that the first message received was priority 9. - - - - - - The server MAY implement up to 10 priority levels. - - - Send a number of messages with mixed priorities to a queue, so - that all priority values from 0 to 9 are exercised. A good - scenario would be ten messages in low-to-high priority. - Consume from queue and verify how many priority levels emerge. - - - - - - The server MUST deliver messages of the same priority in order - irrespective of their individual persistence. - - - Send a set of messages with the same priority but different - persistence settings to a queue. Consume and verify that - messages arrive in same order as originally published. - - - - - - The server MUST support automatic acknowledgements on - messages, i.e. consumers with the no-ack field set to FALSE. - - - Create a queue and a consumer using automatic - acknowledgements. Publish a set of messages to the queue. - Consume the messages and verify that all messages are - received. - - - - - - The server MUST support explicit acknowledgements on messages, - i.e. consumers with the no-ack field set to TRUE. - - - Create a queue and a consumer using explicit acknowledgements. - Publish a set of messages to the queue. Consume the messages - but acknowledge only half of them. Disconnect and reconnect, - and consume from the queue. Verify that the remaining messages - are received. - - - - - - - - [WORK IN PROGRESS] This method transfers a message between two peers. When a - client uses this method to publish a message to a broker, the - destination identifies a specific exchange. The message will - then be routed to queues as defined by the exchange - configuration and distributed to any active consumers when the - transaction, if any, is committed. - - In the asynchronous message delivery model, the client starts - a consumer using the Consume method and passing in a - destination, then the broker responds with transfer methods to - the specified destination as and when messages arrive for that - consumer. - - If synchronous message delivery is required, the client may - issue a get request which on success causes a single message - to be transferred to the specified destination. - - Message acknowledgement is signalled by the return result of - this method. - - - - - The recipient MUST NOT return ok before the message has been - processed as defined by the QoS settings. - - - - - - - - - - - - The client MUST provide a valid access ticket giving "write" access rights - to the access realm for the exchange. - - - - - - - Specifies the destination to which the message is to be - transferred. The destination can be empty, meaning the - default exchange or consumer. If the destination is - specified, and that exchange or consumer does not exist, the - peer must raise a channel exception. - - - - - The server MUST accept a blank destination to mean the - default exchange. - - - - - - If the destination refers to an internal exchange, the - server MUST raise a channel exception with a reply code - 403 (access refused). - - - - - - A destination MAY refuse message content in which case it - MUST raise a channel exception with reply code 540 (not - implemented). - - - - - - - - - This flag tells the server how to react if the message - cannot be routed to a queue consumer immediately. If this - flag is set, the server will reject the message. If this - flag is zero, the server will queue the message, but with no - guarantee that it will ever be consumed. - - - - The server SHOULD implement the immediate flag. - - - - - - - If this is set to a non zero value then a message expiration - time will be computed based on the current time plus this - value. Messages that live longer than their expiration time - will be discarded (or dead lettered). - - - - If a message is transfered between brokers before delivery - to a final consumer the ttl should be decremented before - peer to peer transfer and both timestamp and expiration - should be cleared. - - - - - - - - - Set on arrival by the broker. - - - - - - The expiration header assigned by the broker. After - receiving the message the broker sets expiration to the sum - of the ttl specified in the publish method and the current - time. (ttl = expiration - timestamp) - - - - - - - - - - - - - - - - - - - - - - - - [WORK IN PROGRESS] This method asks the server to start a "consumer", which is a transient request for - messages from a specific queue. Consumers last as long as the channel they were - created on, or until the client cancels them. - - - - - The server SHOULD support at least 16 consumers per queue, and ideally, impose - no limit except as defined by available resources. - - - Create a queue and create consumers on that queue until the server closes the - connection. Verify that the number of consumers created was at least sixteen - and report the total number. - - - - - - - - - - The client MUST provide a valid access ticket giving "read" access rights to - the realm for the queue. - - - Attempt to create a consumer with an invalid (non-zero) access ticket. - - - - - - - Specifies the name of the queue to consume from. If the queue name is null, - refers to the current queue for the channel, which is the last declared queue. - - - - If the queue name is empty the client MUST have previously declared a - queue using this channel. - - - Attempt to create a consumer with an empty queue name and no previously - declared queue on the channel. - - - - - - - Specifies the destination for the consumer. The destination is local to a - connection, so two clients can use the same destination. - - - - The client MUST NOT specify a destination that refers to an existing consumer. - - - Attempt to create two consumers with the same non-empty destination. - - - - - The destination is valid only within the channel from which the - consumer was created. I.e. a client MUST NOT create a consumer in one - channel and then use it in another. - - - Attempt to create a consumer in one channel, then use in another channel, - in which consumers have also been created (to test that the server uses - unique destinations). - - - - - - - - - - - Request exclusive consumer access, meaning only this consumer can access the - queue. - - - - - The client MAY NOT gain exclusive access to a queue that already has - active consumers. - - - Open two connections to a server, and in one connection create a shared - (non-exclusive) queue and then consume from the queue. In the second - connection attempt to consume from the same queue using the exclusive - option. - - - - - - - A set of filters for the consume. The syntax and semantics - of these filters depends on the providers implementation. - - - - - - - - - [WORK IN PROGRESS] This method cancels a consumer. This does not affect already delivered - messages, but it does mean the server will not send any more messages for - that consumer. The client may receive an arbitrary number of messages in - between sending the cancel method and receiving the cancel-ok reply. - - - - - If the queue does not exist the server MUST ignore the cancel method, so - long as the consumer tag is valid for that channel. - - - - - - - - - - - - - - [WORK IN PROGRESS] This method provides a direct access to the messages in a queue using a synchronous - dialogue that is designed for specific types of application where synchronous - functionality is more important than performance. - - - - - - - - - - The client MUST provide a valid access ticket giving "read" access rights to - the realm for the queue. - - - - - - Specifies the name of the queue to consume from. If the queue name is null, - refers to the current queue for the channel, which is the last declared queue. - - - - If the client did not previously declare a queue, and the queue name in this - method is empty, the server MUST raise a connection exception with reply - code 530 (not allowed). - - - - - - - On normal completion of the get request (i.e. a response of - ok). A message will be transferred to the supplied destination. - - - - - - - - - - - [WORK IN PROGRESS] This method asks the broker to redeliver all unacknowledged - messages on a specified channel. Zero or more messages may be - redelivered. This method is only allowed on non-transacted - channels. - - - - - The server MUST set the redelivered flag on all messages - that are resent. - - - - - - The server MUST raise a channel exception if this is called - on a transacted channel. - - - - - - - - - If this field is zero, the message will be redelivered to - the original recipient. If this bit is 1, the server will - attempt to requeue the message, potentially then delivering - it to an alternative subscriber. - - - - - - - - - [WORK IN PROGRESS] This method creates a reference. A references provides a means - to send a message body into a temporary area at the recipient - end and then deliver the message by referring to this - temporary area. This is how the protocol handles large message - transfers. - - The scope of a ref is defined to be between calls to - open (or resume) and close. Between these points it is valid - for a ref to be used from any content data type, and so the - receiver must hold onto its contents. Should the channel be - closed when a ref is still in scope, the receiver may discard - its contents (unless it is checkpointed). A ref that is in - scope is considered open. - - - - - - - - - - The recipient MUST generate an error if the reference is - currently open (in scope). - - - - - - - - - - [WORK IN PROGRESS] This method signals the recipient that no more data will be - appended to the reference. - - - - - A recipient CANNOT acknowledge a message until its reference - is closed (not in scope). - - - - - - - - - - - The recipient MUST generate an error if the reference was - not previously open (in scope). - - - - - - - - - - [WORK IN PROGRESS] This method appends data to a reference. - - - - - - - - - - The recipient MUST generate an error if the reference is - not open (not in scope). - - - - - - - - - - - [WORK IN PROGRESS] This method provides a means to checkpoint large message - transfer. The sender may ask the recipient to checkpoint the - contents of a reference using the supplied identifier. The - sender may then resume the transfer at a later point. It is at - the discretion of the recipient how much data to save with the - checkpoint, and the sender MUST honour the offset returned by - the resume method. - - - - - - - - - - The recipient MUST generate an error if the reference is - not open (not in scope). - - - - - - This is the checkpoint identifier. This is an arbitrary - string chosen by the sender. For checkpointing to work - correctly the sender must use the same checkpoint identifier - when resuming the message. A good choice for the checkpoint - identifier would be the SHA1 hash of the message properties - data (including the original filename, revised time, etc.). - - - - - - - - - [WORK IN PROGRESS] This method resumes a reference from the last checkpoint. A - reference is considered to be open (in scope) after a resume - even though it will not have been opened via the open method - during this session. - - - - - - - - - - The recipient MUST generate an error if the reference is - currently open (in scope). - - - - - - - - - - - [WORK IN PROGRESS] This method requests a specific quality of service. The QoS can be specified for the - current channel or for all channels on the connection. The particular properties and - semantics of a qos method always depend on the content class semantics. Though the - qos method could in principle apply to both peers, it is currently meaningful only - for the server. - - - - - - - - The client can request that messages be sent in advance so that when the client - finishes processing a message, the following message is already held locally, - rather than needing to be sent down the channel. Prefetching gives a performance - improvement. This field specifies the prefetch window size in octets. The server - will send a message in advance if it is equal to or smaller in size than the - available prefetch size (and also falls into other prefetch limits). May be set - to zero, meaning "no specific limit", although other prefetch limits may still - apply. The prefetch-size is ignored if the no-ack option is set. - - - - The server MUST ignore this setting when the client is not processing any - messages - i.e. the prefetch size does not limit the transfer of single - messages to a client, only the sending in advance of more messages while - the client still has one or more unacknowledged messages. - - - Define a QoS prefetch-size limit and send a single message that exceeds - that limit. Verify that the message arrives correctly. - - - - - - - Specifies a prefetch window in terms of whole messages. This field may be used - in combination with the prefetch-size field; a message will only be sent in - advance if both prefetch windows (and those at the channel and connection level) - allow it. The prefetch-count is ignored if the no-ack option is set. - - - - The server may send less data in advance than allowed by the client's - specified prefetch windows but it MUST NOT send more. - - - Define a QoS prefetch-size limit and a prefetch-count limit greater than - one. Send multiple messages that exceed the prefetch size. Verify that - no more than one message arrives at once. - - - - - - - By default the QoS settings apply to the current channel only. If this field is - set, they are applied to the entire connection. - - - - - - - - - - [WORK IN PROGRESS] Signals the normal completion of a method. - - - - - - - - [WORK IN PROGRESS] Signals that a queue does not contain any messages. - - - - - - - - [WORK IN PROGRESS] This response rejects a message. A message may be rejected for - a number of reasons. - - - - - - - - - - [WORK IN PROGRESS] Returns the data offset into a reference body. - - - - - - - - - diff --git a/python/qpid/specs_config.py b/python/qpid/specs_config.py index 578f141b4e..58021320f6 100644 --- a/python/qpid/specs_config.py +++ b/python/qpid/specs_config.py @@ -20,6 +20,6 @@ import os AMQP_SPEC_DIR=os.path.join(os.path.dirname(os.path.abspath(__file__)), "specs") -amqp_spec = os.path.join(AMQP_SPEC_DIR, "amqp.0-10-qpid-errata.xml") -amqp_spec_0_8 = os.path.join(AMQP_SPEC_DIR, "amqp.0-8.xml") -amqp_spec_0_9 = os.path.join(AMQP_SPEC_DIR, "amqp.0-9.xml") +amqp_spec = os.path.join(AMQP_SPEC_DIR, "amqp-0-10-qpid-errata.xml") +amqp_spec_0_8 = os.path.join(AMQP_SPEC_DIR, "amqp-0-8.xml") +amqp_spec_0_9 = os.path.join(AMQP_SPEC_DIR, "amqp-0-9.xml") diff --git a/python/setup.py b/python/setup.py index cb06444240..bdd04d4ddf 100755 --- a/python/setup.py +++ b/python/setup.py @@ -270,22 +270,25 @@ class build_py(preprocessor, _build_py): else: return None, None +def pclfile(xmlfile): + return "%s.pcl" % os.path.splitext(xmlfile)[0] + class install_lib(_install_lib): def get_outputs(self): outputs = _install_lib.get_outputs(self) extra = [] for of in outputs: - if os.path.basename(of) == "amqp.0-10-qpid-errata.xml": - extra.append("%s.ops.pcl" % of) + if os.path.basename(of) == "amqp-0-10-qpid-errata.xml": + extra.append(pclfile(of)) return outputs + extra def install(self): outfiles = _install_lib.install(self) extra = [] for of in outfiles: - if os.path.basename(of) == "amqp.0-10-qpid-errata.xml": - tgt = "%s.ops.pcl" % of + if os.path.basename(of) == "amqp-0-10-qpid-errata.xml": + tgt = pclfile(of) if self.force or newer(of, tgt): log.info("caching %s to %s" % (of, os.path.basename(tgt))) if not self.dry_run: -- cgit v1.2.1