You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2013/01/31 16:32:51 UTC

svn commit: r1441019 [3/6] - in /qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book: html/ pdf/

Modified: qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/ch02s03.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/ch02s03.html?rev=1441019&r1=1441018&r2=1441019&view=diff
==============================================================================
--- qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/ch02s03.html (original)
+++ qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/ch02s03.html Thu Jan 31 15:32:50 2013
@@ -1,71 +1,71 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>2.3.  QMF Python Console Tutorial</title><link rel="stylesheet" href="css/style.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="AMQP Messaging Broker (Implemented in C++)"><link rel="up" href="chapter-Managing-CPP-Broker.html" title="Chapter 2.  Managing the AMQP Messaging Broker"><link rel="prev" href="ch02s02.html" title="2.2.  Qpid Management Framework"></head><body><div class="container" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><DIV class="header"><DIV class="logo"><H1>Apache Qpid™</H1><H2>Open Source AMQP Messaging</H2></DIV></DIV><DIV class="menu_box"><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Apache Qpid</H3><UL><LI><A href="http://qpid.apache.org/index.html">Home</A></LI><LI><A href="http://qpid.apache.org/download.html">Download</A
 ></LI><LI><A href="http://qpid.apache.org/getting_started.html">Getting Started</A></LI><LI><A href="http://www.apache.org/licenses/">License</A></LI><LI><A href="https://cwiki.apache.org/qpid/faq.html">FAQ</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Documentation</H3><UL><LI><A href="http://qpid.apache.org/documentation.html#doc-release">Latest Release</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-trunk">Trunk</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-archives">Archive</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Community</H3><UL><LI><A href="http://qpid.apache.org/getting_involved.html">Getting Involved</A></LI><LI><A href="http://qpid.apache.org/source_repository.html">Source Repository</A></LI><LI><A href="http://qpid.apache.org/mailing_lists.html">Mailing Lists</A></LI><LI><A href=
 "https://cwiki.apache.org/qpid/">Wiki</A></LI><LI><A href="https://issues.apache.org/jira/browse/qpid">Issue Reporting</A></LI><LI><A href="http://qpid.apache.org/people.html">People</A></LI><LI><A href="http://qpid.apache.org/acknowledgements.html">Acknowledgements</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Developers</H3><UL><LI><A href="https://cwiki.apache.org/qpid/building.html">Building Qpid</A></LI><LI><A href="https://cwiki.apache.org/qpid/developer-pages.html">Developer Pages</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About AMQP</H3><UL><LI><A href="http://qpid.apache.org/amqp.html">What is AMQP?</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About Apache</H3><UL><LI><A href="http://www.apache.org">Home</A></LI><LI><A href="http://www.apache.org/founda
 tion/sponsorship.html">Sponsorship</A></LI><LI><A href="http://www.apache.org/foundation/thanks.html">Thanks</A></LI><LI><A href="http://www.apache.org/security/">Security</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV></DIV><div class="main_text_area"><div class="main_text_area_top"></div><div class="main_text_area_body"><DIV class="breadcrumbs"><span class="breadcrumb-link"><a href="index.html">AMQP Messaging Broker (Implemented in C++)</a></span> &gt; <span class="breadcrumb-link"><a href="chapter-Managing-CPP-Broker.html">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>2.3.  QMF Python Console Tutorial</title><link rel="stylesheet" type="text/css" href="css/style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.77.1"><link rel="home" href="index.html" title="AMQP Messaging Broker (Implemented in C++)"><link rel="up" href="chapter-Managing-CPP-Broker.html" title="Chapter 2.  Managing the AMQP Messaging Broker"><link rel="prev" href="ch02s02.html" title="2.2.  Qpid Management Framework"></head><body><div class="container" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><DIV class="header"><DIV class="logo"><H1>Apache Qpid™</H1><H2>Open Source AMQP Messaging</H2></DIV></DIV><DIV class="menu_box"><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Apache Qpid</H3><UL><LI><A href="http://qpid.apache.org/index.html">Home</A></LI><LI><A href="http://qpid.apache.org/download.html">Download</A>
 </LI><LI><A href="http://qpid.apache.org/getting_started.html">Getting Started</A></LI><LI><A href="http://www.apache.org/licenses/">License</A></LI><LI><A href="https://cwiki.apache.org/qpid/faq.html">FAQ</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Documentation</H3><UL><LI><A href="http://qpid.apache.org/documentation.html#doc-release">Latest Release</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-trunk">Trunk</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-archives">Archive</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Community</H3><UL><LI><A href="http://qpid.apache.org/getting_involved.html">Getting Involved</A></LI><LI><A href="http://qpid.apache.org/source_repository.html">Source Repository</A></LI><LI><A href="http://qpid.apache.org/mailing_lists.html">Mailing Lists</A></LI><LI><A href="
 https://cwiki.apache.org/qpid/">Wiki</A></LI><LI><A href="https://issues.apache.org/jira/browse/qpid">Issue Reporting</A></LI><LI><A href="http://qpid.apache.org/people.html">People</A></LI><LI><A href="http://qpid.apache.org/acknowledgements.html">Acknowledgements</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Developers</H3><UL><LI><A href="https://cwiki.apache.org/qpid/building.html">Building Qpid</A></LI><LI><A href="https://cwiki.apache.org/qpid/developer-pages.html">Developer Pages</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About AMQP</H3><UL><LI><A href="http://qpid.apache.org/amqp.html">What is AMQP?</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About Apache</H3><UL><LI><A href="http://www.apache.org">Home</A></LI><LI><A href="http://www.apache.org/foundat
 ion/sponsorship.html">Sponsorship</A></LI><LI><A href="http://www.apache.org/foundation/thanks.html">Thanks</A></LI><LI><A href="http://www.apache.org/security/">Security</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV></DIV><div class="main_text_area"><div class="main_text_area_top"></div><div class="main_text_area_body"><DIV class="breadcrumbs"><span class="breadcrumb-link"><a href="index.html">AMQP Messaging Broker (Implemented in C++)</a></span> &gt; <span class="breadcrumb-link"><a href="chapter-Managing-CPP-Broker.html">
       Managing the AMQP Messaging Broker
     </a></span> &gt; <span class="breadcrumb-node">
       QMF Python Console Tutorial
-    </span></DIV><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="id2528201"></a>2.3. 
+    </span></DIV><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="idp1194448"></a>2.3. 
       QMF Python Console Tutorial
-    </h2></div></div></div><div class="itemizedlist"><ul><li><p>
+    </h2></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
                 <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-PrerequisiteInstallQpidMessaging" title="2.3.1.  Prerequisite - Install Qpid Messaging">Section 2.3.1, “
             Prerequisite
             - Install Qpid Messaging
           ”</a>
-              </p></li><li><p>
+              </p></li><li class="listitem"><p>
                 <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-SynchronousConsoleOperations" title="2.3.2.  Synchronous Console Operations">Section 2.3.2, “
             Synchronous
             Console Operations
           ”</a>
-              </p></li><li><p>
-                </p><div class="itemizedlist"><ul><li><p>
+              </p></li><li class="listitem"><p>
+                </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
                     <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-CreatingaQMFConsoleSessionandAttachingtoaBroker" title="2.3.2.1.  Creating a QMF Console Session and Attaching to a Broker">Section 2.3.2.1, “
             Creating a QMF Console Session and Attaching to a Broker
           ”</a>
-                  </p></li><li><p>
+                  </p></li><li class="listitem"><p>
                     <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-AccessingManagedObjects" title="2.3.2.2.  Accessing Managed Objects">Section 2.3.2.2, “
             Accessing
             Managed Objects
           ”</a>
-                  </p></li><li><p>
-                    </p><div class="itemizedlist"><ul><li><p>
+                  </p></li><li class="listitem"><p>
+                    </p><div class="itemizedlist"><ul class="itemizedlist" type="square"><li class="listitem"><p>
                         <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-ViewingPropertiesandStatisticsofanObject" title="Viewing Properties and Statistics of an Object">the section called “
             Viewing Properties and Statistics of an Object
           ”</a>
-                      </p></li><li><p>
+                      </p></li><li class="listitem"><p>
                         <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-InvokingMethodsonanObject" title="Invoking Methods on an Object">the section called “
             Invoking
             Methods on an Object
           ”</a>
                       </p></li></ul></div><p>
                   </p></li></ul></div><p>
-              </p></li><li><p>
+              </p></li><li class="listitem"><p>
                 <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-AsynchronousConsoleOperations" title="2.3.3.  Asynchronous Console Operations">Section 2.3.3, “
             Asynchronous
             Console Operations
           ”</a>
-              </p></li><li><p>
-                </p><div class="itemizedlist"><ul><li><p>
+              </p></li><li class="listitem"><p>
+                </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
                     <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-CreatingaConsoleClasstoReceiveAsynchronousData" title="2.3.3.1.  Creating a Console Class to Receive Asynchronous Data">Section 2.3.3.1, “
             Creating a Console Class to Receive Asynchronous Data
           ”</a>
-                  </p></li><li><p>
+                  </p></li><li class="listitem"><p>
                     <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-ReceivingEvents" title="2.3.3.2.  Receiving Events">Section 2.3.3.2, “
             Receiving
             Events
           ”</a>
-                  </p></li><li><p>
+                  </p></li><li class="listitem"><p>
                     <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-ReceivingObjects" title="2.3.3.3.  Receiving Objects">Section 2.3.3.3, “
             Receiving
             Objects
           ”</a>
-                  </p></li><li><p>
+                  </p></li><li class="listitem"><p>
                     <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-AsynchronousMethodCallsandMethodTimeouts" title="2.3.3.4.  Asynchronous Method Calls and Method Timeouts">Section 2.3.3.4, “
             Asynchronous Method Calls and Method Timeouts
           ”</a>
                   </p></li></ul></div><p>
-              </p></li><li><p>
+              </p></li><li class="listitem"><p>
                 <a class="xref" href="ch02s03.html#QMFPythonConsoleTutorial-DiscoveringwhatKindsofObjectsareAvailable" title="2.3.4.  Discovering what Kinds of Objects are Available">Section 2.3.4, “
             Discovering what Kinds of Objects are Available
           ”</a>
-              </p></li></ul></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-PrerequisiteInstallQpidMessaging"></a>2.3.1. 
+              </p></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-PrerequisiteInstallQpidMessaging"></a>2.3.1. 
             Prerequisite
             - Install Qpid Messaging
           </h3></div></div></div><p>
@@ -91,7 +91,7 @@
             on a single system (even a laptop). For more realistic
             deployments, the broker can be deployed on a server and the
             client/QMF libraries installed on other systems.
-          </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-SynchronousConsoleOperations"></a>2.3.2. 
+          </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-SynchronousConsoleOperations"></a>2.3.2. 
             Synchronous
             Console Operations
           </h3></div></div></div><p>
@@ -103,7 +103,7 @@
             the message bus is required to complete an operation, the
             function call blocks and waits for the expected result (or
             timeout failure) before returning control to the caller.
-          </p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-CreatingaQMFConsoleSessionandAttachingtoaBroker"></a>2.3.2.1. 
+          </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-CreatingaQMFConsoleSessionandAttachingtoaBroker"></a>2.3.2.1. 
             Creating a QMF Console Session and Attaching to a Broker
           </h4></div></div></div><p>
             For the purposes of this tutorial, code examples will be shown as
@@ -163,7 +163,7 @@ Connection Failed
             session attempts to establish the connection in the background.
             This will be covered in detail in the section on asynchronous
             operations.
-          </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-AccessingManagedObjects"></a>2.3.2.2. 
+          </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-AccessingManagedObjects"></a>2.3.2.2. 
             Accessing
             Managed Objects
           </h4></div></div></div><p>
@@ -196,7 +196,7 @@ Connection Failed
 org.apache.qpid.broker:queue[0-1537-1-0-58] 0-0-1-0-1152921504606846979:reply-localhost.localdomain.32004
 org.apache.qpid.broker:queue[0-1537-1-0-61] 0-0-1-0-1152921504606846979:topic-localhost.localdomain.32004
 &gt;&gt;&gt; 
-</pre><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="QMFPythonConsoleTutorial-ViewingPropertiesandStatisticsofanObject"></a>
+</pre><div class="section"><div class="titlepage"><div><div><h5 class="title"><a name="QMFPythonConsoleTutorial-ViewingPropertiesandStatisticsofanObject"></a>
             Viewing Properties and Statistics of an Object
           </h5></div></div></div><p>
             Let us now focus our attention on one of the queue objects.
@@ -293,7 +293,7 @@ u'reply-localhost.localdomain.32004'
                     The <span class="emphasis"><em>update</em></span> method was added after the M4 release
                     of Qpid/Qmf. It may not be available in your
                     distribution.
-                  </p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="QMFPythonConsoleTutorial-InvokingMethodsonanObject"></a>
+                  </p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a name="QMFPythonConsoleTutorial-InvokingMethodsonanObject"></a>
             Invoking
             Methods on an Object
           </h5></div></div></div><p>
@@ -367,7 +367,7 @@ OK
             types the arguments are and which arguments are input, which are
             output, or which are both. This will be addressed later in the
             "Discovering what Kinds of Objects are Available" section.
-          </p></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-AsynchronousConsoleOperations"></a>2.3.3. 
+          </p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-AsynchronousConsoleOperations"></a>2.3.3. 
             Asynchronous
             Console Operations
           </h3></div></div></div><p>
@@ -393,7 +393,7 @@ OK
           </p><p>
             Note that console applications may always use the synchronous
             mechanisms.
-          </p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-CreatingaConsoleClasstoReceiveAsynchronousData"></a>2.3.3.1. 
+          </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-CreatingaConsoleClasstoReceiveAsynchronousData"></a>2.3.3.1. 
             Creating a Console Class to Receive Asynchronous Data
           </h4></div></div></div><p>
             Asynchronous API operation occurs when the console application
@@ -404,7 +404,7 @@ OK
             methods. Any number of these methods may be overridden by the
             console application. Any method that is not overridden defaults
             to a null handler which takes no action when invoked.
-          </p><div class="table"><a name="id2541085"></a><p class="title"><b>Table 2.4. QMF Python Console Class Methods</b></p><div class="table-contents"><table summary="QMF Python Console Class Methods" border="1"><colgroup><col><col><col></colgroup><tbody><tr><td>
+          </p><div class="table"><a name="idp2685840"></a><p class="title"><b>Table 2.4. QMF Python Console Class Methods</b></p><div class="table-contents"><table summary="QMF Python Console Class Methods" border="1"><colgroup><col><col><col></colgroup><tbody><tr><td>
                   Method
                 </td><td>
                   Arguments
@@ -489,7 +489,7 @@ OK
             the methods such that arriving asynchronous data is printed to
             the screen. This can be used to see all of the arriving
             asynchronous data.
-          </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-ReceivingEvents"></a>2.3.3.2. 
+          </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-ReceivingEvents"></a>2.3.3.2. 
             Receiving
             Events
           </h4></div></div></div><p>
@@ -538,7 +538,7 @@ OK
           </p><pre class="programlisting">
 brokerConnected: Broker connected at: localhost:5672
 event: Thu Jan 29 19:53:19 2009 INFO  org.apache.qpid.broker:bind broker=localhost:5672 ...
-</pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-ReceivingObjects"></a>2.3.3.3. 
+</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-ReceivingObjects"></a>2.3.3.3. 
             Receiving
             Objects
           </h4></div></div></div><p>
@@ -641,11 +641,11 @@ sess.delBroker(broker)
             After reporting the statistics, it checks the timestamps of the
             proxy. <span class="emphasis"><em>getTimestamps</em></span> returns a list of timestamps in the
             order:
-          </p><div class="itemizedlist"><ul><li><p>
+          </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
               <span class="emphasis"><em>Current</em></span> - The timestamp of the sending of this update.
-            </p></li><li><p>
+            </p></li><li class="listitem"><p>
               <span class="emphasis"><em>Create</em></span> - The time of the object's creation
-            </p></li><li><p>
+            </p></li><li class="listitem"><p>
               <span class="emphasis"><em>Delete</em></span> - The time of the object's deletion (or zero if
               not deleted)
             </p></li></ul></div><p>
@@ -675,7 +675,7 @@ sess.bindClass("org.apache.qpid.broker",
             usage by requesting updates to only that class.
             <span class="emphasis"><em>bindClass</em></span> may be called as many times as desired to add
             classes to the list of subscribed classes.
-          </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-AsynchronousMethodCallsandMethodTimeouts"></a>2.3.3.4. 
+          </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="QMFPythonConsoleTutorial-AsynchronousMethodCallsandMethodTimeouts"></a>2.3.3.4. 
             Asynchronous Method Calls and Method Timeouts
           </h4></div></div></div><p>
             Method calls can also be invoked asynchronously. This is useful
@@ -697,7 +697,7 @@ sess.bindClass("org.apache.qpid.broker",
             It is important to realize that the <span class="emphasis"><em>methodResponse</em></span>
             function may be invoked before the asynchronous call returns.
             Make sure your code is written to handle this possibility.
-          </p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-DiscoveringwhatKindsofObjectsareAvailable"></a>2.3.4. 
+          </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="QMFPythonConsoleTutorial-DiscoveringwhatKindsofObjectsareAvailable"></a>2.3.4. 
             Discovering what Kinds of Objects are Available
           </h3></div></div></div><p></p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="chapter-Managing-CPP-Broker.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">2.2. 
       Qpid Management Framework

Modified: qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/chap-Messaging_User_Guide-Active_Passive_Cluster.html
URL: http://svn.apache.org/viewvc/qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/chap-Messaging_User_Guide-Active_Passive_Cluster.html?rev=1441019&r1=1441018&r2=1441019&view=diff
==============================================================================
--- qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/chap-Messaging_User_Guide-Active_Passive_Cluster.html (original)
+++ qpid/site/docs/books/trunk/AMQP-Messaging-Broker-CPP-Book/html/chap-Messaging_User_Guide-Active_Passive_Cluster.html Thu Jan 31 15:32:50 2013
@@ -1,6 +1,6 @@
-<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>1.13. Active-passive Messaging Clusters</title><link rel="stylesheet" href="css/style.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.73.2"><link rel="start" href="index.html" title="AMQP Messaging Broker (Implemented in C++)"><link rel="up" href="ch01.html" title="Chapter 1.  Running the AMQP Messaging Broker"><link rel="prev" href="Using-message-groups.html" title="1.12.  Using Message Groups"><link rel="next" href="ch01s14.html" title="1.14. Queue Replication with the HA module"></head><body><div class="container" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><DIV class="header"><DIV class="logo"><H1>Apache Qpid™</H1><H2>Open Source AMQP Messaging</H2></DIV></DIV><DIV class="menu_box"><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Apache Qpid</H3><UL><LI><A href="http://qpid.apache.org/index
 .html">Home</A></LI><LI><A href="http://qpid.apache.org/download.html">Download</A></LI><LI><A href="http://qpid.apache.org/getting_started.html">Getting Started</A></LI><LI><A href="http://www.apache.org/licenses/">License</A></LI><LI><A href="https://cwiki.apache.org/qpid/faq.html">FAQ</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Documentation</H3><UL><LI><A href="http://qpid.apache.org/documentation.html#doc-release">Latest Release</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-trunk">Trunk</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-archives">Archive</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Community</H3><UL><LI><A href="http://qpid.apache.org/getting_involved.html">Getting Involved</A></LI><LI><A href="http://qpid.apache.org/source_repository.html">Source Repository</A></LI><LI><A h
 ref="http://qpid.apache.org/mailing_lists.html">Mailing Lists</A></LI><LI><A href="https://cwiki.apache.org/qpid/">Wiki</A></LI><LI><A href="https://issues.apache.org/jira/browse/qpid">Issue Reporting</A></LI><LI><A href="http://qpid.apache.org/people.html">People</A></LI><LI><A href="http://qpid.apache.org/acknowledgements.html">Acknowledgements</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Developers</H3><UL><LI><A href="https://cwiki.apache.org/qpid/building.html">Building Qpid</A></LI><LI><A href="https://cwiki.apache.org/qpid/developer-pages.html">Developer Pages</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About AMQP</H3><UL><LI><A href="http://qpid.apache.org/amqp.html">What is AMQP?</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About Apache</H3><UL><LI><A h
 ref="http://www.apache.org">Home</A></LI><LI><A href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</A></LI><LI><A href="http://www.apache.org/foundation/thanks.html">Thanks</A></LI><LI><A href="http://www.apache.org/security/">Security</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV></DIV><div class="main_text_area"><div class="main_text_area_top"></div><div class="main_text_area_body"><DIV class="breadcrumbs"><span class="breadcrumb-link"><a href="index.html">AMQP Messaging Broker (Implemented in C++)</a></span> &gt; <span class="breadcrumb-link"><a href="ch01.html">
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>1.12. Active-passive Messaging Clusters</title><link rel="stylesheet" type="text/css" href="css/style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.77.1"><link rel="home" href="index.html" title="AMQP Messaging Broker (Implemented in C++)"><link rel="up" href="ch01.html" title="Chapter 1.  Running the AMQP Messaging Broker"><link rel="prev" href="Using-message-groups.html" title="1.11.  Using Message Groups"><link rel="next" href="ch01s13.html" title="1.13. Queue Replication with the HA module"></head><body><div class="container" bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><DIV class="header"><DIV class="logo"><H1>Apache Qpid™</H1><H2>Open Source AMQP Messaging</H2></DIV></DIV><DIV class="menu_box"><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Apache Qpid</H3><UL><LI><A href="http://qpid.apache.org/index.
 html">Home</A></LI><LI><A href="http://qpid.apache.org/download.html">Download</A></LI><LI><A href="http://qpid.apache.org/getting_started.html">Getting Started</A></LI><LI><A href="http://www.apache.org/licenses/">License</A></LI><LI><A href="https://cwiki.apache.org/qpid/faq.html">FAQ</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Documentation</H3><UL><LI><A href="http://qpid.apache.org/documentation.html#doc-release">Latest Release</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-trunk">Trunk</A></LI><LI><A href="http://qpid.apache.org/documentation.html#doc-archives">Archive</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Community</H3><UL><LI><A href="http://qpid.apache.org/getting_involved.html">Getting Involved</A></LI><LI><A href="http://qpid.apache.org/source_repository.html">Source Repository</A></LI><LI><A hr
 ef="http://qpid.apache.org/mailing_lists.html">Mailing Lists</A></LI><LI><A href="https://cwiki.apache.org/qpid/">Wiki</A></LI><LI><A href="https://issues.apache.org/jira/browse/qpid">Issue Reporting</A></LI><LI><A href="http://qpid.apache.org/people.html">People</A></LI><LI><A href="http://qpid.apache.org/acknowledgements.html">Acknowledgements</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>Developers</H3><UL><LI><A href="https://cwiki.apache.org/qpid/building.html">Building Qpid</A></LI><LI><A href="https://cwiki.apache.org/qpid/developer-pages.html">Developer Pages</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About AMQP</H3><UL><LI><A href="http://qpid.apache.org/amqp.html">What is AMQP?</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV><DIV class="menu_box_top"></DIV><DIV class="menu_box_body"><H3>About Apache</H3><UL><LI><A hr
 ef="http://www.apache.org">Home</A></LI><LI><A href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</A></LI><LI><A href="http://www.apache.org/foundation/thanks.html">Thanks</A></LI><LI><A href="http://www.apache.org/security/">Security</A></LI></UL></DIV><DIV class="menu_box_bottom"></DIV></DIV><div class="main_text_area"><div class="main_text_area_top"></div><div class="main_text_area_body"><DIV class="breadcrumbs"><span class="breadcrumb-link"><a href="index.html">AMQP Messaging Broker (Implemented in C++)</a></span> &gt; <span class="breadcrumb-link"><a href="ch01.html">
       Running the AMQP Messaging Broker
-    </a></span> &gt; <span class="breadcrumb-node">Active-passive Messaging Clusters</span></DIV><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="chap-Messaging_User_Guide-Active_Passive_Cluster"></a>1.13. Active-passive Messaging Clusters</h2></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2520893"></a>1.13.1. Overview</h3></div></div></div><p>
+    </a></span> &gt; <span class="breadcrumb-node">Active-passive Messaging Clusters</span></DIV><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="chap-Messaging_User_Guide-Active_Passive_Cluster"></a>1.12. Active-passive Messaging Clusters</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp1847248"></a>1.12.1. Overview</h3></div></div></div><p>
 
       The High Availability (HA) module provides
       <em class="firstterm">active-passive</em>, <em class="firstterm">hot-standby</em>
@@ -20,7 +20,7 @@
       This approach relies on an external <em class="firstterm">cluster resource manager</em>
       to detect failures, choose the new primary and handle network partitions. <a class="ulink" href="https://fedorahosted.org/cluster/wiki/RGManager" target="_top">Rgmanager</a> is supported
       initially, but others may be supported in the future.
-    </p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2532805"></a>1.13.1.1. Avoiding message loss</h4></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp3940864"></a>1.12.1.1. Avoiding message loss</h4></div></div></div><p>
 	In order to avoid message loss, the primary broker <span class="emphasis"><em>delays
 	acknowledgment</em></span> of messages received from clients until the message has
 	been replicated to and acknowledged by all of the back-up brokers. This means that
@@ -28,17 +28,16 @@
 	brokers.
       </p><p>
 	Clients keep <span class="emphasis"><em>unacknowledged</em></span> messages in a buffer
-	<sup>[<a name="id2524432" href="#ftn.id2524432" class="footnote">1</a>]</sup>
+	<a href="#ftn.idp2059136" class="footnote"><sup class="footnote"><a name="idp2059136"></a>[1]</sup></a>
 	until they are acknowledged by the primary. If the primary fails, clients will
 	fail-over to the new primary and <span class="emphasis"><em>re-send</em></span> all their
 	unacknowledged messages.
-	<sup>[<a name="id2520820" href="#ftn.id2520820" class="footnote">2</a>]</sup>
-	</p><p>
-	  So if the primary crashes, all the <span class="emphasis"><em>acknowledged</em></span> messages will
-	  be available on the backup that takes over as the new primary. The
-	  <span class="emphasis"><em>unacknowledged</em></span> messages will be re-sent by the clients.  Thus
-	  no messages are lost.
-	</p><p>
+	<a href="#ftn.idp4636288" class="footnote"><sup class="footnote"><a name="idp4636288"></a>[2]</sup></a>
+      </p><p>
+	  So if the primary crashes, all the <span class="emphasis"><em>acknowledged</em></span>
+	  messages will be available on the backup that takes over as the new
+	  primary. The <span class="emphasis"><em>unacknowledged</em></span> messages will be
+	  re-sent by the clients.  Thus no messages are lost.
       </p><p>
 	Note that this means it is possible for messages to be
 	<span class="emphasis"><em>duplicated</em></span>. In the event of a failure it is possible for a
@@ -51,7 +50,11 @@
 	on behalf of all the backups that were connected to the previous
 	primary. This protects those messages against a failure of the new
 	primary until the backups have a chance to connect and catch up.
-      </p><div class="variablelist"><p class="title"><b>Status of a HA broker</b></p><dl><dt><span class="term">Joining</span></dt><dd><p>
+      </p><p>
+	Not all messages need to be replicated to the back-up brokers. If a
+	message is consumed and acknowledged by a regular client before it has
+	been replicated to a backup, then it doesn't need to be replicated.
+      </p><div class="variablelist"><p class="title"><b>Status of a HA broker</b></p><dl class="variablelist"><dt><span class="term">Joining</span></dt><dd><p>
 	      Initial status of a new broker that has not yet connected to the primary.
 	    </p></dd><dt><span class="term">Catch-up</span></dt><dd><p>
 	      A backup broker that is connected to the primary and catching up
@@ -63,45 +66,25 @@
 	      The newly-promoted primary, waiting for backups to connect and catch up.
 	    </p></dd><dt><span class="term">Active</span></dt><dd><p>
 	      The active primary broker with all backups connected and caught-up.
-	    </p></dd></dl></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2540934"></a>1.13.1.2. Replacing the old cluster module</h4></div></div></div><p>
-	The High Availability (HA) module replaces the previous
-	<em class="firstterm">active-active</em> cluster module.  The new active-passive
-	approach has several advantages compared to the existing active-active cluster
-	module.
-	</p><div class="itemizedlist"><ul><li>
-	    It does not depend directly on openais or corosync. It does not use multicast
-	    which simplifies deployment.
-	  </li><li>
-	    It is more portable: in environments that don't support corosync, it can be
-	    integrated with a resource manager available in that environment.
-	  </li><li>
-	    It can take advantage of features provided by the resource manager, for example
-	    virtual IP addresses.
-	  </li><li>
-	    Improved performance and scalability due to better use of multiple CPUs
-	  </li></ul></div><p>
-      </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2535315"></a>1.13.1.3. Limitations</h4></div></div></div><p>
-	There are a number of known limitations in the current preview implementation. These
-	will be fixed in the production versions.
-      </p><div class="itemizedlist"><ul><li>
-	  Transactional changes to queue state are not replicated atomically. If the primary crashes
-	  during a transaction, it is possible that the backup could contain only part of the
-	  changes introduced by a transaction.
-	</li><li>
-	  Configuration changes (creating or deleting queues, exchanges and bindings) are
-	  replicated asynchronously. Management tools used to make changes will consider
-	  the change complete when it is complete on the primary, it may not yet be
-	  replicated to all the backups.
-	</li><li>
-	  Deletions made immediately after a failure (before all the backups are ready)
-	  may be lost on a backup. Queues, exchange or bindings that were deleted on the
-	  primary could re-appear if that backup is promoted to primary on a subsequent
-	  failure.
-	</li><li>
-	  Federated links <span class="emphasis"><em>from</em></span> the primary will be lost in fail over,
-	  they will not be re-connected to the new primary. Federation links
-	  <span class="emphasis"><em>to</em></span> the primary will fail over.
-	</li></ul></div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2531072"></a>1.13.2. Virtual IP Addresses</h3></div></div></div><p>
+	    </p></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp4020448"></a>1.12.1.2. Limitations</h4></div></div></div><p>
+	There are a some known limitations in the current implementation. These
+	will be fixed in furture versions.
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+	    Transactional changes to queue state are not replicated atomically. If
+	    the primary crashes during a transaction, it is possible that the
+	    backup could contain only part of the changes introduced by a
+	    transaction.
+	  </p></li><li class="listitem"><p>
+	    Configuration changes (creating or deleting queues, exchanges and
+	    bindings) are replicated asynchronously. Management tools used to
+	    make changes will consider the change complete when it is complete
+	    on the primary, it may not yet be replicated to all the backups.
+	  </p></li><li class="listitem"><p>
+	    Federated links <span class="emphasis"><em>from</em></span> the primary will be lost
+	    in fail over, they will not be re-connected to the new
+	    primary. Federation links <span class="emphasis"><em>to</em></span> the primary will
+	    fail over.
+	  </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp5523040"></a>1.12.2. Virtual IP Addresses</h3></div></div></div><p>
       Some resource managers (including <span class="command"><strong>rgmanager</strong></span>) support
       <em class="firstterm">virtual IP addresses</em>. A virtual IP address is an IP
       address that can be relocated to any of the nodes in a cluster.  The
@@ -113,43 +96,50 @@
       A virtual IP address can be used by clients and backup brokers to connect
       to the primary. The following sections will explain how to configure
       virtual IP addresses for clients or brokers.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2531132"></a>1.13.3. Configuring the Brokers</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp6034224"></a>1.12.3. Configuring the Brokers</h3></div></div></div><p>
       The broker must load the <code class="filename">ha</code> module, it is loaded by
       default. The following broker options are available for the HA module.
-    </p><div class="table"><a name="ha-broker-options"></a><p class="title"><b>Table 1.21. Broker Options for High Availability Messaging Cluster</b></p><div class="table-contents"><table summary="Broker Options for High Availability Messaging Cluster" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th colspan="2" align="center">
+    </p><div class="table"><a name="ha-broker-options"></a><p class="title"><b>Table 1.20. Broker Options for High Availability Messaging Cluster</b></p><div class="table-contents"><table summary="Broker Options for High Availability Messaging Cluster" border="1"><colgroup><col align="left" class="c1"><col align="left" class="c2"></colgroup><thead><tr><th colspan="2" align="center">
 	      Options for High Availability Messaging Cluster
 	    </th></tr></thead><tbody><tr><td align="left">
 	      <code class="literal">ha-cluster <em class="replaceable"><code>yes|no</code></em></code>
 	    </td><td align="left">
 	      Set to "yes" to have the broker join a cluster.
 	    </td></tr><tr><td align="left">
+	      <code class="literal">ha-queue-replication <em class="replaceable"><code>yes|no</code></em></code>
+	    </td><td align="left">
+	      Enable replication of specific queues without joining a cluster, see <a class="xref" href="chap-Messaging_User_Guide-Active_Passive_Cluster.html#ha-queue-replication" title="1.12.11. Replicating specific queues">Section 1.12.11, “Replicating specific queues”</a>.
+	    </td></tr><tr><td align="left">
 	      <code class="literal">ha-brokers-url <em class="replaceable"><code>URL</code></em></code>
 	    </td><td align="left">
 	      <p>
 		The URL
-		<sup>[<a name="ha-url-grammar" href="#ftn.ha-url-grammar" class="footnote">a</a>]</sup>
+		<a href="#ftn.ha-url-grammar" class="footnote"><sup class="footnote"><a name="ha-url-grammar"></a>[a]</sup></a>
 		used by cluster brokers to connect to each other. The URL should
 		contain a comma separated list of the broker addresses, rather than a
-		virtual IP address. For example:
-		<code class="literal">amqp:node1.exaple.com,node2.exaple.com,node3.exaple.com</code>
+		virtual IP address.
 	      </p>
 	    </td></tr><tr><td align="left"><code class="literal">ha-public-url <em class="replaceable"><code>URL</code></em></code> </td><td align="left">
 	      <p>
-		The URL <sup>[<a href="chap-Messaging_User_Guide-Active_Passive_Cluster.html#ftn.ha-url-grammar" class="footnoteref">a</a>]</sup> used by clients to connect to the cluster.  This can be a list or
-		a single virtual IP address. A virtual IP address is recommended as it
-		simplifies deployment. If not specified this defaults to the value of
-		<code class="literal">ha-brokers-url</code>.
+		The URL <a href="chap-Messaging_User_Guide-Active_Passive_Cluster.html#ftn.ha-url-grammar" class="footnoteref"><sup class="footnoteref">[a]</sup></a> is advertised to
+		clients as the "known-hosts" for fail-over.  It can be a list or
+		a single virtual IP address. A virtual IP address is recommended.
 	      </p>
 	      <p>
-		This option allows you to put client traffic on a different network from
-		broker traffic, which is recommended.
+		Using this option you can put client and broker traffic on
+		separate networks, which is recommended.
+	      </p>
+	      <p>
+		Note: When HA clustering is enabled the broker option
+		<code class="literal">known-hosts-url</code> is ignored and over-ridden by
+		the <code class="literal">ha-public-url</code> setting.
 	      </p>
 	    </td></tr><tr><td align="left"><code class="literal">ha-replicate </code><em class="replaceable"><code>VALUE</code></em></td><td align="left">
 	      <p>
 		Specifies whether queues and exchanges are replicated by default.
 		<em class="replaceable"><code>VALUE</code></em> is one of: <code class="literal">none</code>,
 		<code class="literal">configuration</code>, <code class="literal">all</code>.
-		For details see <a class="xref" href="chap-Messaging_User_Guide-Active_Passive_Cluster.html#ha-creating-replicated" title="1.13.7. Creating replicated queues and exchanges">Section 1.13.7, “Creating replicated queues and exchanges”</a>.
+		For details see <a class="xref" href="chap-Messaging_User_Guide-Active_Passive_Cluster.html#ha-creating-replicated" title="1.12.7. Controlling replication of queues and exchanges">Section 1.12.7, “Controlling replication of queues and exchanges”</a>.
 	      </p>
 	    </td></tr><tr><td align="left">
 	      <p><code class="literal">ha-username <em class="replaceable"><code>USER</code></em></code></p>
@@ -176,19 +166,19 @@
 		Heartbeat interval for replication links. The link will be assumed broken
 		if there is no heartbeat for twice the interval.
 	      </p>
-	    </td></tr></tbody><tbody class="footnotes"><tr><td colspan="2"><div class="footnote"><p><sup>[<a name="ftn.ha-url-grammar" href="#ha-url-grammar" class="para">a</a>] </sup>
+	    </td></tr></tbody><tbody class="footnotes"><tr><td colspan="2"><div id="ftn.ha-url-grammar" class="footnote"><p><a href="#ha-url-grammar" class="para"><sup class="para">[a] </sup></a>
 		  The full format of the URL is given by this grammar:
-		  <pre class="programlisting">
+		  </p><pre class="programlisting">
 url = ["amqp:"][ user ["/" password] "@" ] addr ("," addr)*
 addr = tcp_addr / rmda_addr / ssl_addr / ...
 tcp_addr = ["tcp:"] host [":" port]
 rdma_addr = "rdma:" host [":" port]
 ssl_addr = "ssl:" host [":" port]'
-		  </pre>
+		  </pre><p>
 		  </p></div></td></tr></tbody></table></div></div><br class="table-break"><p>
       To configure a HA cluster you must set at least <code class="literal">ha-cluster</code> and
       <code class="literal">ha-brokers-url</code>.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2506808"></a>1.13.4. The Cluster Resource Manager</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp2370608"></a>1.12.4. The Cluster Resource Manager</h3></div></div></div><p>
       Broker fail-over is managed by a <em class="firstterm">cluster resource
       manager</em>.  An integration with <a class="ulink" href="https://fedorahosted.org/cluster/wiki/RGManager" target="_top">rgmanager</a> is
       provided, but it is possible to integrate with other resource managers.
@@ -214,7 +204,7 @@ ssl_addr = "ssl:" host [":" port]'
       network partition divide a cluster into two sub-groups which cannot see each other.
       Usually a <em class="firstterm">quorum</em> voting algorithm is used that disables nodes
       in the inquorate sub-group.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2534034"></a>1.13.5. Configuring <span class="command"><strong>rgmanager</strong></span> as resource manager</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp1242848"></a>1.12.5. Configuring <span class="command"><strong>rgmanager</strong></span> as resource manager</h3></div></div></div><p>
       This section assumes that you are already familiar with setting up and configuring
       clustered services using <span class="command"><strong>cman</strong></span> and
       <span class="command"><strong>rgmanager</strong></span>. It will show you how to configure an active-passive,
@@ -335,7 +325,7 @@ NOTE: fencing is not shown, you must con
       original node fails. Running the <code class="literal">qpidd-primary</code> script
       does not start a new broker process, it promotes the existing broker to
       become the primary.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2518856"></a>1.13.6. Broker Administration Tools</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp1315264"></a>1.12.6. Broker Administration Tools</h3></div></div></div><p>
       Normally, clients are not allowed to connect to a backup broker. However
       management tools are allowed to connect to a backup brokers. If you use
       these tools you <span class="emphasis"><em>must not</em></span> add or remove messages from
@@ -347,16 +337,19 @@ NOTE: fencing is not shown, you must con
       The tools <span class="command"><strong>qpid-config</strong></span>, <span class="command"><strong>qpid-route</strong></span> and
       <span class="command"><strong>qpid-stat</strong></span> will connect to a backup if you pass the flag <span class="command"><strong>ha-admin</strong></span> on the
       command line.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="ha-creating-replicated"></a>1.13.7. Creating replicated queues and exchanges</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="ha-creating-replicated"></a>1.12.7. Controlling replication of queues and exchanges</h3></div></div></div><p>
       By default, queues and exchanges are not replicated automatically. You can change
       the default behavior by setting the <code class="literal">ha-replicate</code> configuration
       option. It has one of the following values:
-      </p><div class="itemizedlist"><ul><li><em class="firstterm">all</em>: Replicate everything automatically: queues,
-	  exchanges, bindings and messages.
-	</li><li><em class="firstterm">configuration</em>: Replicate the existence of queues,
-	  exchange and bindings but don't replicate messages.
-	</li><li><em class="firstterm">none</em>: Don't replicate anything, this is the default.
-	</li></ul></div><p>
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+	    <em class="firstterm">all</em>: Replicate everything automatically: queues,
+	    exchanges, bindings and messages.
+	  </p></li><li class="listitem"><p>
+	    <em class="firstterm">configuration</em>: Replicate the existence of queues,
+	    exchange and bindings but don't replicate messages.
+	  </p></li><li class="listitem"><p>
+	    <em class="firstterm">none</em>: Don't replicate anything, this is the default.
+	  </p></li></ul></div><p>
     </p><p>
       You can over-ride the default for a particular queue or exchange by passing the
       argument <code class="literal">qpid.replicate</code> when creating the queue or exchange. It
@@ -385,18 +378,19 @@ NOTE: fencing is not shown, you must con
       Note that if you bind a replicated queue to one of these exchanges, the
       binding wil <span class="emphasis"><em>not</em></span> be replicated, so the queue will not
       have the binding after a fail-over.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2520587"></a>1.13.8. Client Connection and Fail-over</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp5411888"></a>1.12.8. Client Connection and Fail-over</h3></div></div></div><p>
       Clients can only connect to the primary broker. Backup brokers
       automatically reject any connection attempt by a client.
     </p><p>
       Clients are configured with the URL for the cluster (details below for
       each type of client). There are two possibilities
-      </p><div class="itemizedlist"><ul><li>
-	  The URL contains multiple addresses, one for each broker in the cluster.
-	</li><li>
-	  The URL contains a single <em class="firstterm">virtual IP address</em>
-	  that is assigned to the primary broker by the resource manager.
-	  <sup>[<a name="id2529174" href="#ftn.id2529174" class="footnote">3</a>]</sup></li></ul></div><p>
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+	    The URL contains multiple addresses, one for each broker in the cluster.
+	  </p></li><li class="listitem"><p>
+	    The URL contains a single <em class="firstterm">virtual IP address</em>
+	    that is assigned to the primary broker by the resource manager.
+	    <a href="#ftn.idp3201408" class="footnote"><sup class="footnote"><a name="idp3201408"></a>[3]</sup></a>
+	  </p></li></ul></div><p>
       In the first case, clients will repeatedly re-try each address in the URL
       until they successfully connect to the primary. In the second case the
       resource manager will assign the virtual IP address to the primary broker,
@@ -425,9 +419,9 @@ NOTE: fencing is not shown, you must con
       a client you need to specify the address(es) and set the
       <code class="literal">reconnect</code> property to <code class="literal">true</code>. The
       following sub-sections show how to connect each type of client.
-    </p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2535381"></a>1.13.8.1. C++ clients</h4></div></div></div><p>
+    </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp3477072"></a>1.12.8.1. C++ clients</h4></div></div></div><p>
 	With the C++ client, you specify multiple cluster addresses in a single URL
-	<sup>[<a name="id2515258" href="#ftn.id2515258" class="footnote">4</a>]</sup>
+	<a href="#ftn.idp2420032" class="footnote"><sup class="footnote"><a name="idp2420032"></a>[4]</sup></a>
 	You also need to specify the connection option
 	<code class="literal">reconnect</code> to be true.  For example:
       </p><pre class="programlisting">
@@ -439,7 +433,7 @@ NOTE: fencing is not shown, you must con
 	</p><pre class="programlisting">
 	  qpid::messaging::Connection c("node1,node2,node3","{reconnect:true,heartbeat:10}");
 	</pre><p>
-      </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2502501"></a>1.13.8.2. Python clients</h4></div></div></div><p>
+      </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp2161248"></a>1.12.8.2. Python clients</h4></div></div></div><p>
 	With the python client, you specify <code class="literal">reconnect=True</code>
 	and a list of <em class="replaceable"><code>host:port</code></em> addresses as
 	<code class="literal">reconnect_urls</code> when calling
@@ -453,7 +447,7 @@ NOTE: fencing is not shown, you must con
 	connection via the 'heartbeat' option. For example:
       </p><pre class="programlisting">
 	connection = qpid.messaging.Connection.establish("node1", reconnect=True, reconnect_urls=["node1", "node2", "node3"], heartbeat=10)
-      </pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="id2534116"></a>1.13.8.3. Java JMS Clients</h4></div></div></div><p>
+      </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="idp2355872"></a>1.12.8.3. Java JMS Clients</h4></div></div></div><p>
 	In Java JMS clients, client fail-over is handled automatically if it is
 	enabled in the connection.  You can configure a connection to use
 	fail-over using the <span class="command"><strong>failover</strong></span> property:
@@ -461,7 +455,7 @@ NOTE: fencing is not shown, you must con
 	connectionfactory.qpidConnectionfactory = amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'&amp;failover='failover_exchange'
       </pre><p>
 	This property can take three values:
-      </p><div class="variablelist"><p class="title"><b>Fail-over Modes</b></p><dl><dt><span class="term">failover_exchange</span></dt><dd><p>
+      </p><div class="variablelist"><p class="title"><b>Fail-over Modes</b></p><dl class="variablelist"><dt><span class="term">failover_exchange</span></dt><dd><p>
 	      If the connection fails, fail over to any other broker in the cluster.
 	    </p></dd><dt><span class="term">roundrobin</span></dt><dd><p>
 	      If the connection fails, fail over to one of the brokers specified in the <span class="command"><strong>brokerlist</strong></span>.
@@ -471,14 +465,14 @@ NOTE: fencing is not shown, you must con
 	In a Connection URL, heartbeat is set using the <span class="command"><strong>idle_timeout</strong></span> property, which is an integer corresponding to the heartbeat period in seconds. For instance, the following line from a JNDI properties file sets the heartbeat time out to 3 seconds:
       </p><pre class="screen">
 	connectionfactory.qpidConnectionfactory = amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672',idle_timeout=3
-      </pre></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2507852"></a>1.13.9. Security.</h3></div></div></div><p>
+      </pre></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp5150480"></a>1.12.9. Security.</h3></div></div></div><p>
       You can secure your cluster using the authentication and authorization features
       described in <a class="xref" href="chap-Messaging_User_Guide-Security.html" title="1.5. Security">Section 1.5, “Security”</a>.
     </p><p>
       Backup brokers connect to the primary broker and subscribe for management
       events and queue contents. You can specify the identity used to connect
       to the primary with the following options:
-    </p><div class="table"><a name="ha-broker-security-options"></a><p class="title"><b>Table 1.22. Security options for High Availability Messaging Cluster</b></p><div class="table-contents"><table summary="Security options for High Availability Messaging Cluster" border="1"><colgroup><col align="left"><col align="left"></colgroup><thead><tr><th colspan="2" align="center">
+    </p><div class="table"><a name="ha-broker-security-options"></a><p class="title"><b>Table 1.21. Security options for High Availability Messaging Cluster</b></p><div class="table-contents"><table summary="Security options for High Availability Messaging Cluster" border="1"><colgroup><col align="left" class="c1"><col align="left" class="c2"></colgroup><thead><tr><th colspan="2" align="center">
 	      Security options for High Availability Messaging Cluster
 	    </th></tr></thead><tbody><tr><td align="left">
 	      <p><code class="literal">ha-username <em class="replaceable"><code>USER</code></em></code></p>
@@ -492,9 +486,9 @@ NOTE: fencing is not shown, you must con
 	    </td></tr></tbody></table></div></div><br class="table-break"><p>
       This identity is also used to authorize actions taken on the backup broker to replicate
       from the primary, for example to create queues or exchanges.
-    </p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="id2524600"></a>1.13.10. Integrating with other Cluster Resource Managers</h3></div></div></div><p>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idp954320"></a>1.12.10. Integrating with other Cluster Resource Managers</h3></div></div></div><p>
       To integrate with a different resource manager you must configure it to:
-      </p><div class="itemizedlist"><ul><li>Start a qpidd process on each node of the cluster.</li><li>Restart qpidd if it crashes.</li><li>Promote exactly one of the brokers to primary.</li><li>Detect a failure and promote a new primary.</li></ul></div><p>
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Start a qpidd process on each node of the cluster.</p></li><li class="listitem"><p>Restart qpidd if it crashes.</p></li><li class="listitem"><p>Promote exactly one of the brokers to primary.</p></li><li class="listitem"><p>Detect a failure and promote a new primary.</p></li></ul></div><p>
     </p><p>
       The <span class="command"><strong>qpid-ha</strong></span> command allows you to check if a broker is primary,
       and to promote a backup to primary.
@@ -515,17 +509,34 @@ NOTE: fencing is not shown, you must con
       You can also use <span class="command"><strong>qpid-ha</strong></span> to manually examine and promote brokers. This
       can be useful for testing failover scenarios without having to set up a full resource manager,
       or to simulate a cluster on a single node. For deployment, a resource manager is required.
-    </p></div><div class="footnotes"><br><hr width="100" align="left"><div class="footnote"><p><sup>[<a name="ftn.id2524432" href="#id2524432" class="para">1</a>] </sup>
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="ha-queue-replication"></a>1.12.11. Replicating specific queues</h3></div></div></div><p>
+      In addition to the automatic replication performed in a cluster, you can
+      set up replication for specific queues between arbitrary brokers, even if
+      the brokers are not members of a cluster. The command:
+    </p><pre class="programlisting">
+      qpid-ha replicate <em class="replaceable"><code>QUEUE</code></em> <em class="replaceable"><code>REMOTE-BROKER</code></em>
+    </pre><p>
+    sets up replication of <em class="replaceable"><code>QUEUE</code></em> on <em class="replaceable"><code>REMOTE-BROKER</code></em> to <em class="replaceable"><code>QUEUE</code></em> on the current broker.
+    </p><p>
+      Set the configuration option
+      <code class="literal">ha-queue-replication=yes</code> on both brokers to enable this
+      feature on non-cluster brokers. It is automatically enabled for brokers
+      that are part of a cluster.
+    </p><p>
+      Note that this feature does not provide automatic fail-over, for that you
+      need to run a cluster.
+    </p></div><div class="footnotes"><br><hr width="100" align="left"><div id="ftn.idp2059136" class="footnote"><p><a href="#idp2059136" class="para"><sup class="para">[1] </sup></a>
 	    You can control the maximum number of messages in the buffer by setting the
 	    client's <code class="literal">capacity</code>. For details of how to set the capacity
 	    in client code see "Using the Qpid Messaging API" in
 	    <em class="citetitle">Programming in Apache Qpid</em>.
-	  </p></div><div class="footnote"><p><sup>[<a name="ftn.id2520820" href="#id2520820" class="para">2</a>] </sup>
+	  </p></div><div id="ftn.idp4636288" class="footnote"><p><a href="#idp4636288" class="para"><sup class="para">[2] </sup></a>
 	  Clients must use "at-least-once" reliability to enable re-send of unacknowledged
 	  messages. This is the default behavior, no options need be set to enable it. For
 	  details of client addressing options see "Using the Qpid Messaging API"
 	  in <em class="citetitle">Programming in Apache Qpid</em>.
-	  </p></div><div class="footnote"><p><sup>[<a name="ftn.id2529174" href="#id2529174" class="para">3</a>] </sup>Only if the resource manager supports virtual IP addresses</p></div><div class="footnote"><p><sup>[<a name="ftn.id2515258" href="#id2515258" class="para">4</a>] </sup>
+	  </p></div><div id="ftn.idp3201408" class="footnote"><p><a href="#idp3201408" class="para"><sup class="para">[3] </sup></a>Only if the resource manager supports virtual IP
+	    addresses</p></div><div id="ftn.idp2420032" class="footnote"><p><a href="#idp2420032" class="para"><sup class="para">[4] </sup></a>
 	    The full grammar for the URL is:
 	  </p><pre class="programlisting">
 	    url = ["amqp:"][ user ["/" password] "@" ] addr ("," addr)*
@@ -533,6 +544,6 @@ NOTE: fencing is not shown, you must con
 	    tcp_addr = ["tcp:"] host [":" port]
 	    rdma_addr = "rdma:" host [":" port]
 	    ssl_addr = "ssl:" host [":" port]'
-	  </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="Using-message-groups.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch01s14.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">1.12. 
+	  </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="Using-message-groups.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch01s13.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">1.11. 
     Using Message Groups
-   </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1.14. Queue Replication with the HA module</td></tr></table></div><div class="main_text_area_bottom"></div></div></div></body></html>
+   </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1.13. Queue Replication with the HA module</td></tr></table></div><div class="main_text_area_bottom"></div></div></div></body></html>



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