http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1a8679bf/content/releases/qpid-cpp-trunk/cpp-broker/book/AMQP-Compatibility.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-cpp-trunk/cpp-broker/book/AMQP-Compatibility.html b/content/releases/qpid-cpp-trunk/cpp-broker/book/AMQP-Compatibility.html deleted file mode 100644 index 255f211..0000000 --- a/content/releases/qpid-cpp-trunk/cpp-broker/book/AMQP-Compatibility.html +++ /dev/null @@ -1,536 +0,0 @@ - - - - - AMQP-Compatibility.html - Apache Qpid™ - - - - - - - - - - - - - -
-
- Menu - - Search - - -
- - - - - -
- - -
-

1.9.  - AMQP compatibility -

- Qpid provides the most complete and compatible implementation - of AMQP. And is the most aggressive in implementing the latest - version of the specification. -

- There are two brokers: -

  • C++ with support for AMQP 0-10

  • Java with support for AMQP 0-8 and 0-9 (0-10 planned)

- There are client libraries for C++, Java (JMS), .Net (written in - C#), python and ruby. -

  • All clients support 0-10 and interoperate with the C++ - broker. -

  • The JMS client supports 0-8, 0-9 and 0-10 and interoperates - with both brokers. -

  • The python and ruby clients will also support all versions, - but the API is dynamically driven by the specification used and - so differs between versions. To work with the Java broker you - must use 0-8 or 0-9, to work with the C++ broker you must use - 0-10. -

  • There are two separate C# clients, one for 0-8 that - interoperates with the Java broker, one for 0-10 that - inteoperates with the C++ broker. -

- QMF Management is supported in Ruby, Python, C++, and via QMan - for Java JMX & WS-DM. -

1.9.1.  - AMQP - Compatibility of Qpid releases: -

- Qpid implements the AMQP Specification, and as the specification - has progressed Qpid is keeping up with the updates. This means - that different Qpid versions support different versions of AMQP. - Here is a simple guide on what use. -

- Here is a matrix that describes the different versions supported - by each release. The status symbols are interpreted as follows: -

Y

supported

N

unsupported

IP

in progress

P

planned

Table 1.22. AMQP Version Support by Qpid Release

- Component - - Spec - -   - -   - -   - -   -
-   - -   - - M2.1 - - M3 - - M4 - - 0.5 -
- java client - - 0-10 - -   - - Y - - Y - - Y -
-   - - 0-9 - - Y - - Y - - Y - - Y -
-   - - 0-8 - - Y - - Y - - Y - - Y -
- java broker - - 0-10 - -   - -   - -   - - P -
-   - - 0-9 - - Y - - Y - - Y - - Y -
-   - - 0-8 - - Y - - Y - - Y - - Y -
- c++ client/broker - - 0-10 - -   - - Y - - Y - - Y -
-   - - 0-9 - - Y - -   - -   - -   -
- python client - - 0-10 - -   - - Y - - Y - - Y -
-   - - 0-9 - - Y - - Y - - Y - - Y -
-   - - 0-8 - - Y - - Y - - Y - - Y -
- ruby client - - 0-10 - -   - -   - - Y - - Y -
-   - - 0-8 - - Y - - Y - - Y - - Y -
- C# client - - 0-10 - -   - -   - - Y - - Y -
-   - - 0-8 - - Y - - Y - - Y - - Y -

1.9.2.  - Interop - table by AMQP specification version -

- Above table represented in another format. -

Table 1.23. AMQP Version Support - alternate format

-   - - release - - 0-8 - - 0-9 - - 0-10 -
- java client - - M3 M4 0.5 - - Y - - Y - - Y -
- java client - - M2.1 - - Y - - Y - - N -
- java broker - - M3 M4 0.5 - - Y - - Y - - N -
- java broker - - trunk - - Y - - Y - - P -
- java broker - - M2.1 - - Y - - Y - - N -
- c++ client/broker - - M3 M4 0.5 - - N - - N - - Y -
- c++ client/broker - - M2.1 - - N - - Y - - N -
- python client - - M3 M4 0.5 - - Y - - Y - - Y -
- python client - - M2.1 - - Y - - Y - - N -
- ruby client - - M3 M4 0.5 - - Y - - Y - - N -
- ruby client - - trunk - - Y - - Y - - P -
- C# client - - M3 M4 0.5 - - Y - - N - - N -
- C# client - - trunk - - Y - - N - - Y -

- -
- - - - -
-
-
- - http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1a8679bf/content/releases/qpid-cpp-trunk/cpp-broker/book/QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-cpp-trunk/cpp-broker/book/QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html b/content/releases/qpid-cpp-trunk/cpp-broker/book/QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html deleted file mode 100644 index fb53492..0000000 --- a/content/releases/qpid-cpp-trunk/cpp-broker/book/QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html +++ /dev/null @@ -1,375 +0,0 @@ - - - - - 1.10. Qpid Interoperability Documentation - Apache Qpid™ - - - - - - - - - - - - - -
-
- Menu - - Search - - -
- - - - - -
- - -
-

1.10. Qpid Interoperability Documentation

- This page documents the various interoperable features of the - Qpid clients. -

1.10.1.  - SASL -

- -

1.10.1.1.  - Standard - Mechanisms -

- http://en.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer#SASL_mechanisms -

- This table list the various SASL mechanisms that each component - supports. The version listed shows when this - functionality was added to the product. -

Table 1.24. SASL Mechanism Support

- Component - - ANONYMOUS - - CRAM-MD5 - - DIGEST-MD5 - - EXTERNAL - - GSSAPI/Kerberos - - PLAIN -
- C++ Broker - - M3[Section 1.10.1.1, “ - Standard - Mechanisms - ”] - - M3[Section 1.10.1.1, “ - Standard - Mechanisms - ”,Section 1.10.1.1, “ - Standard - Mechanisms - ”] - -   - -   - - M3[Section 1.10.1.1, “ - Standard - Mechanisms - ”,Section 1.10.1.1, “ - Standard - Mechanisms - ”] - - M1 -
- C++ Client - - M3[Section 1.10.1.1, “ - Standard - Mechanisms - ”] - -   - -   - -   - -   - - M1 -
- Java Broker - -   - - M1 - -   - -   - -   - - M1 -
- Java Client - -   - - M1 - -   - -   - -   - - M1 -
- .Net Client - - M2 - - M2 - - M2 - - M2 - -   - - M2 -
- Python Client - -   - -   - -   - -   - -   - - ? -
- Ruby Client - -   - -   - -   - -   - -   - - ? -

- 1: Support for these will be in M3 (currently available on - trunk). -

2: C++ Broker uses Cyrus SASL which - supports CRAM-MD5 and GSSAPI but these have not been tested yet -

1.10.1.2.  - Custom - Mechanisms -

- There have been some custom mechanisms added to our - implementations. -

Table 1.25. SASL Custom Mechanisms

- Component - - AMQPLAIN - - CRAM-MD5-HASHED -
- C++ Broker - -   - -   -
- C++ Client - -   - -   -
- Java Broker - - M1 - - M2 -
- Java Client - - M1 - - M2 -
- .Net Client - -   - -   -
- Python Client - - M2 - -   -
- Ruby Client - - M2 - -   -

AMQPLAIN

CRAM-MD5-HASHED

- The Java SASL implementations require that you have the password - of the user to validate the incoming request. This then means - that the user's password must be stored on disk. For this to be - secure either the broker must encrypt the password file or the - need for the password being stored must be removed. -

- The CRAM-MD5-HASHED SASL plugin removes the need for the plain - text password to be stored on disk. The mechanism defers all - functionality to the build in CRAM-MD5 module the only change is - on the client side where it generates the hash of the password - and uses that value as the password. This means that the Java - Broker only need store the password hash on the file system. - While a one way hash is not very secure compared to other forms - of encryption in environments where the having the password in - plain text is unacceptable this will provide and additional layer - to protect the password. In particular this offers some - protection where the same password may be shared amongst many - systems. It offers no real extra protection against attacks on - the broker (the secret is now the hash rather than the password). -

- -
- - - - -
-
-
- - http://git-wip-us.apache.org/repos/asf/qpid-site/blob/1a8679bf/content/releases/qpid-cpp-trunk/cpp-broker/book/Using-message-groups.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-cpp-trunk/cpp-broker/book/Using-message-groups.html b/content/releases/qpid-cpp-trunk/cpp-broker/book/Using-message-groups.html deleted file mode 100644 index e6a75e3..0000000 --- a/content/releases/qpid-cpp-trunk/cpp-broker/book/Using-message-groups.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - Using-message-groups.html - Apache Qpid™ - - - - - - - - - - - - - -
-
- Menu - - Search - - -
- - - - - -
- - -
-

1.11.  - Using Message Groups -

1.11.1.  - Overview -

- The broker allows messaging applications to classify a set of related messages as - belonging to a group. This allows a message producer to indicate to the consumer - that a group of messages should be considered a single logical operation with - respect to the application. -

- The broker can use this group identification to enforce policies controlling how - messages from a given group can be distributed to consumers. For instance, the - broker can be configured to guarantee all the messages from a particular group are - processed in order across multiple consumers. -

- For example, assume we have a shopping application that manages items in a virtual - shopping cart. A user may add an item to their shopping cart, then change their - mind and remove it. If the application sends an add message to the broker, - immediately followed by a remove message, they will be queued in the proper - order - add, followed by remove. -

- However, if there are multiple consumers, it is possible that once a consumer - acquires the add message, a different consumer may acquire the - remove message. This allows both messages to be processed in parallel, - which could result in a "race" where the remove operation is incorrectly - performed before the add operation. -

1.11.2.  - Grouping Messages -

- In order to group messages, the application would designate a particular - message header as containing a message's group identifier. The group - identifier stored in that header field would be a string value set by the message - producer. Messages from the same group would have the same group identifier - value. The key that identifies the header must also be known to the message - consumers. This allows the consumers to determine a message's assigned group. -

- The header that is used to hold the group identifier, as well as the values used - as group identifiers, are totally under control of the application. -

1.11.3.  - The Role of the Broker -

- The broker will apply the following processing on each grouped message: -

  • Enqueue a received message on the destination queue.
  • Determine the message's group by examining the message's group identifier header.
  • Enforce consumption ordering among messages belonging to the same group.

- Consumption ordering means that the broker will not allow outstanding - unacknowledged messages to more than one consumer for a given group. -

- This means that only one consumer can be processing messages from a particular - group at a given time. When the consumer acknowledges all of its acquired - messages, then the broker may pass the next pending message - from that group to a different consumer. -

- Specifically, for any given group the broker allows only the first N messages in - the group to be delivered to a consumer. The value of N would be determined by - the selected consumer's configured prefetch capacity. The broker blocks access by - any other consumer to any remaining undelivered messages in that group. Once the - receiving consumer has: -

  • acknowledged,
  • released, or
  • rejected

- all the delivered messages, the broker allows the next messages in the group to be - delivered. The next messages may be delivered to a different - consumer. -

- Note well that distinct message groups would not block each other from delivery. - For example, assume a queue contains messages from two different message groups - - say group "A" and group "B" - and they are enqueued such that "A"'s messages are - in front of "B". If the first message of group "A" is in the process of being - consumed by a client, then the remaining "A" messages are blocked, but the - messages of the "B" group are available for consumption by other consumers - even - though it is "behind" group "A" in the queue. -

1.11.4.  - Well Behaved Consumers -

- The broker can only enforce policy when delivering messages. To guarantee that - strict message ordering is preserved, the consuming application must adhere to the - following rules: -

  • completely process the data in a received message before accepting - that message
  • acknowledge (or reject) messages in the same order as they are - received
  • avoid releasing messages (see below)

- The term processed means that the consumer has finished - updating all application state affected by the message that has been received. - See section 2.6.2. Transfer of Responsibility, of the AMQP-0.10 specification for - more detail. -

Be Advised

- If a consumer does not adhere to the above rules, it may affect the ordering of - grouped messages even when the broker is enforcing consumption order. This can - be done by selectively acknowledging and releasing messages from the same group. -

- Assume a consumer has received two messages from group "A", "A-1" and "A-2", in - that order. If the consumer releases "A-1" then acknowledges "A-2", "A-1" will - be put back onto the queue and "A-2" will be removed from the queue. This - allows another consumer to acquire and process "A-1" after - "A-2" has been processed. -

- Under some application-defined circumstances, this may be acceptable behavior. - However, if order must be preserved, the client should either release - all currently held messages, or discard the target message - using reject. -

1.11.5.  - Broker Configuration -

- In order for the broker to determine a message's group, the key for the header - that contains the group identifier must be provided to the broker via - configuration. This is done on a per-queue basis, when the queue is first - configured. -

- This means that message group classification is determined by the message's destination - queue. -

- Specifically, the queue "holds" the header key that is used to find the message's - group identifier. All messages arriving at the queue are expected to use the same - header key for holding the identifer. Once the message is enqueued, the broker - looks up the group identifier in the message's header, and classifies the message - by its group. -

- Message group support can be enabled on a queue using the - qpid-config command line tool. The following options should be - provided when adding a new queue: -

Table 1.26. qpid-config options for creating message group queues

OptionDescription
--group-header=header-nameEnable message group support for this queue. Specify name of application header that holds the group identifier.
--shared-groupsEnforce ordered message group consumption across multiple consumers.


-

- Message group support may also be specified in the - queue.declare method via the arguments - parameter map, or using the messaging address syntax. The following keys must be - provided in the arguments map to enable message group support on a queue: -

Table 1.27. Queue Declare/Address Syntax Message Group Configuration Arguments

KeyValue
qpid.group_header_keystring - key for message header that holds the group identifier value
qpid.shared_msg_group1 - enforce ordering across multiple consumers

- It is important to note that there is no need to provide the actual group - identifer values that will be used. The broker learns this values as messages are - recieved. Also, there is no practical limit - aside from resource limitations - - to the number of different groups that the broker can track at run time. -

Restrictions

- Message grouping is not supported on LVQ or Priority queues. -

Example 1.4. Creating a message group queue via qpid-config

- This example uses the qpid-config tool to create a message group queue called - "MyMsgQueue". The message header that contains the group identifier will use - the key "GROUP_KEY". -

-qpid-config add queue MyMsgQueue --group-header="GROUP_KEY" --shared-groups
-        

Example 1.5. Creating a message group queue using address syntax (C++)

- This example uses the messaging address syntax to create a message group queue - with the same configuration as the previous example. -

-sender = session.createSender("MyMsgQueue;"
-                              " {create:always, delete:receiver,"
-                              " node: {x-declare: {arguments:"
-                              " {'qpid.group_header_key':'GROUP_KEY',"
-                              " 'qpid.shared_msg_group':1}}}}")
-        

1.11.5.1.  - Default Group -

- Should a message without a group identifier arrive at a queue configured for message grouping, the broker assigns the message to the default group. Therefore, all such "unidentified" messages are considered by the broker as part of the same group. The name of the default group is "qpid.no-group". This default can be overridden by suppling a different value to the broker configuration item "default-message-group": -

Example 1.6. Overriding the default message group identifier for the broker

-qpidd --default-msg-group "EMPTY-GROUP"
-            


-

- -
- - - - -
-
-
- - --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org For additional commands, e-mail: commits-help@qpid.apache.org