AnyEvent-RabbitMQ

 view release on metacpan or  search on metacpan

share/fixed_amqp0-8.xml  view on Meta::CPAN

Java, all Java-based trademarks and OpenOffice.org are trademarks of
Sun Microsystems, Inc. in the United States, other countries, or both.

Other company, product, or service names may be trademarks or service
marks of others.

Links to full AMQP specification:
=================================
http://www.envoytech.org/spec/amq/
http://www.iona.com/opensource/amqp/
http://www.redhat.com/solutions/specifications/amqp/
http://www.twiststandards.org/tiki-index.php?page=AMQ
http://www.imatix.com/amqp

-->

<amqp major="8" minor="0" port="5672" comment="AMQ protocol 0.80">
    AMQ Protocol 0.80
<!--
======================================================
==       CONSTANTS
======================================================
-->
  <constant name="frame method" value="1"/>
  <constant name="frame header" value="2"/>
  <constant name="frame body" value="3"/>
  <constant name="frame oob method" value="4"/>
  <constant name="frame oob header" value="5"/>
  <constant name="frame oob body" value="6"/>
  <constant name="frame trace" value="7"/>
  <constant name="frame heartbeat" value="8"/>
  <constant name="frame min size" value="4096"/>
  <constant name="frame end" value="206"/>
  <constant name="reply success" value="200">
  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.
</constant>
  <constant name="not delivered" value="310" class="soft 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.
</constant>
  <constant name="content too large" value="311" class="soft error">
  The client attempted to transfer content larger than the server
  could accept at the present time.  The client may retry at a later
  time.
</constant>
  <constant name="connection forced" value="320" class="hard error">
  An operator intervened to close the connection for some reason.
  The client may retry at some later date.
</constant>
  <constant name="invalid path" value="402" class="hard error">
  The client tried to work with an unknown virtual host or cluster.
</constant>
  <constant name="access refused" value="403" class="soft error">
  The client attempted to work with a server entity to which it has
  no  due to security settings.
</constant>
  <constant name="not found" value="404" class="soft error">
  The client attempted to work with a server entity that does not exist.
</constant>
  <constant name="resource locked" value="405" class="soft error">
  The client attempted to work with a server entity to which it has
  no access because another client is working with it.
</constant>
  <constant name="frame error" value="501" class="hard error">
  The client sent a malformed frame that the server could not decode.
  This strongly implies a programming error in the client.
</constant>
  <constant name="syntax error" value="502" class="hard error">
  The client sent a frame that contained illegal values for one or more
  fields.  This strongly implies a programming error in the client.
</constant>
  <constant name="command invalid" value="503" class="hard error">
  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.
</constant>
  <constant name="channel error" value="504" class="hard error">
  The client attempted to work with a channel that had not been
  correctly opened.  This most likely indicates a fault in the client
  layer.
</constant>
  <constant name="resource error" value="506" class="hard error">
  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.
</constant>
  <constant name="not allowed" value="530" class="hard error">
  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.
</constant>
  <constant name="not implemented" value="540" class="hard error">
  The client tried to use functionality that is not implemented in the
  server.
</constant>
  <constant name="internal error" value="541" class="hard error">
  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.
</constant>
  <!--
======================================================
==       DOMAIN TYPES
======================================================
-->
  <domain name="access ticket" type="short">
    access ticket granted by server
    <doc>
    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.
    </doc>
    <assert check="ne" value="0"/>
  </domain>
  <domain name="class id" type="short"/>
  <domain name="consumer tag" type="shortstr">
    consumer tag

share/fixed_amqp0-8.xml  view on Meta::CPAN

  </doc>
      <rule implement="SHOULD">
        <test>amq_exchange_23</test>
    The server SHOULD support a minimum of 16 exchanges per virtual host
    and ideally, impose no limit except as defined by available resources.
  </rule>
      <chassis name="server" implement="MUST"/>
      <response name="declare-ok"/>
      <field name="ticket" domain="access ticket">
        <doc>
      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.
    </doc>
        <rule implement="MUST">
      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.
    </rule>
      </field>
      <field name="exchange" domain="exchange name">
        <rule implement="MUST">
          <test>amq_exchange_15</test>
      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).
    </rule>
        <assert check="regexp" value="^[a-zA-Z0-9-_.:]+$"/>
      </field>
      <field name="type" type="shortstr">
    exchange type
    <doc>
      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.
    </doc>
        <rule implement="MUST">
          <test>amq_exchange_16</test>
      If the exchange already exists with a different type, the server
      MUST raise a connection exception with a reply code 507 (not allowed).
    </rule>
        <rule implement="MUST">
          <test>amq_exchange_18</test>
      If the server does not support the requested exchange type it MUST
      raise a connection exception with a reply code 503 (command invalid).
    </rule>
        <assert check="regexp" value="^[a-zA-Z0-9-_.:]+$"/>
      </field>
      <field name="passive" type="bit">
    do not create exchange
    <doc>
    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.
    </doc>
        <rule implement="MUST">
          <test>amq_exchange_05</test>
      If set, and the exchange does not already exist, the server MUST
      raise a channel exception with reply code 404 (not found).
    </rule>
      </field>
      <field name="durable" type="bit">
    request a durable exchange
    <doc>
      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.
    </doc>
        <rule implement="MUST">
          <test>amq_exchange_24</test>
      The server MUST support both durable and transient exchanges.
    </rule>
        <rule implement="MUST">
      The server MUST ignore the durable field if the exchange already
      exists.
    </rule>
      </field>
      <field name="auto delete" type="bit">
    auto-delete when unused
    <doc>
      If set, the exchange is deleted when all queues have finished
      using it.
    </doc>
        <rule implement="SHOULD">
          <test>amq_exchange_02</test>
      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.
    </rule>
        <rule implement="MUST">
          <test>amq_exchange_25</test>
      The server MUST ignore the auto-delete field if the exchange already
      exists.
    </rule>
      </field>
      <field name="internal" type="bit">
    create internal exchange
    <doc>
      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.
    </doc>
      </field>

  <field name = "nowait" type = "bit">
    do not send a reply method
    <doc>
    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.
    </doc>
  </field>

      <field name="arguments" type="table">
    arguments for declaration
    <doc>

share/fixed_amqp0-8.xml  view on Meta::CPAN

  content class.
</rule>
    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    <method name="declare" synchronous="1" index="10">
  declare queue, create if needed
  <doc>
    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.
  </doc>
      <rule implement="MUST">
        <test>amq_queue_34</test>
    The server MUST create a default binding for a newly-created queue
    to the default exchange, which is an exchange of type 'direct'.
  </rule>
      <rule implement="SHOULD">
        <test>amq_queue_35</test>
    The server SHOULD support a minimum of 256 queues per virtual host
    and ideally, impose no limit except as defined by available resources.
  </rule>
      <chassis name="server" implement="MUST"/>
      <response name="declare-ok"/>
      <field name="ticket" domain="access ticket">
        <doc>
      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.
    </doc>
        <doc>
      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.
    </doc>
      </field>
      <field name="queue" domain="queue name">
        <rule implement="MAY">
          <test>amq_queue_10</test>
      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.
    </rule>
        <rule implement="MUST">
          <test>amq_queue_32</test>
      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).
    </rule>
        <assert check="regexp" value="^[a-zA-Z0-9-_.:]*$"/>
      </field>
      <field name="passive" type="bit">
    do not create queue
    <doc>
    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.
    </doc>
        <rule implement="MUST">
          <test>amq_queue_05</test>
      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.
    </rule>
      </field>
      <field name="durable" type="bit">
    request a durable queue
    <doc>
      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.
    </doc>
        <rule implement="MUST">
          <test>amq_queue_03</test>
      The server MUST recreate the durable queue after a restart.
    </rule>
        <rule implement="MUST">
          <test>amq_queue_36</test>
      The server MUST support both durable and transient queues.
    </rule>
        <rule implement="MUST">
          <test>amq_queue_37</test>
      The server MUST ignore the durable field if the queue already
      exists.
    </rule>
      </field>
      <field name="exclusive" type="bit">
    request an exclusive queue
    <doc>
      Exclusive queues may only be consumed from by the current connection.
      Setting the 'exclusive' flag always implies 'auto-delete'.
    </doc>
        <rule implement="MUST">
          <test>amq_queue_38</test>
      The server MUST support both exclusive (private) and non-exclusive
      (shared) queues.
    </rule>
        <rule implement="MUST">
          <test>amq_queue_04</test>
      The server MUST raise a channel exception if 'exclusive' is specified
      and the queue already exists and is owned by a different connection.
    </rule>
      </field>
      <field name="auto delete" type="bit">
    auto-delete queue when unused
    <doc>
      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.
    </doc>
        <rule implement="SHOULD">
          <test>amq_queue_02</test>
      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

share/fixed_amqp0-8.xml  view on Meta::CPAN

  <doc>
    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.
  </doc>
      <rule implement="MUST">
        <test>amq_queue_25</test>
    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.
  </rule>
      <rule implement="MUST">
        <test>amq_queue_39</test>
    If a bind fails, the server MUST raise a connection exception.
  </rule>
      <rule implement="MUST">
        <test>amq_queue_12</test>
    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.
  </rule>
      <rule implement="SHOULD">
        <test>amq_queue_13</test>
    Bindings for durable queues are automatically durable and the
    server SHOULD restore such bindings after a server restart.
  </rule>
      <rule implement="MUST">
        <test>amq_queue_17</test>
    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).
  </rule>
      <rule implement="SHOULD">
        <test>amq_queue_40</test>
    The server SHOULD support at least 4 bindings per queue, and
    ideally, impose no limit except as defined by available resources.
  </rule>
      <chassis name="server" implement="MUST"/>
      <response name="bind-ok"/>
      <field name="ticket" domain="access ticket">
        <doc>
      The client provides a valid access ticket giving "active"
      access rights to the queue's access realm.
    </doc>
      </field>

  <field name = "queue" domain = "queue name">
    <doc>
      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.
    </doc>
    <doc name = "rule">
      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).
    </doc>
    <doc name = "rule" test = "amq_queue_26">
      If the queue does not exist the server MUST raise a channel exception
      with reply code 404 (not found).
    </doc>
  </field>

  <field name="exchange" domain="exchange name">
          The name of the exchange to bind to.
          <rule implement="MUST">
          <test>amq_queue_14</test>
      If the exchange does not exist the server MUST raise a channel
      exception with reply code 404 (not found).
    </rule>
      </field>
      <field name="routing key" type="shortstr">
     message routing key
    <doc>
      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.
    </doc>
  </field>

  <field name = "nowait" type = "bit">
    do not send a reply method
    <doc>
    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.
    </doc>
  </field>

  <field name="arguments" type="table">
    arguments for binding
    <doc>
      A set of arguments for the binding.  The syntax and semantics of
      these arguments depends on the exchange class.
    </doc>
      </field>
    </method>
    <method name="bind-ok" synchronous="1" index="21">
  confirm bind successful
  <doc>
    This method confirms that the bind was successful.
  </doc>
      <chassis name="client" implement="MUST"/>
    </method>

    <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    <method name="unbind" synchronous="1" index="50">
      unbind a queue from an exchange
      <doc>This method unbinds a queue from an exchange.</doc>
      <rule implement="MUST">
        If a unbind fails, the server MUST raise a connection exception.
      </rule>
      <chassis name="server" implement="MUST"/>
      <response name="unbind-ok"/>

      <field name="ticket" domain="access ticket">
        <doc>
          The client provides a valid access ticket giving "active"
          access rights to the queue's access realm.
        </doc>
      </field>

      <field name="queue" domain="queue name">
        <doc>Specifies the name of the queue to unbind.</doc>
      </field>



( run in 2.127 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )