Author: gsim
Date: Thu Jul  8 09:30:24 2010
New Revision: 961665

URL: http://svn.apache.org/viewvc?rev=961665&view=rev
Log:
Improved sections on reliability

Modified:
    qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml

Modified: qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml?rev=961665&r1=961664&r2=961665&view=diff
==============================================================================
--- qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml (original)
+++ qpid/trunk/qpid/doc/book/src/Programming-In-Apache-Qpid.xml Thu Jul  8 
09:30:24 2010
@@ -1852,27 +1852,37 @@ sender.setCapacity(100);
 
     <section>
       <title>Reliability</title>
-      <para>The Qpid Messaging API supports automatic reconnect, guaranteed 
delivery via persistent messages, reliability options in senders and receivers, 
and cluster failover. This section shows how programs can take advantage of 
these features.</para>
+      <para>The Qpid Messaging API supports automatic reconnect, guaranteed 
delivery via persistent messages, and acknowledged message transfer. This 
section shows how programs can take advantage of these features.</para>
       <section>
        <title>Reconnect</title>
        <para>Connections in the Qpid Messaging API support automatic
-       reconnect if a connection is lost. This is done using connection
-       options. The following example shows how to use connection options in 
C++ and Python.</para>
+       reconnect if a connection is lost. This is controlled using
+       connection options. The following example shows how to use
+       connection options in C++ and Python.</para>
 
        <example>
          <title>Specifying Connection Options in C++ and Python</title>
 
-         <para>In C++, these options are set using 
<function>Connection::setOption()</function>:</para>
+         <para>In C++, these options can be set using 
<function>Connection::setOption()</function> or by passing in a set of options 
to the constructor. The options can be passed in as a map or in string 
form:</para>
 
          <programlisting><![CDATA[
-Connection connection(broker);
+Connection connection("localhost:5672", "{reconnect: true}");
+try {
+    connection.open();
+    !!! SNIP !!!
+    ]]></programlisting>
+
+or 
+
+         <programlisting><![CDATA[
+Connection connection("localhost:5672");
 connection.setOption("reconnect", true);
 try {
     connection.open();
     !!! SNIP !!!
     ]]></programlisting>
 
-         <para>In Python, these options are set using named arguments in
+         <para>In Python, these options can be set as attributes of the 
connection or using named arguments in
          the <function>Connection</function> constructor:</para>
 
          <programlisting><![CDATA[
@@ -1882,15 +1892,24 @@ try:
   !!! SNIP !!!
   ]]></programlisting>
 
+or 
+
+         <programlisting><![CDATA[
+connection = Connection("localhost:5672")
+connection.reconnect = True
+try:
+  connection.open()
+  !!! SNIP !!!
+  ]]></programlisting>
+
          <para>See the reference documentation for details on how to set
          these on connections for each language.</para>
        </example>
 
-       <para>The following table lists the connection options that can
-       be used.</para>
+       <para>The following table lists the connection options that control the 
reconnect behaviour.</para>
 
        <table pgwide="1">
-         <title>Connection Options</title>
+         <title>Reconnect Options</title>
          <tgroup cols="3">
            <thead>
              <colspec colnum="1" colwidth="1*"/>
@@ -2012,14 +2031,35 @@ sender.send(Message("Hello world!"));
        <para>When creating a sender or a receiver, you can specify a 
reliability option in the address string. For instance, the following specifies 
<literal>at-least-once</literal> as the reliability mode for a sender:</para>
 
        <programlisting>
-Sender = 
session.createSender("topic;{create:always,link:{reliability:at-least-once}}");
+Sender = session.createSender("topic;{link:{reliability:at-least-once}}");
        </programlisting>
 
-       <para>The modes <literal>unreliable</literal>, 
<literal>at-most-once</literal>, <literal>at-least-once</literal>, and 
<literal>exactly-once</literal> are supported. These modes govern the 
reliability of the connection between the client and the messaging 
broker.</para>
+       <para>The recognised modes are <literal>unreliable</literal>, 
<literal>at-most-once</literal>, <literal>at-least-once</literal>, and 
<literal>exactly-once</literal>. These modes govern the transfer of messages. 
Currently only <literal>unreliable</literal> and 
<literal>at-least-once</literal> are supported.
 
-       <para>The modes <literal>unreliable</literal> and 
<literal>at-most-once</literal> are currently synonyms. In a receiver, this 
mode means that messages received on an auto-delete subscription queue may be 
lost in the event of a broker failure. In a sender, this mode means that the 
sender can consider a message sent as soon as it is written to the wire, and 
need not wait for broker acknowledgement before considering the message 
sent.</para>
+            <footnote><para>If at-most-once is requested, unreliable will be 
used and for durable messages on durable queues there is the possibility that 
messages will be redelivered; if exactly-once is requested, at-most-once will 
be used and the application needs to be able to deal with 
duplicates.</para></footnote>
 
-       <para>The mode <literal>at-most-once</literal> ensures that messages 
are not lost, but duplicates of a message may occur. In a receiver, this mode 
ensures that messages are not lost in event of a broker failure. In a sender, 
this means that messages are kept in a replay buffer after they have been sent, 
and removed from this buffer only after the broker acknowledges receipt; if a 
broker failure occurs, messages in the replay buffer are resent upon 
reconnection. The mode <literal>exactly-once</literal> is similar to 
<literal>at-most-once</literal>, but eliminates duplicate messages.</para>
+        </para>
+
+        <para>The <literal>unreliable</literal> mode means that
+        messages may be lost in the event of a client, connection or
+        broker failure. The broker will not wait for unreliable
+        receivers to acknowledge receipt before discarding
+        messages. Likewise an unreliable sender will not wait for
+        broker acknowledgement before considering the message
+        sent.</para>
+
+       <para>The <literal>at-least-once</literal> mode ensures that
+       messages are not lost in the event of client, connection or
+       broker failure
+        <footnote><para>To survive broker failure a message must be durably 
recorded.</para></footnote>
+        . Duplicates of a message may delivered
+       however. The broker will not dequeue messages it sends to
+       receivers in at-least-once mode until they are
+       acknowledged. Messages sent by senders configure with
+       at-least-once mode are kept in a replay buffer until the
+       broker acknowledges receipt; in the event of a broker or
+       connection failure, messages in the replay buffer are resent
+       upon reconnection.</para>
 
        <!-- What is the default? ### -->
 
@@ -2028,21 +2068,44 @@ Sender = session.createSender("topic;{cr
       <section>
        <title>Cluster Failover</title>
 
-       <para>The messaging broker can be run in clustering mode, which 
provides high reliability at-least-once messaging. If one broker in a cluster 
fails, clients can choose another broker in the cluster and continue their 
work.</para>
+       <para>The messaging broker can be run in clustering mode, which 
provides high reliability through replicating state between brokers in the 
cluster. If one broker in a cluster fails, clients can choose another broker in 
the cluster and continue their work. Each broker in the cluster also advertises 
the addresses of all known brokers
+
+<footnote><para>This is done via the amq.failover exchange in AMQP 
0-10</para></footnote>
+
+. A client can use this information to dynamically keep the list of 
reconnection urls up to date.</para>
 
-       <para>In C++, the <classname>FailoverUpdates</classname> class keeps 
track of the brokers in a cluster, so a reconnect can select another broker in 
the cluster to connect to:</para>
+       <para>In C++, the <classname>FailoverUpdates</classname> class provides 
this functionality:</para>
 
        <example>
-         <title>Cluster Failover in C++</title>
+         <title>Tracking cluster membership</title>
+  
+            <para>In C++:</para> 
+
            <programlisting><![CDATA[
 #include <qpid/messaging/FailoverUpdates.h>
 ...
-Connection connection(broker);
+Connection connection("localhost:5672");
 connection.setOption("reconnect", true);
 try {
     connection.open();
-    std::auto_ptr<FailoverUpdates> updates(new FailoverUpdates(connection));]]>
+    std::auto_ptr<FailoverUpdates> updates(new FailoverUpdates(connection));
+]]>
        </programlisting>
+
+            <para>In python:</para> 
+
+           <programlisting><![CDATA[
+import qpid.messaging.util
+...
+connection = Connection("localhost:5672")
+connection.reconnect = True
+try:
+  connection.open()
+  auto_fetch_reconnect_urls(connection)
+]]>
+       </programlisting>
+
+
        </example>
       </section>
 
@@ -2062,7 +2125,7 @@ try {
       is not secure. The PLAIN method is secure only when used
       together with SSL.</para>
 
-      <para>To enable Kerberos in a client, set the 
<varname>sals-mechanism</varname> connection option to 
<literal>GSSAPI</literal>:</para>
+      <para>To enable Kerberos in a client, set the 
<varname>sasl-mechanism</varname> connection option to 
<literal>GSSAPI</literal>:</para>
 
 
       <programlisting>



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to