You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jo...@apache.org on 2010/06/20 00:15:13 UTC
svn commit: r956304 [29/33] - in /qpid/site/docs/books/0.7: ./
AMQP-Messaging-Broker-CPP-Book/ AMQP-Messaging-Broker-CPP-Book/html-single/
AMQP-Messaging-Broker-CPP-Book/html-single/images/
AMQP-Messaging-Broker-CPP-Book/html-single/images/jmx_console/...
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch13.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,1014 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 13. AMQP .NET Messaging Client</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt04.html" title="Part IV. AMQP Messaging Clients Clients"><link rel="prev" href="ch12s02.html" title="2. Examples"><link rel="next" href="ch13s02.html" title="2. Examples"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13.
+ AMQP .NET Messaging Client
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch12s02.html">Prev</a> </td><th width="60%" align="center">Part IV. AMQP Messaging Clients Clients</th><td width="20%" align="right"> <a accesskey="n" href="ch13s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 13. AMQP .NET Messaging Client"><div class="titlepage"><div><div><h2 class="title"><a name="id2946269"></a>Chapter 13.
+ AMQP .NET Messaging Client
+ </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch13.html#AMQP.NETMessagingClient-UserGuides">1.
+ User Guides
+ </a></span></dt><dd><dl><dt><span class="section"><a href="ch13.html#id2964732">1.1.
+ Apache Qpid: Open Source AMQP Messaging - .NET User Guide
+ </a></span></dt><dt><span class="section"><a href="ch13.html#id2996247">1.2.
+ Excel AddIn
+ </a></span></dt><dt><span class="section"><a href="ch13.html#id2991428">1.3.
+ WCF
+ </a></span></dt></dl></dd><dt><span class="section"><a href="ch13s02.html">2.
+ Examples
+ </a></span></dt></dl></div><p>
+ Currently the .NET code base provides two client libraries that
+ are compatible respectively with AMQP 0.8 and 0.10. The 0.8 client
+ is located in <code class="filename">qpid\dotnet</code> and the 0.10 client
+ in: <code class="filename">qpid\dotnet\client-010</code>.
+ </p><p>
+ You will need an AMQP broker to fully use those client libraries.
+ Use M4 or later C++ broker for AMQP 0.10 or Java broker for AMQP
+ 0.8/0.9.
+ </p><div class="section" title="1. User Guides"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQP.NETMessagingClient-UserGuides"></a>1.
+ User Guides
+ </h2></div></div></div><div class="section" title="1.1. Apache Qpid: Open Source AMQP Messaging - .NET User Guide"><div class="titlepage"><div><div><h3 class="title"><a name="id2964732"></a>1.1.
+ Apache Qpid: Open Source AMQP Messaging - .NET User Guide
+ </h3></div></div></div><div class="section" title="1.1.1. Tutorial"><div class="titlepage"><div><div><h4 class="title"><a name="NETUserGuide-Tutorial"></a>1.1.1.
+ Tutorial
+ </h4></div></div></div><p>
+ This tutorial consists of a series of examples using the three
+ most commonly used exchange types - Direct, Fanout and
+ Topic
+ exchanges. These examples show how to write applications that use
+ the most common messaging paradigms.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>direct</p><p>In the direct examples, a message producer writes to the direct
+ exchange, specifying a routing key. A message consumer reads
+ messages from a named queue. This illustrates clean separation
+ of concerns - message producers need to know only the exchange
+ and the routing key, message consumers need to know only which
+ queue to use on the broker.
+ </p></li><li class="listitem"><p>fanout</p><p>The fanout examples use a fanout exchange and do not use
+ routing keys. Each binding specifies that all messages for a
+ given exchange should be delivered to a given queue.
+ </p></li><li class="listitem"><p>pub-sub</p><p>In the publish/subscribe examples, a publisher
+ application writes messages to an exchange, specifying a
+ multi-part key. A subscriber application subscribes to
+ messages that match the relevant parts of these keys, using a
+ private queue for each subscription.
+ </p></li><li class="listitem"><p>request-response</p><p>In the request/response examples, a simple service accepts
+ requests from clients and sends responses back to them. Clients
+ create their own private queues and corresponding routing keys.
+ When a client sends a request to the server, it specifies its
+ own routing key in the reply-to field of the request. The
+ server uses the client's reply-to field as the routing key for
+ the response.
+ </p></li></ul></div><div class="section" title="1.1.1.1. Running the Examples"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-RunningtheExamples"></a>1.1.1.1.
+ Running the
+ Examples
+ </h5></div></div></div><p>
+ Before running the examples, you need to unzip the file
+ Qpid.NET-net-2.0-M4.zip, the following tree is created:
+ </p><pre class="programlisting">
+<home>
+ |-qpid
+ |-lib (contains the required dlls)
+ |-examples
+ |- direct
+ | |-example-direct-Listener.exe
+ | |-example-direct-Producer.exe
+ |- fanout
+ | |-example-fanout-Listener.exe
+ | |-example-fanout-Producer.exe
+ |- pub-sub
+ | |-example-pub-sub-Listener.exe
+ | |-example-pub-sub-Publisher.exe
+ |- request-response
+ |-example-request-response-Client.exe
+ |-example-request-response-Server.exe
+ </pre><p>
+ Make sure your PATH contains the directory
+ <home>/qpid/lib
+ The examples can be run by executing the provided exe files:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/examplefolder
+$ example-...-.exe [hostname] [portnumber]
+ </pre><p>
+ where [hostname] is the qpid broker host name
+ (default is localhost) and [portnumber] is the port number on which the
+ qpid broker is accepting connection (default is 5672).
+ </p></div><div class="section" title="1.1.1.2. Creating and Closing Sessions"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-CreatingandClosingSessions"></a>1.1.1.2.
+ Creating
+ and Closing Sessions
+ </h5></div></div></div><p>
+ All of the examples have been written using the Apache Qpid .NEt
+ 0.10 API. The examples use the same skeleton code to initialize
+ the program, create a session, and clean up before exiting:
+ </p><pre class="programlisting">
+using System;
+using System.IO;
+using System.Text;
+using System.Threading;
+using org.apache.qpid.client;
+using org.apache.qpid.transport;
+
+...
+
+ private static void Main(string[] args)
+ {
+ string host = args.Length > 0 ? args[0] : "localhost";
+ int port = args.Length > 1 ? Convert.ToInt32(args[1]) : 5672;
+ Client connection = new Client();
+ try
+ {
+ connection.connect(host, port, "test", "guest", "guest");
+ ClientSession session = connection.createSession(50000);
+
+ //--------- Main body of program --------------------------------------------
+
+ connection.close();
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine("Error: \n" + e.StackTrace);
+ }
+ }
+...
+ </pre></div><div class="section" title="1.1.1.3. Writing Direct Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingDirectApplications"></a>1.1.1.3.
+ Writing
+ Direct Applications
+ </h5></div></div></div><p>
+ This section describes two programs that implement direct
+ messaging using a Direct exchange:
+ • org.apache.qpid.example.direct.Producer (from
+ example-direct-producer) publishes messages to the amq.direct
+ exchange, using the routing key routing_key.
+ •org.apache.qpid.example.direct.Listener (from
+ example-direct-Listener) uses a message listener to receive
+ messages from the queue named message_queue.
+ </p><div class="section" title="1.1.1.3.1. Running the Direct Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningtheDirectExamples"></a>1.1.1.3.1.
+ Running the
+ Direct Examples
+ </h6></div></div></div><p>
+ 1) Make sure your PATH contains the directory
+ <home>/qpid/lib
+ </p><p>
+ 2) Make sure that a qpid broker is running:
+ </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+ </pre><p>
+ If a broker is running, you should see the qpidd process in the
+ output of the above
+ command.
+ </p><p>
+ 3) Read the messages from the message queue using direct
+ listener, as follows:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-direct-Listener.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-direct-Listener.exe [hostname] [portnumber]
+ </pre><p>
+ This program is waiting for messages to be published, see next
+ step:
+ </p><p>
+ 4) Publish a series of messages to the amq.direct exchange by
+ running direct producer, as follows:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-direct-Producer.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-direct-Producer.exe [hostname] [portnumber]
+ </pre><p>
+ This program has no output; the messages are routed to the
+ message queue, as instructed by the binding.
+ </p><p>
+ 5) Go to the windows where you are running your listener. You
+ should see the following output:
+ </p><pre class="programlisting">
+Message: Message 0
+Message: Message 1
+Message: Message 2
+Message: Message 3
+Message: Message 4
+Message: Message 5
+Message: Message 6
+Message: Message 7
+Message: Message 8
+Message: Message 9
+Message: That's all, folks!
+ </pre><p>
+ Now we will examine the code for each of these programs. In each
+ section, we will discuss only
+ the code that must be added to the skeleton shown in Section
+ "Creating and Closing Sessions".
+ </p></div><div class="section" title="1.1.1.3.2. Reading Messages from the Queue"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-ReadingMessagesfromtheQueue"></a>1.1.1.3.2.
+ Reading
+ Messages from the Queue
+ </h6></div></div></div><p>
+ The program , listener.cs, is a message listener that receives
+ messages from a queue.
+ </p><p>
+ First it creates a queue named message_queue, then binds it to
+ the amq.direct exchange using the binding key routing_key.
+ </p><pre class="programlisting">
+//--------- Main body of program --------------------------------------------
+// Create a queue named "message_queue", and route all messages whose
+// routing key is "routing_key" to this newly created queue.
+session.queueDeclare("message_queue");
+session.exchangeBind("message_queue", "amq.direct", "routing_key");
+ </pre><p>
+ The queue created by this program continues to exist after the
+ program exits, and any message whose routing key matches the key
+ specified in the binding will be routed to the corresponding
+ queue by the broker. Note that the queue could have been be
+ deleted using the following code:
+ </p><pre class="programlisting">
+session.queueDelete("message_queue");
+ </pre><p>
+ To create a message listener, create a class derived from
+ IMessageListener, and override the messageTransfer method,
+ providing the code that should be executed when a message is
+ received.
+ </p><pre class="programlisting">
+public class MessageListener : IMessageListener
+{
+ ......
+ public void messageTransfer(IMessage m)
+ {
+ .....
+}
+ </pre><p>
+ The main body of the program creates a listener for the
+ subscription; attaches the listener to a message queue; and
+ subscribe to the queue to receive messages from the queue.
+ </p><pre class="programlisting">
+lock (session)
+{
+ // Create a listener and subscribe it to the queue named "message_queue"
+ IMessageListener listener = new MessageListener(session);
+ session.attachMessageListener(listener, "message_queue");
+ session.messageSubscribe("message_queue");
+ // Receive messages until all messages are received
+ Monitor.Wait(session);
+}
+ </pre><p>
+ The MessageListener's messageTransfer() function is called
+ whenever a message is received. In this example the message is
+ printed and tested to see if it is the final message. Once the
+ final message is received, the messages are acknowledged.
+ </p><pre class="programlisting">
+BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
+byte[] body = new byte[m.Body.Length - m.Body.Position];
+reader.Read(body, 0, body.Length);
+ASCIIEncoding enc = new ASCIIEncoding();
+string message = enc.GetString(body);
+ Console.WriteLine("Message: " + message);
+// Add this message to the list of message to be acknowledged
+_range.add(m.Id);
+if( message.Equals("That's all, folks!") )
+{
+ // Acknowledge all the received messages
+ _session.messageAccept(_range);
+ lock(_session)
+ {
+ Monitor.Pulse(_session);
+ }
+}
+ </pre></div><div class="section" title="1.1.1.3.3. Publishing Messages to a Direct Exchange"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-PublishingMessagestoaDirectExchange"></a>1.1.1.3.3.
+ Publishing
+ Messages to a Direct Exchange
+ </h6></div></div></div><p>
+ The second program in the direct example, Producer.cs, publishes
+ messages to the amq.direct exchange using the routing key
+ routing_key.
+ </p><p>
+ First, create a message and set a routing key. The same routing
+ key will be used for each message we send, so you only need to
+ set this property once.
+ </p><pre class="programlisting">
+IMessage message = new Message();
+// The routing key is a message property. We will use the same
+// routing key for each message, so we'll set this property
+// just once. (In most simple cases, there is no need to set
+// other message properties.)
+message.DeliveryProperties.setRoutingKey("routing_key");
+ </pre><p>
+ Now send some messages:
+ </p><pre class="programlisting">
+// Asynchronous transfer sends messages as quickly as
+// possible without waiting for confirmation.
+for (int i = 0; i < 10; i++)
+{
+ message.clearData();
+ message.appendData(Encoding.UTF8.GetBytes("Message " + i));
+ session.messageTransfer("amq.direct", message);
+}
+ </pre><p>
+ Send a final synchronous message to indicate termination:
+ </p><pre class="programlisting">
+// And send a syncrhonous final message to indicate termination.
+message.clearData();
+message.appendData(Encoding.UTF8.GetBytes("That's all, folks!"));
+session.messageTransfer("amq.direct", "routing_key", message);
+session.sync();
+ </pre></div></div><div class="section" title="1.1.1.4. Writing Fanout Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingFanoutApplications"></a>1.1.1.4.
+ Writing
+ Fanout Applications
+ </h5></div></div></div><p>
+ This section describes two programs that illustrate the use of a
+ Fanout exchange.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Listener.cs makes a unique queue private for each instance of
+ the listener, and binds that queue to the fanout exchange. All
+ messages sent to the fanout exchange are delivered to each
+ listener's queue.
+ </p></li><li class="listitem"><p>Producer.cs publishes messages to the fanout exchange. It
+ does not use a routing key, which is not needed by the fanout
+ exchange.
+ </p></li></ul></div><div class="section" title="1.1.1.4.1. Running the Fanout Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningtheFanoutExamples"></a>1.1.1.4.1.
+ Running the
+ Fanout Examples
+ </h6></div></div></div><p>
+ 1) Make sure your PATH contains the directory
+ <home>/qpid/lib
+ </p><p>
+ 2) Make sure that a qpid broker is running:
+ </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+ </pre><p>
+ If a broker is running, you should see the qpidd process in the
+ output of the above
+ command.
+ </p><p>
+ 3) In separate windows, start one or more fanout listeners as
+ follows:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-fanout-Listener.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-fanout-Listener.exe [hostname] [portnumber]
+ </pre><p>
+ The listener creates a private queue, binds it to the amq.fanout
+ exchange, and waits for messages to arrive on the queue. When the
+ listener starts, you will see the following message:
+ </p><pre class="programlisting">
+Listening
+ </pre><p>
+ This program is waiting for messages to be published, see next
+ step:
+ </p><p>
+ 4) In a separate window, publish a series of messages to the
+ amq.fanout exchange by running fanout producer, as follows:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-fanout-Producer.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-fanout-Producer.exe [hostname] [portnumber]
+ </pre><p>
+ This program has no output; the messages are routed to the
+ message queue, as prescribed by the binding.
+ </p><p>
+ 5) Go to the windows where you are running listeners. You should
+ see the following output for each listener:
+ </p><pre class="programlisting">
+Message: Message 0
+Message: Message 1
+Message: Message 2
+Message: Message 3
+Message: Message 4
+Message: Message 5
+Message: Message 6
+Message: Message 7
+Message: Message 8
+Message: Message 9
+Message: That's all, folks!
+ </pre><p>
+ Now we will examine the code for each of these programs. In each
+ section, we will discuss only
+ the code that must be added to the skeleton shown in Section
+ "Creating and Closing Sessions".
+ </p></div></div><div class="section" title="1.1.1.5. Consuming from a Fanout Exchange"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-ConsumingfromaFanoutExchange"></a>1.1.1.5.
+ Consuming from a
+ Fanout Exchange
+ </h5></div></div></div><p>
+ The first program in the fanout example, Listener.cs, creates a
+ private queue, binds it to the amq.fanout exchange, and waits for
+ messages to arrive on the queue, printing them out as they
+ arrive. It uses a Listener that is identical to the one used in
+ the direct example:
+ </p><pre class="programlisting">
+ public class MessageListener : IMessageListener
+ {
+ private readonly ClientSession _session;
+ private readonly RangeSet _range = new RangeSet();
+ public MessageListener(ClientSession session)
+ {
+ _session = session;
+ }
+
+ public void messageTransfer(IMessage m)
+ {
+ BinaryReader reader = new BinaryReader(m.Body, Encoding.UTF8);
+ byte[] body = new byte[m.Body.Length - m.Body.Position];
+ reader.Read(body, 0, body.Length);
+ ASCIIEncoding enc = new ASCIIEncoding();
+ string message = enc.GetString(body);
+ Console.WriteLine("Message: " + message);
+ // Add this message to the list of message to be acknowledged
+ _range.add(m.Id);
+ if (message.Equals("That's all, folks!"))
+ {
+ // Acknowledge all the received messages
+ _session.messageAccept(_range);
+ lock (_session)
+ {
+ Monitor.Pulse(_session);
+ }
+ }
+ }
+ }
+ </pre><p>
+ The listener creates a private queue to receive its messages and
+ binds it to the fanout exchange:
+ </p><pre class="programlisting">
+string myQueue = session.Name;
+session.queueDeclare(myQueue, Option.EXCLUSIVE, Option.AUTO_DELETE);
+session.exchangeBind(myQueue, "amq.fanout", "my-key");
+ </pre><p>
+ Now we create a listener and subscribe it to the queue:
+ </p><pre class="programlisting">
+lock (session)
+{
+ Console.WriteLine("Listening");
+ // Create a listener and subscribe it to my queue.
+ IMessageListener listener = new MessageListener(session);
+ session.attachMessageListener(listener, myQueue);
+ session.messageSubscribe(myQueue);
+ // Receive messages until all messages are received
+ Monitor.Wait(session);
+}
+ </pre><div class="section" title="1.1.1.5.1. Publishing Messages to the Fanout Exchange"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-PublishingMessagestotheFanoutExchange"></a>1.1.1.5.1.
+ Publishing
+ Messages to the Fanout Exchange
+ </h6></div></div></div><p>
+ The second program in this example, Producer.cs, writes messages
+ to the fanout queue.
+ </p><pre class="programlisting">
+// Unlike topic exchanges and direct exchanges, a fanout
+// exchange need not set a routing key.
+IMessage message = new Message();
+// Asynchronous transfer sends messages as quickly as
+// possible without waiting for confirmation.
+for (int i = 0; i < 10; i++)
+{
+ message.clearData();
+ message.appendData(Encoding.UTF8.GetBytes("Message " + i));
+ session.messageTransfer("amq.fanout", message);
+}
+
+// And send a syncrhonous final message to indicate termination.
+message.clearData();
+message.appendData(Encoding.UTF8.GetBytes("That's all, folks!"));
+session.messageTransfer("amq.fanout", message);
+session.sync();
+ </pre></div></div><div class="section" title="1.1.1.6. Writing Publish/Subscribe Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingPublish-2FSubscribeApplications"></a>1.1.1.6.
+ Writing
+ Publish/Subscribe Applications
+ </h5></div></div></div><p>
+ This section describes two programs that implement
+ Publish/Subscribe messaging using a topic exchange.
+ </p><p>
+ • Publisher.cS sends messages to the amq.topic exchange,
+ using the multipart routing keys usa.news, usa.weather,
+ europe.news, and europe.weather.
+ • Listener.cs creates private queues for news, weather,
+ usa, and europe, binding them to the amq.topic exchange using
+ bindings that match the corresponding parts of the multipart
+ routing keys.
+ </p><p>
+ In this example, the publisher creates messages for topics like
+ news, weather, and sports that happen in regions like Europe,
+ Asia, or the United States. A given consumer may be interested in
+ all weather messages, regardless of region, or it may be
+ interested in news and weather for the United States, but
+ uninterested in items for other regions. In this example, each
+ consumer sets up its own private queues, which receive precisely
+ the messages that particular consumer is interested in.
+ </p><div class="section" title="1.1.1.6.1. Running the Publish-Subscribe Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningthePublishSubscribeExamples"></a>1.1.1.6.1.
+ Running
+ the Publish-Subscribe Examples
+ </h6></div></div></div><p>
+ 1) Make sure your PATH contains the directory
+ <home>/qpid/lib
+ </p><p>
+ 2) Make sure that a qpid broker is running:
+ </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+ </pre><p>
+ If a broker is running, you should see the qpidd process in the
+ output of the above
+ command.
+ </p><p>
+ 3) In separate windows, start one or more topic subscribers as
+ follows:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-pub-sub--Listener.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-pub-sub-Listener.exe [hostname] [portnumber]
+ </pre><p>
+ You will see output similar to this:
+ </p><pre class="programlisting">
+Listening for messages ...
+Declaring queue: usa
+Declaring queue: europe
+Declaring queue: news
+Declaring queue: weather
+ </pre><p>
+ Each topic consumer creates a set of private queues, and binds
+ each queue to the amq.topic exchange together with a binding that
+ indicates which messages should be routed to the queue.
+ </p><p>
+ 4) In another window, start the topic publisher, which publishes
+ messages to the amq.topic exchange, as follows:
+ </p><pre class="programlisting">
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-pub-sub-Producer.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-pub-sub-Producer.exe [hostname] [portnumber]
+ </pre><p>
+ This program has no output; the messages are routed to the
+ message queues for each topic_consumer as specified by the
+ bindings the consumer created.
+ </p><p>
+ 5) Go back to the window for each topic consumer. You should see
+ output like this:
+ </p><pre class="programlisting">
+Message: Message 0 from usa
+Message: Message 0 from news
+Message: Message 0 from weather
+Message: Message 1 from usa
+Message: Message 1 from news
+Message: Message 2 from usa
+Message: Message 2 from news
+Message: Message 3 from usa
+Message: Message 3 from news
+Message: Message 4 from usa
+Message: Message 4 from news
+Message: Message 5 from usa
+Message: Message 5 from news
+Message: Message 6 from usa
+Message: Message 6 from news
+Message: Message 7 from usa
+Message: Message 7 from news
+Message: Message 8 from usa
+Message: Message 8 from news
+Message: Message 9 from usa
+....
+Message: That's all, folks! from weather
+Shutting down listener for control
+Message: That's all, folks! from europe
+Shutting down listener for control
+ </pre><p>
+ Now we will examine the code for each of these programs. In each
+ section, we will discuss only
+ the code that must be added to the skeleton shown in Section
+ "Creating and Closing Sessions".
+ </p></div><div class="section" title="1.1.1.6.2. Publishing Messages to a Topic Exchange"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-PublishingMessagestoaTopicExchange"></a>1.1.1.6.2.
+ Publishing
+ Messages to a Topic Exchange
+ </h6></div></div></div><p>
+ The first program in the publish/subscribe example, Publisher.cs,
+ defines two new functions: one that publishes messages to the
+ topic exchange, and one that indicates that no more messages are
+ coming.
+ </p><p>
+ The publishMessages function publishes a series of five messages
+ using the specified routing key.
+ </p><pre class="programlisting">
+private static void publishMessages(ClientSession session, string routing_key)
+{
+ IMessage message = new Message();
+ // Asynchronous transfer sends messages as quickly as
+ // possible without waiting for confirmation.
+ for (int i = 0; i < 10; i++)
+ {
+ message.clearData();
+ message.appendData(Encoding.UTF8.GetBytes("Message " + i));
+ session.messageTransfer("amq.topic", routing_key, message);
+ }
+}
+ </pre><p>
+ The noMoreMessages function signals the end of messages using the
+ control routing key, which is reserved for control messages.
+ </p><pre class="programlisting">
+private static void noMoreMessages(ClientSession session)
+{
+ IMessage message = new Message();
+ // And send a syncrhonous final message to indicate termination.
+ message.clearData();
+ message.appendData(Encoding.UTF8.GetBytes("That's all, folks!"));
+ session.messageTransfer("amq.topic", "control", message);
+ session.sync();
+}
+ </pre><p>
+ In the main body of the program, messages are published using
+ four different routing keys, and then the end of messages is
+ indicated by a message sent to a separate routing key.
+ </p><pre class="programlisting">
+publishMessages(session, "usa.news");
+publishMessages(session, "usa.weather");
+publishMessages(session, "europe.news");
+publishMessages(session, "europe.weather");
+
+noMoreMessages(session);
+ </pre></div><div class="section" title="1.1.1.6.3. Reading Messages from the Queue"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-ReadingMessagesfromtheQueue2"></a>1.1.1.6.3.
+ Reading
+ Messages from the Queue
+ </h6></div></div></div><p>
+ The second program in the publish/subscribe example, Listener.cs,
+ creates a local private queue, with a unique name, for each of
+ the four binding keys it specifies: usa.#, europe.#, #.news, and
+ #.weather, and creates a listener.
+ </p><pre class="programlisting">
+Console.WriteLine("Listening for messages ...");
+// Create a listener
+prepareQueue("usa", "usa.#", session);
+prepareQueue("europe", "europe.#", session);
+prepareQueue("news", "#.news", session);
+prepareQueue("weather", "#.weather", session);
+ </pre><p>
+ The prepareQueue() method creates a queue using a queue name and
+ a routing key supplied as arguments it then attaches a listener
+ with the session for the created queue and subscribe for this
+ receiving messages from the queue:
+ </p><pre class="programlisting">
+// Create a unique queue name for this consumer by concatenating
+// the queue name parameter with the Session ID.
+Console.WriteLine("Declaring queue: " + queue);
+session.queueDeclare(queue, Option.EXCLUSIVE, Option.AUTO_DELETE);
+
+// Route messages to the new queue if they match the routing key.
+// Also route any messages to with the "control" routing key to
+// this queue so we know when it's time to stop. A publisher sends
+// a message with the content "That's all, Folks!", using the
+// "control" routing key, when it is finished.
+
+session.exchangeBind(queue, "amq.topic", routing_key);
+session.exchangeBind(queue, "amq.topic", "control");
+
+// subscribe the listener to the queue
+IMessageListener listener = new MessageListener(session);
+session.attachMessageListener(listener, queue);
+session.messageSubscribe(queue);
+ </pre></div></div><div class="section" title="1.1.1.7. Writing Request/Response Applications"><div class="titlepage"><div><div><h5 class="title"><a name="NETUserGuide-WritingRequest-2FResponseApplications"></a>1.1.1.7.
+ Writing
+ Request/Response Applications
+ </h5></div></div></div><p>
+ In the request/response examples, we write a server that accepts
+ strings from clients and converts them to upper case, sending the
+ result back to the requesting client. This example consists of
+ two programs.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Client.cs is a client application that sends messages to the
+ server.
+ • Server.cs is a service that accepts messages, converts
+ their content to upper case, and sends the result to the
+ amq.direct exchange, using the request's reply-to property as
+ the routing key for the response.
+ </p></li></ul></div><div class="section" title="1.1.1.7.1. Running the Request/Response Examples"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-RunningtheRequest-2FResponseExamples"></a>1.1.1.7.1.
+ Running
+ the Request/Response Examples
+ </h6></div></div></div><p>
+ 1) Make sure your PATH contains the directory
+ <home>/qpid/lib
+ </p><p>
+ 2) Make sure that a qpid broker is running:
+ </p><pre class="programlisting">
+$ ps -eaf | grep qpidd
+ </pre><p>
+ If a broker is running, you should see the qpidd process in the
+ output of the above
+ command.
+ </p><p>
+ 3) Run the server.
+ </p><p>
+ $ cd <home>/qpid/examples/direct
+ </p><pre class="programlisting">
+ With cygwin:
+ </pre><p>
+ $ ./example-request-response-Server.exe [hostname] [portnumber]
+ </p><pre class="programlisting">
+ or with mono:
+ </pre><p>
+ $ mono ./example-request-response-Server.exe [hostname] [portnumber]
+ </p><pre class="programlisting">
+ You will see output similar to this:
+ </pre><p>
+ Waiting for requests
+ </p><pre class="programlisting">
+4) In a separate window, start a client:
+
+$ cd <home>/qpid/examples/direct
+ </pre><p>
+ With cygwin:
+ </p><pre class="programlisting">
+$ ./example-request-response-Client.exe [hostname] [portnumber]
+ </pre><p>
+ or with mono:
+ </p><pre class="programlisting">
+$ mono ./example-request-response-Client.exe [hostname] [portnumber]
+ </pre><p>
+ You will see output similar to this:
+ </p><pre class="programlisting">
+Activating response queue listener for: clientSystem.Byte[]
+Waiting for all responses to arrive ...
+Response: TWAS BRILLIG, AND THE SLITHY TOVES
+Response: DID GIRE AND GYMBLE IN THE WABE.
+Response: ALL MIMSY WERE THE BOROGROVES,
+Response: AND THE MOME RATHS OUTGRABE.
+Shutting down listener for clientSystem.Byte[]
+Response: THAT'S ALL, FOLKS!
+ </pre><p>
+ 4) Go back to the server window, the output should be similar to
+ this:
+ </p><pre class="programlisting">
+Waiting for requests
+Request: Twas brillig, and the slithy toves
+Request: Did gire and gymble in the wabe.
+Request: All mimsy were the borogroves,
+Request: And the mome raths outgrabe.
+Request: That's all, folks!
+ </pre><p>
+ Now we will examine the code for each of these programs. In each
+ section, we will discuss only the code that must be added to the
+ skeleton shown in Section "Creating and Closing Sessions".
+ </p></div><div class="section" title="1.1.1.7.2. The Client Application"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-TheClientApplication"></a>1.1.1.7.2.
+ The Client
+ Application
+ </h6></div></div></div><p>
+ The first program in the request-response example, Client.cs,
+ sets up a private response queue to receive responses from the
+ server, then sends messages the server, listening to the response
+ queue for the server's responses.
+ </p><pre class="programlisting">
+string response_queue = "client" + session.getName();
+// Use the name of the response queue as the routing key
+session.queueDeclare(response_queue);
+session.exchangeBind(response_queue, "amq.direct", response_queue);
+
+// Create a listener for the response queue and listen for response messages.
+Console.WriteLine("Activating response queue listener for: " + response_queue);
+IMessageListener listener = new ClientMessageListener(session);
+session.attachMessageListener(listener, response_queue);
+session.messageSubscribe(response_queue);
+ </pre><p>
+ Set some properties that will be used for all requests. The
+ routing key for a request is request.
+ The reply-to property is set to the routing key for the client's
+ private queue.
+ </p><pre class="programlisting">
+IMessage request = new Message();
+request.DeliveryProperties.setRoutingKey("request");
+request.MessageProperties.setReplyTo(new ReplyTo("amq.direct", response_queue));
+ </pre><p>
+ Now send some requests...
+ </p><pre class="programlisting">
+string[] strs = {
+ "Twas brillig, and the slithy toves",
+ "Did gire and gymble in the wabe.",
+ "All mimsy were the borogroves,",
+ "And the mome raths outgrabe.",
+ "That's all, folks!"
+ };
+foreach (string s in strs)
+{
+ request.clearData();
+ request.appendData(Encoding.UTF8.GetBytes(s));
+ session.messageTransfer("amq.direct", request);
+}
+ </pre><p>
+ And wait for responses to arrive:
+ </p><pre class="programlisting">
+Console.WriteLine("Waiting for all responses to arrive ...");
+Monitor.Wait(session);
+ </pre></div><div class="section" title="1.1.1.7.3. The Server Application"><div class="titlepage"><div><div><h6 class="title"><a name="NETUserGuide-TheServerApplication"></a>1.1.1.7.3.
+ The Server
+ Application
+ </h6></div></div></div><p>
+ The second program in the request-response example, Server.cs,
+ uses the reply-to property as the routing key for responses.
+ </p><p>
+ The main body of Server.cs creates an exclusive queue for
+ requests, then waits for messages to arrive.
+ </p><pre class="programlisting">
+const string request_queue = "request";
+// Use the name of the request queue as the routing key
+session.queueDeclare(request_queue);
+session.exchangeBind(request_queue, "amq.direct", request_queue);
+
+lock (session)
+{
+ // Create a listener and subscribe it to the request_queue
+ IMessageListener listener = new MessageListener(session);
+ session.attachMessageListener(listener, request_queue);
+ session.messageSubscribe(request_queue);
+ // Receive messages until all messages are received
+ Console.WriteLine("Waiting for requests");
+ Monitor.Wait(session);
+}
+ </pre><p>
+ The listener's messageTransfer() method converts the request's
+ content to upper case, then sends a response to the broker, using
+ the request's reply-to property as the routing key for the
+ response.
+ </p><pre class="programlisting">
+BinaryReader reader = new BinaryReader(request.Body, Encoding.UTF8);
+byte[] body = new byte[request.Body.Length - request.Body.Position];
+reader.Read(body, 0, body.Length);
+ASCIIEncoding enc = new ASCIIEncoding();
+string message = enc.GetString(body);
+Console.WriteLine("Request: " + message);
+
+// Transform message content to upper case
+string responseBody = message.ToUpper();
+
+// Send it back to the user
+response.clearData();
+response.appendData(Encoding.UTF8.GetBytes(responseBody));
+_session.messageTransfer("amq.direct", routingKey, response);
+ </pre></div></div></div></div><div class="section" title="1.2. Excel AddIn"><div class="titlepage"><div><div><h3 class="title"><a name="id2996247"></a>1.2.
+ Excel AddIn
+ </h3></div></div></div><div class="section" title="1.2.1. Excel AddIn"><div class="titlepage"><div><div><h4 class="title"><a name="ExcelAddIn-ExcelAddIn"></a>1.2.1.
+ Excel AddIn
+ </h4></div></div></div><p>
+ Qpid .net comes with Excel AddIns that are located in:
+ </p><p>
+ <code class="filename"><project-root>\qpid\dotnet\client-010\addins</code>
+ </p><p>
+ There are currently three projects:
+ </p><div class="variablelist"><dl><dt><span class="term">ExcelAddIn</span></dt><dd><p>An RTD excel Addin</p></dd><dt><span class="term">ExcelAddInProducer
+ </span></dt><dd><p>A sample client to demonstrate the RTD AddIn</p></dd><dt><span class="term">ExcelAddInMessageProcessor
+ </span></dt><dd><p>A sample message processor for the RTD AddIn</p></dd></dl></div><div class="section" title="1.2.1.1. Qpid RDT AddIn"><div class="titlepage"><div><div><h5 class="title"><a name="ExcelAddIn-QpidRDTAddIn"></a>1.2.1.1.
+ Qpid RDT AddIn
+ </h5></div></div></div><div class="section" title="1.2.1.1.1. Deploying the RTD AddIn"><div class="titlepage"><div><div><h6 class="title"><a name="ExcelAddIn-DeployingtheRTDAddIn"></a>1.2.1.1.1.
+ Deploying the RTD
+ AddIn
+ </h6></div></div></div><p>
+ Excel provides a function called RTD (real-time data) that lets
+ you specify a COM server via its ProgId here "Qpid" so that you
+ can push qpid messages into Excel.
+ </p><p>
+ The provided RTD AddIn consumes messages from one queue and
+ process them through a provided message processor.
+ </p><p>
+ For using the Qpid RTD follows those steps:
+ </p><div class="procedure"><ol class="procedure" type="1"><li class="step" title="Step 1"><p>
+ Copy the configuration Excel.exe.config into <code class="filename">Drive\Program Files\Microsoft Office\Office12</code>.
+ </p></li><li class="step" title="Step 2"><p>
+ Edit <code class="filename">Excel.exe.xml</code> and set the targeted Qpid broker host, port
+ number, username and password.
+ </p></li><li class="step" title="Step 3"><p>
+ Select the cell or cell range to contain the RTD information
+ </p></li><li class="step" title="Step 4"><p>
+ Enter the following formula <span class="command"><strong>=rtd("Qpid",,"myQueue")</strong></span>. Where
+ MyQueue is the queue from which you wish to receive messages from.
+ </p></li></ol></div><p>
+ Note: The Qpid RTD is a COM-AddIn that must be registered with
+ Excel. This is done automatically when compiling the Addin with
+ visual studio.
+ </p></div><div class="section" title="1.2.1.1.2. Defining a message processor"><div class="titlepage"><div><div><h6 class="title"><a name="ExcelAddIn-Definingamessageprocessor"></a>1.2.1.1.2.
+ Defining a message processor
+ </h6></div></div></div><p>
+ The default behavior of the RDT AddIn is to display the message
+ payload. This could be altered by specifying your own message
+ processor.
+ A Message processor is a class that implements the API
+ <span class="command"><strong>ExcelAddIn.MessageProcessor</strong></span>. For example, the provided processor
+ in <code class="filename">client-010\addins\ExcelAddInMessageProcessor</code> displays the
+ message body and the the header price when specified.
+ </p><p>
+ To use you own message processor follows those steps:
+ </p><div class="procedure"><ol class="procedure" type="1"><li class="step" title="Step 1"><p>Write your own message processor that extends ExcelAddIn.MessageProcessor</p></li><li class="step" title="Step 2"><p>Edit Excel.exe.config and uncomment the entries:</p><pre class="programlisting">
+<add key="ProcessorAssembly"
+value="<path>\qpid\dotnet\client-010\addins\ExcelAddInMessageProcessor\bin\Debug\ExcelAddInMessageProcessor.dll"/>
+ </pre><pre class="programlisting">
+ <add key="ProcessorClass"
+ value="ExcelAddInMessageProcessor.Processor"/>
+ </pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ProcessorAssembly is the path on the Assembly that contains
+ your processor class
+ </p></li><li class="listitem"><p>ProcessorClass is your processor class name
+ </p></li></ul></div></li><li class="step" title="Step 3"><p>run excel and define a rtd function</p></li></ol></div><p>
+ Note: the provided ExcelAddInProducer can be used for
+ testing the provided message processor. As messages are
+ sent to queue1 the following rtd function should be used
+ <span class="command"><strong>=rtd("Qpid",,"queue1")</strong></span>.
+ </p></div></div></div></div><div class="section" title="1.3. WCF"><div class="titlepage"><div><div><h3 class="title"><a name="id2991428"></a>1.3.
+ WCF
+ </h3></div></div></div><div class="section" title="1.3.1. Introduction"><div class="titlepage"><div><div><h4 class="title"><a name="WCF-Introduction"></a>1.3.1.
+ Introduction
+ </h4></div></div></div><p>
+ WCF (<span class="emphasis"><em>Windows Communication Foundation)</em></span> unifies the .Net
+ communication capabilities into a single, common, general Web
+ service oriented framework. A good WCF tutorial can be found
+ <a class="ulink" href="http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2#WCFSilverlightIntroduction" target="_top">here</a>.
+ </p><p>
+ WCF separates how service logic is written from how services
+ communicate with clients. Bindings are used to specify the
+ transport, encoding, and protocol details required for clients
+ and services to communicate with each other. Qpid provide a WCF
+ binding: org.apache.qpid.wcf.model.QpidBinding. WCF Services that
+ use the Qpid binding communicate through queues that are
+ dynamically created on a Qpid broker.
+ </p></div><div class="section" title="1.3.2. How to use Qpid binding"><div class="titlepage"><div><div><h4 class="title"><a name="WCF-HowtouseQpidbinding"></a>1.3.2.
+ How to use Qpid binding
+ </h4></div></div></div><p>
+ WCF services are implemented using:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A service contract with one or more operation contracts.
+ </p></li><li class="listitem"><p>A service implementation for those contracts.
+ </p></li><li class="listitem"><p>A configuration file to provide that implementation with an
+ endpoint and a binding for that specific contract.
+ </p></li></ul></div><p>
+ The following configuration file can be used to configure a Hello
+ Service:
+ </p><pre class="programlisting">
+<configuration>
+ <system.serviceModel>
+ <services>
+ <!-- the service class -->
+ <service name="org.apache.qpid.wcf.demo.HelloService">
+ <host>
+ <baseAddresses>
+ <!-- Use SOAP over AMQP -->
+ <add baseAddress="soap.amqp:///" />
+ </baseAddresses>
+ </host>
+
+ <endpoint
+ address="Hello"
+ <!-- We use a Qpid Binding, see below def -->
+ binding="customBinding"
+ bindingConfiguration="QpidBinding"
+ <!-- The service contract -->
+ contract="org.apache.qpid.wcf.demo.IHelloContract"/>
+ </service>
+ </services>
+
+ <bindings>
+ <customBinding>
+ <!-- cf def of the qpid binding -->
+ <binding name="QpidBinding">
+ <textMessageEncoding />
+ <!-- specify the host and port number of the broker -->
+ <QpidTransport
+ host="192.168.1.14"
+ port="5673" />
+ </binding>
+ </customBinding>
+ </bindings>
+
+ <extensions>
+ <bindingElementExtensions>
+ <!-- use Qpid binding element: org.apache.qpid.wcf.model.QpidTransportElement -->
+ <add
+ name="QpidTransport"
+ type="org.apache.qpid.wcf.model.QpidTransportElement, qpidWCFModel"/>
+ </bindingElementExtensions>
+ </extensions>
+
+ </system.serviceModel>
+</configuration>
+ </pre><p>
+ Endpoints and bindings can also be set within the service code:
+ </p><pre class="programlisting">
+/* set HostName, portNumber and MyService accordingly */
+Binding binding = new QpidBinding("HostName", portNumber);
+ServiceHost service = new ServiceHost(typeof(MyService), new Uri("soap.amqp:///"));
+service.AddServiceEndpoint(typeof(IBooking), binding, "MyService");
+service.Open();
+....
+ </pre></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch12s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch13s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2.
+ Examples
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2.
+ Examples
+ </td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch13s02.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2. Examples</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch13.html" title="Chapter 13. AMQP .NET Messaging Client"><link rel="prev" href="ch13.html" title="Chapter 13. AMQP .NET Messaging Client"><link rel="next" href="ch14.html" title="Chapter 14. AMQP Python Messaging Client"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.
+ Examples
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch13.html">Prev</a> </td><th width="60%" align="center">Chapter 13.
+ AMQP .NET Messaging Client
+ </th><td width="20%" align="right"> <a accesskey="n" href="ch14.html">Next</a></td></tr></table><hr></div><div class="section" title="2. Examples"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQP.NETMessagingClient-Examples"></a>2.
+ Examples
+ </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <a class="ulink" href="http://svn.apache.org/viewvc/qpid/trunk/qpid/dotnet/client-010/examples/" target="_top">http://svn.apache.org/viewvc/qpid/trunk/qpid/dotnet/client-010/examples/</a>
+ </p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch13.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch13.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13.
+ AMQP .NET Messaging Client
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14.
+ AMQP Python Messaging Client
+ </td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch14.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 14. AMQP Python Messaging Client</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt04.html" title="Part IV. AMQP Messaging Clients Clients"><link rel="prev" href="ch13s02.html" title="2. Examples"><link rel="next" href="ch14s02.html" title="2. Examples"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14.
+ AMQP Python Messaging Client
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch13s02.html">Prev</a> </td><th width="60%" align="center">Part IV. AMQP Messaging Clients Clients</th><td width="20%" align="right"> <a accesskey="n" href="ch14s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 14. AMQP Python Messaging Client"><div class="titlepage"><div><div><h2 class="title"><a name="id2964906"></a>Chapter 14.
+ AMQP Python Messaging Client
+ </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch14.html#AMQPPythonMessagingClient-UserGuides">1.
+ User Guides
+ </a></span></dt><dt><span class="section"><a href="ch14s02.html">2.
+ Examples
+ </a></span></dt><dt><span class="section"><a href="ch14s03.html">3.
+ PythonBrokerTest
+ </a></span></dt><dd><dl><dt><span class="section"><a href="ch14s03.html#PythonBrokerTest-PythonBrokerSystemTestSuite">3.1.
+ Python Broker System Test Suite
+ </a></span></dt></dl></dd></dl></div><div class="section" title="1. User Guides"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPPythonMessagingClient-UserGuides"></a>1.
+ User Guides
+ </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <a class="ulink" href="http://qpid.apache.org/docs/api/python/html/index.html" target="_top">Python Client API Guide</a>
+ </p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch13s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2.
+ Examples
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2.
+ Examples
+ </td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch14s02.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2. Examples</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch14.html" title="Chapter 14. AMQP Python Messaging Client"><link rel="prev" href="ch14.html" title="Chapter 14. AMQP Python Messaging Client"><link rel="next" href="ch14s03.html" title="3. PythonBrokerTest"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.
+ Examples
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><th width="60%" align="center">Chapter 14.
+ AMQP Python Messaging Client
+ </th><td width="20%" align="right"> <a accesskey="n" href="ch14s03.html">Next</a></td></tr></table><hr></div><div class="section" title="2. Examples"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPPythonMessagingClient-Examples"></a>2.
+ Examples
+ </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+ <a class="ulink" href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/python/examples/" target="_top">AMQP Python Client Examples </a>
+ </p></li><li class="listitem"><p>
+ <a class="ulink" href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/python/examples/README" target="_top">Running the AMQP Python Client Examples </a>
+ </p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch14.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch14s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 14.
+ AMQP Python Messaging Client
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 3.
+ PythonBrokerTest
+ </td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch14s03.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,50 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>3. PythonBrokerTest</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch14.html" title="Chapter 14. AMQP Python Messaging Client"><link rel="prev" href="ch14s02.html" title="2. Examples"><link rel="next" href="ch15.html" title="Chapter 15. AMQP Ruby Messaging Client"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.
+ PythonBrokerTest
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14s02.html">Prev</a> </td><th width="60%" align="center">Chapter 14.
+ AMQP Python Messaging Client
+ </th><td width="20%" align="right"> <a accesskey="n" href="ch15.html">Next</a></td></tr></table><hr></div><div class="section" title="3. PythonBrokerTest"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2975508"></a>3.
+ PythonBrokerTest
+ </h2></div></div></div><div class="section" title="3.1. Python Broker System Test Suite"><div class="titlepage"><div><div><h3 class="title"><a name="PythonBrokerTest-PythonBrokerSystemTestSuite"></a>3.1.
+ Python Broker System Test Suite
+ </h3></div></div></div><p>
+ This is a suite of python client tests that exercise and verify
+ broker functionality. Python allows us to rapidly develop client
+ test scenarios and provides a 'neutral' set of tests that can run
+ against any AMQP-compliant broker.
+ </p><p>
+ The python/tests directory contains a collection of python
+ modules, each containing several unittest classes, each
+ containing a set of test methods that represent some test
+ scenario. Test classes inherit qpid.TestBas from
+ qpid/testlib.py, it inherits unittest.TestCase
+ but adds some qpid-specific setUp/tearDown and
+ convenience functions.
+ </p><p>
+ TODO: get pydoc generated up to qpid wiki or website
+ automatically?
+ </p><div class="section" title="3.1.1. Running the tests"><div class="titlepage"><div><div><h4 class="title"><a name="PythonBrokerTest-Runningthetests"></a>3.1.1.
+ Running the tests
+ </h4></div></div></div><p>
+ Simplest way to run the tests:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Run a broker on the default port
+ </p></li><li class="listitem"><p>
+ ./run_tests
+ </p></li></ul></div><p>
+ For additional options: ./run_tests --help
+ </p></div><div class="section" title="3.1.2. Expected failures"><div class="titlepage"><div><div><h4 class="title"><a name="PythonBrokerTest-Expectedfailures"></a>3.1.2.
+ Expected failures
+ </h4></div></div></div><p>
+ Until we complete functionality, tests may fail because the
+ tested functionality is missing in the broker. To skip
+ expected failures in the C++ or Java brokers:
+ </p><pre class="programlisting">
+./run_tests -I cpp_failing.txt
+./run_tests -I java_failing.txt
+ </pre><p>
+ If you fix a failure, please remove it from the corresponding
+ list.
+ </p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch14.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch15.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2.
+ Examples
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15.
+ AMQP Ruby Messaging Client
+ </td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch15.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 15. AMQP Ruby Messaging Client</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt04.html" title="Part IV. AMQP Messaging Clients Clients"><link rel="prev" href="ch14s03.html" title="3. PythonBrokerTest"><link rel="next" href="pt05.html" title="Part V. Appendices"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15.
+ AMQP Ruby Messaging Client
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14s03.html">Prev</a> </td><th width="60%" align="center">Part IV. AMQP Messaging Clients Clients</th><td width="20%" align="right"> <a accesskey="n" href="pt05.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 15. AMQP Ruby Messaging Client"><div class="titlepage"><div><div><h2 class="title"><a name="id2941070"></a>Chapter 15.
+ AMQP Ruby Messaging Client
+ </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch15.html#AMQPRubyMessagingClient-Examples">1.
+ Examples
+ </a></span></dt></dl></div><p>
+ The Ruby Messaging Client currently has little documentation and
+ few examples.
+ </p><div class="section" title="1. Examples"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPRubyMessagingClient-Examples"></a>1.
+ Examples
+ </h2></div></div></div><p>
+ <a class="ulink" href="https://svn.apache.org/repos/asf/qpid/trunk/qpid/ruby/examples" target="_top">AMQP Ruby Messaging Client Examples</a>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pt05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">3.
+ PythonBrokerTest
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Part V. Appendices</td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch16.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,253 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Chapter 16. AMQP compatibility</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="pt05.html" title="Part V. Appendices"><link rel="prev" href="pt05.html" title="Part V. Appendices"><link rel="next" href="ch16s02.html" title="2. Interop table by AMQP specification version"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16.
+ AMQP compatibility
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pt05.html">Prev</a> </td><th width="60%" align="center">Part V. Appendices</th><td width="20%" align="right"> <a accesskey="n" href="ch16s02.html">Next</a></td></tr></table><hr></div><div class="chapter" title="Chapter 16. AMQP compatibility"><div class="titlepage"><div><div><h2 class="title"><a name="AMQP-Compatibility"></a>Chapter 16.
+ AMQP compatibility
+ </h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch16.html#AMQPcompatibility-AMQPCompatibilityofQpidreleases-3A">1.
+ AMQP
+ Compatibility of Qpid releases:
+ </a></span></dt><dt><span class="section"><a href="ch16s02.html">2.
+ Interop
+ table by AMQP specification version
+ </a></span></dt></dl></div><p>
+ Qpid provides the most complete and compatible implementation
+ of AMQP. And is the most aggressive in implementing the latest
+ version of the specification.
+ </p><p>
+ There are two brokers:
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>C++ with support for AMQP 0-10</p></li><li class="listitem"><p>Java with support for AMQP 0-8 and 0-9 (0-10 planned)</p></li></ul></div><p>
+ There are client libraries for C++, Java (JMS), .Net (written in
+ C#), python and ruby.
+ </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>All clients support 0-10 and interoperate with the C++
+ broker.
+ </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The JMS client supports 0-8, 0-9 and 0-10 and interoperates
+ with both brokers.
+ </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>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.
+ </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>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.
+ </p></li></ul></div><p>
+ QMF Management is supported in Ruby, Python, C++, and via QMan
+ for Java JMX & WS-DM.
+ </p><div class="section" title="1. AMQP Compatibility of Qpid releases:"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPcompatibility-AMQPCompatibilityofQpidreleases-3A"></a>1.
+ AMQP
+ Compatibility of Qpid releases:
+ </h2></div></div></div><p>
+ 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.
+ </p><p>
+ Here is a matrix that describes the different versions supported
+ by each release. The status symbols are interpreted as follows:
+ </p><div class="variablelist"><dl><dt><span class="term">Y</span></dt><dd><p>supported</p></dd><dt><span class="term">N</span></dt><dd><p>unsupported</p></dd><dt><span class="term">IP</span></dt><dd><p>in progress</p></dd><dt><span class="term">P</span></dt><dd><p>planned</p></dd></dl></div><div class="table"><a name="id2978660"></a><p class="title"><b>Table 16.1. AMQP Version Support by Qpid Release</b></p><div class="table-contents"><table summary="AMQP Version Support by Qpid Release" border="1"><colgroup><col><col><col><col><col><col></colgroup><tbody><tr><td>
+ Component
+ </td><td>
+ Spec
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+
+ </td></tr><tr><td>
+
+ </td><td>
+
+ </td><td>
+ M2.1
+ </td><td>
+ M3
+ </td><td>
+ M4
+ </td><td>
+ 0.5
+ </td></tr><tr><td>
+ java client
+ </td><td>
+ 0-10
+ </td><td>
+
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-9
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-8
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ java broker
+ </td><td>
+ 0-10
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+ P
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-9
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-8
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ c++ client/broker
+ </td><td>
+ 0-10
+ </td><td>
+
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-9
+ </td><td>
+ Y
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+
+ </td></tr><tr><td>
+ python client
+ </td><td>
+ 0-10
+ </td><td>
+
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-9
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-8
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ ruby client
+ </td><td>
+ 0-10
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-8
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ C# client
+ </td><td>
+ 0-10
+ </td><td>
+
+ </td><td>
+
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+
+ </td><td>
+ 0-8
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr></tbody></table></div></div><br class="table-break"></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pt05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="pt05.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch16s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part V. Appendices </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2.
+ Interop
+ table by AMQP specification version
+ </td></tr></table></div></body></html>
Added: qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html?rev=956304&view=auto
==============================================================================
--- qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html (added)
+++ qpid/site/docs/books/0.7/Qpid-Book/html/ch16s02.html Sat Jun 19 22:15:03 2010
@@ -0,0 +1,155 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>2. Interop table by AMQP specification version</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="Apache Qpid"><link rel="up" href="ch16.html" title="Chapter 16. AMQP compatibility"><link rel="prev" href="ch16.html" title="Chapter 16. AMQP compatibility"><link rel="next" href="ch17.html" title="Chapter 17. Qpid Interoperability Documentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.
+ Interop
+ table by AMQP specification version
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch16.html">Prev</a> </td><th width="60%" align="center">Chapter 16.
+ AMQP compatibility
+ </th><td width="20%" align="right"> <a accesskey="n" href="ch17.html">Next</a></td></tr></table><hr></div><div class="section" title="2. Interop table by AMQP specification version"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="AMQPcompatibility-InteroptablebyAMQPspecificationversion"></a>2.
+ Interop
+ table by AMQP specification version
+ </h2></div></div></div><p>
+ Above table represented in another format.
+ </p><div class="table"><a name="id2906450"></a><p class="title"><b>Table 16.2. AMQP Version Support - alternate format</b></p><div class="table-contents"><table summary="AMQP Version Support - alternate format" border="1"><colgroup><col><col><col><col><col></colgroup><tbody><tr><td>
+
+ </td><td>
+ release
+ </td><td>
+ 0-8
+ </td><td>
+ 0-9
+ </td><td>
+ 0-10
+ </td></tr><tr><td>
+ java client
+ </td><td>
+ M3 M4 0.5
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ java client
+ </td><td>
+ M2.1
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td></tr><tr><td>
+ java broker
+ </td><td>
+ M3 M4 0.5
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td></tr><tr><td>
+ java broker
+ </td><td>
+ trunk
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ P
+ </td></tr><tr><td>
+ java broker
+ </td><td>
+ M2.1
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td></tr><tr><td>
+ c++ client/broker
+ </td><td>
+ M3 M4 0.5
+ </td><td>
+ N
+ </td><td>
+ N
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ c++ client/broker
+ </td><td>
+ M2.1
+ </td><td>
+ N
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td></tr><tr><td>
+ python client
+ </td><td>
+ M3 M4 0.5
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td></tr><tr><td>
+ python client
+ </td><td>
+ M2.1
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td></tr><tr><td>
+ ruby client
+ </td><td>
+ M3 M4 0.5
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td></tr><tr><td>
+ ruby client
+ </td><td>
+ trunk
+ </td><td>
+ Y
+ </td><td>
+ Y
+ </td><td>
+ P
+ </td></tr><tr><td>
+ C# client
+ </td><td>
+ M3 M4 0.5
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td><td>
+ N
+ </td></tr><tr><td>
+ C# client
+ </td><td>
+ trunk
+ </td><td>
+ Y
+ </td><td>
+ N
+ </td><td>
+ Y
+ </td></tr></tbody></table></div></div><br class="table-break"></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch16.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch16.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch17.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16.
+ AMQP compatibility
+ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17.
+ Qpid Interoperability Documentation
+ </td></tr></table></div></body></html>
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org