http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/book/css/style.css ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/book/css/style.css b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/css/style.css new file mode 100644 index 0000000..c681596 --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/css/style.css @@ -0,0 +1,279 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +ul { + list-style-type:square; +} + +th { + font-weight: bold; +} + +.navfooter td { + font-size:10pt; +} + +.navheader td { + font-size:10pt; +} + +body { + margin:0; + background:#FFFFFF; + font-family:"Verdana", sans-serif; + font-size:10pt; +} + +.container { + width:950px; + margin:0 auto; +} + +body a { + color:#000000; +} + + +div.book { + margin-left:10pt; + margin-right:10pt; +} + +div.preface { + margin-left:10pt; + margin-right:10pt; +} + +div.chapter { + margin-left:10pt; + margin-right:10pt; +} + +div.section { + margin-left:10pt; + margin-right:10pt; +} + +div.titlepage { + margin-left:-10pt; + margin-right:-10pt; +} + +.calloutlist td { + font-size:10pt; +} + +.table-contents table { + border-spacing: 0px; +} + +.table-contents td { + font-size:10pt; + padding-left:6px; + padding-right:6px; +} + +div.breadcrumbs { + font-size:9pt; + margin-right:10pt; + padding-bottom:16px; +} + +.chapter h2.title { + font-size:20pt; + color:#0c3b82; +} + +.chapter .section h2.title { + font-size:18pt; + color:#0c3b82; +} + +.section h2.title { + font-size:16pt; + color:#0c3b82; +} + +.section h3.title { + font-size:14pt; + color:#0c3b82; +} + +.section h4.title { + font-size:12pt; + color:#0c3b82; +} + +.section h5.title { + font-size:12pt; + color:#0c3b82; +} + +.section h6.title { + font-size:12pt; + color:#0c3b82; +} + +.toc a { + font-size:9pt; +} + +.header { + height:100px; + width:950px; + background:url(http://qpid.apache.org/images/header.png) +} + +.logo { + text-align:center; + font-weight:600; + padding:0 0 0 0; + font-size:14px; + font-family:"Verdana", cursive; +} + +.logo a { + color:#000000; + text-decoration:none; +} + +.main_text_area { + margin-left:200px; +} + +.main_text_area_top { + height:14px; + font-size:1px; +} + +.main_text_area_bottom { + display:none; +/* height:14px; + margin-bottom:4px;*/ +} + +.main_text_area_body { + padding:5px 24px; +} + +.main_text_area_body p { + text-align:justify; +} + +.main_text_area br { + line-height:10px; +} + +.main_text_area h1 { + font-size:28px; + font-weight:600; + margin:0 0 24px 0; + color:#0c3b82; + font-family:"Verdana", Times, serif; +} + +.main_text_area h2 { + font-size:24px; + font-weight:600; + margin:24px 0 8px 0; + color:#0c3b82; + font-family:"Verdana",Times, serif; +} + +.main_text_area ol, .main_text_area ul { + padding:0; + margin:10px 0; + margin-left:20px; +} + +.main_text_area li { +/* margin-left:40px; */ +} + +.main_text_area, .menu_box { + font-size:13px; + line-height:17px; + color:#000000; +} + +.main_text_area { + font-size:14px; +} + +.main_text_area a { + color:#000000; +} + +.main_text_area a:hover { + color:#000000; +} + +.menu_box { + width:196px; + float:left; + margin-left:4px; +} + +.menu_box_top { + background:url(http://qpid.apache.org/images/menu_top.png) no-repeat; + height:14px; + font-size:1px; +} + +.menu_box_body { + background:url(http://qpid.apache.org/images/menu_body.png) repeat-y; + padding:5px 24px 5px 24px; +} + +.menu_box_bottom { + background:url(http://qpid.apache.org/images/menu_bottom.png) no-repeat; + height:14px; + font-size:1px; + margin-bottom:1px; +} + +.menu_box h3 { + font-size:20px; + font-weight:500; + margin:0 0 8px 0; + color:#0c3b82; + font-family:"Verdana",Times, serif; +} + +.menu_box ul { + margin:12px; + padding:0px; +} + +.menu_box li { + list-style:square; +} + +.menu_box a { + color:#000000; + text-decoration:none; +} + +.menu_box a:hover { + color:#000000; + text-decoration:underline; +} + +
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/book/ha-queue-replication.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/book/ha-queue-replication.html.in b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/ha-queue-replication.html.in new file mode 100644 index 0000000..de1801d --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/ha-queue-replication.html.in @@ -0,0 +1,78 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.13. Replicating Queues with the HA module</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="chapter-ha.html">Prev</a> </td><th align="center" width="60%">Chapter 1.  + Running the AMQP Messaging Broker + </th><td align="right" width="20%"> <a accesskey="n" href="chapter-Managing-CPP-Broker.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="ha-queue-replication"></a>1.13. Replicating Queues with the HA module</h2></div></div></div><p> + As well as support for an active-passive cluster, the + HA module allows you to replicate individual queues, + even if the brokers are not in a cluster. The <em class="firstterm">original</em> + queue is used as normal. The <em class="firstterm">replica</em> queue is + updated automatically as messages are added to or removed from the original + queue. + </p><div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Warning</h3><p> + It is not safe to modify the replica queue + other than via the automatic updates from the original. Adding or removing + messages on the replica queue will make replication inconsistent and may + cause message loss. + The HA module does <span class="emphasis"><em>not</em></span> enforce + restricted access to the replica queue (as it does in the case of a cluster) + so it is up to the application to ensure the replica is not used until it has + been disconnected from the original. + </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm140333891096176"></a>1.13.1. Replicating queues</h3></div></div></div><p> + To create a replica queue, the HA module must be + loaded on both the original and replica brokers (it is loaded by default.) + You also need to set the configuration option: + </p><pre class="programlisting"> + ha-queue-replication=yes + </pre><p> + to enable this feature on a stand-alone broker. It is automatically + enabled for brokers that are part of a cluster. + </p><p> + Suppose that <span class="command"><strong>myqueue</strong></span> is a queue on + <span class="command"><strong>node1</strong></span> and we want to create a replica of + <span class="command"><strong>myqueue</strong></span> on <span class="command"><strong>node2</strong></span> (where both brokers + are using the default AMQP port.) This is accomplished by the command: + </p><pre class="programlisting"> + qpid-config --broker=node2 add queue --start-replica node1 myqueue + </pre><p> + If <span class="command"><strong>myqueue</strong></span> already exists on the replica + broker you can start replication from the original queue like this: + </p><pre class="programlisting"> + qpid-ha replicate -b node2 node1 myqueue + </pre><p> + </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm140333887382320"></a>1.13.2. Replicating queues between clusters</h3></div></div></div><p> + You can replicate queues between two standalone brokers, between a + standalone broker and a cluster, or between two clusters (see <a class="xref" href="chapter-ha.html" title="1.12. Active-Passive Messaging Clusters">Section 1.12, “Active-Passive Messaging Clusters”</a>.) For failover in a cluster there are two cases to + consider. + </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p> + When the <span class="emphasis"><em>original</em></span> queue is on the active node + of a cluster, failover is automatic. If the active node + fails, the replication link will automatically reconnect and the + replica will continue to be updated from the new primary. + </p></li><li class="listitem"><p> + When the <span class="emphasis"><em>replica</em></span> queue is on the active node of a + cluster, there is no automatic failover. However you can use the + following workaround. + </p></li></ol></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="idm140333890581776"></a>1.13.2.1. Work around for fail-over of replica queue in a cluster</h4></div></div></div><p> + When a primary broker fails the cluster resource manager calls a script + to promote a backup broker to be the new primary. By default this script + is <code class="filename">/etc/init.d/qpidd-primary</code> but you can modify + that in your <code class="filename">cluster.conf</code> file (see <a class="xref" href="chapter-ha.html#ha-rm-config" title="1.12.5. Configuring with rgmanager as resource manager">Section 1.12.5, “Configuring with <span class="command"><strong>rgmanager</strong></span> as resource manager”</a>.) + </p><p> + You can modify this script (on each host in your cluster) by adding + commands to create your replica queues just before the broker is + promoted, as indicated in the following exceprt from the script: + </p><pre class="programlisting"> +start() { + service qpidd start + echo -n $"Promoting qpid daemon to cluster primary: " + ################################ + #### Add your commands here #### + ################################ + $QPID_HA -b localhost:$QPID_PORT promote + [ "$?" -eq 0 ] && success || failure +} + </pre><p> + Your commands will be run, and your replicas created, whenever + the system fails over to a new primary. + </p></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="chapter-ha.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="ch01.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="chapter-Managing-CPP-Broker.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.12. Active-Passive Messaging Clusters </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> Chapter 2.  + Managing the AMQP Messaging Broker + </td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/book/index.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/book/index.html.in b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/index.html.in new file mode 100644 index 0000000..58de9ac --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/index.html.in @@ -0,0 +1,108 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">AMQP Messaging Broker (Implemented in C++)</th></tr><tr><td align="left" width="20%"> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="pr01.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="idm140333893299280"></a>AMQP Messaging Broker (Implemented in C++)</h1></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="pr01.html">Introduction</a></span></dt><dt><span class="chapter"><a href="ch01.html">1. + Running the AMQP Messaging Broker + </a></span></dt><dd><dl><dt><span class="section"><a href="ch01.html#section-Running-a-Qpid-CPP-Broker">1.1. + Running a Qpid C++ Broker + </a></span></dt><dd><dl><dt><span class="section"><a href="ch01.html#RASC-BuildingtheCppBrokerandClientLibraries">1.1.1. + Building the + C++ Broker and Client Libraries + </a></span></dt><dt><span class="section"><a href="ch01.html#RASC-RunningtheCppBroker">1.1.2. + Running the C++ Broker + </a></span></dt><dt><span class="section"><a href="ch01.html#RASC-Mostcommonquestionsgettingqpiddrunning">1.1.3. + Most + common questions getting qpidd running + </a></span></dt><dt><span class="section"><a href="ch01.html#RASC-Authentication">1.1.4. + Authentication + </a></span></dt><dt><span class="section"><a href="ch01.html#RASC-Slightlymorecomplexconfiguration">1.1.5. + Slightly more + complex configuration + </a></span></dt><dt><span class="section"><a href="ch01.html#RASC-Loadingextramodules">1.1.6. + Loading extra modules + </a></span></dt><dt><span class="section"><a href="ch01.html#RASC-message-timestamps">1.1.7. Timestamping Received Messages</a></span></dt><dt><span class="section"><a href="ch01.html#RASC-logging-options">1.1.8. Logging Options</a></span></dt></dl></dd><dt><span class="section"><a href="ch01s02.html">1.2. + Cheat Sheet for configuring Queue Options + </a></span></dt><dd><dl><dt><span class="section"><a href="ch01s02.html#CheatSheetforconfiguringQueueOptions-ConfiguringQueueOptions">1.2.1. + Configuring + Queue Options + </a></span></dt></dl></dd><dt><span class="section"><a href="ch01s03.html">1.3. + Cheat Sheet for configuring Exchange Options + </a></span></dt><dd><dl><dt><span class="section"><a href="ch01s03.html#CheatSheetforconfiguringExchangeOptions-ConfiguringExchangeOptions">1.3.1. + Configuring Exchange Options + </a></span></dt></dl></dd><dt><span class="section"><a href="chap-Messaging_User_Guide-Broker_Federation.html">1.4. Broker Federation</a></span></dt><dd><dl><dt><span class="section"><a href="chap-Messaging_User_Guide-Broker_Federation.html#sect-Messaging_User_Guide-Broker_Federation-Message_Routes">1.4.1. Message Routes</a></span></dt><dt><span class="section"><a href="chap-Messaging_User_Guide-Broker_Federation.html#sect-Messaging_User_Guide-Broker_Federation-Federation_Topologies">1.4.2. Federation Topologies</a></span></dt><dt><span class="section"><a href="chap-Messaging_User_Guide-Broker_Federation.html#sect-Messaging_User_Guide-Broker_Federation-Federation_among_High_Availability_Message_Clusters">1.4.3. Federation among High Availability Message Clusters</a></span></dt><dt><span class="section"><a href="chap-Messaging_User_Guide-Broker_Federation.html#sect-Messaging_User_Guide-Broker_Federation-The_qpid_route_Utility">1.4.4. The qpid-route Utility</a></span></dt><dt><spa n class="section"><a href="chap-Messaging_User_Guide-Broker_Federation.html#federation-broker-options">1.4.5. Broker options affecting federation</a></span></dt></dl></dd><dt><span class="section"><a href="chap-Messaging_User_Guide-Security.html">1.5. Security</a></span></dt><dd><dl><dt><span class="section"><a href="chap-Messaging_User_Guide-Security.html#sect-Messaging_User_Guide-Security-User_Authentication">1.5.1. User Authentication</a></span></dt><dt><span class="section"><a href="chap-Messaging_User_Guide-Security.html#sect-Messaging_User_Guide-Security-Authorization">1.5.2. Authorization</a></span></dt><dt><span class="section"><a href="chap-Messaging_User_Guide-Security.html#sect-Messaging_User_Guide-Authorization-Specifying_ACL_Quotas">1.5.3. User Connection and Queue Quotas</a></span></dt><dt><span class="section"><a href="chap-Messaging_User_Guide-Security.html#sect-Messaging_User_Guide-Security-Encryption_using_SSL">1.5.4. Encryption using SSL</a></span></dt></dl></dd>< dt><span class="section"><a href="ch01s06.html">1.6. LVQ - Last Value Queue</a></span></dt><dd><dl><dt><span class="section"><a href="ch01s06.html#LVQ-UnderstandingLVQ">1.6.1. Understanding LVQ</a></span></dt><dt><span class="section"><a href="ch01s06.html#LVQ-Creating">1.6.2. Creating a Last Value Queue</a></span></dt><dt><span class="section"><a href="ch01s06.html#LVQ-Example">1.6.3. LVQ Example</a></span></dt><dt><span class="section"><a href="ch01s06.html#LVQ-Deprecated">1.6.4. Deprecated LVQ Modes</a></span></dt></dl></dd><dt><span class="section"><a href="queue-state-replication.html">1.7. + Queue State Replication + </a></span></dt><dd><dl><dt><span class="section"><a href="queue-state-replication.html#queuestatereplication-AsynchronousReplicationofQueueState">1.7.1. + Asynchronous + Replication of Queue State + </a></span></dt></dl></dd><dt><span class="section"><a href="producer-flow-control.html">1.8. + Producer Flow Control + </a></span></dt><dd><dl><dt><span class="section"><a href="producer-flow-control.html#producerflowcontrol-Overview">1.8.1. + Overview + </a></span></dt><dt><span class="section"><a href="producer-flow-control.html#producerflowcontrol-UserInterface">1.8.2. + User Interface + </a></span></dt></dl></dd><dt><span class="section"><a href="AMQP-Compatibility.html">1.9. + AMQP compatibility + </a></span></dt><dd><dl><dt><span class="section"><a href="AMQP-Compatibility.html#AMQPcompatibility-AMQPCompatibilityofQpidreleases-3A">1.9.1. + AMQP + Compatibility of Qpid releases: + </a></span></dt><dt><span class="section"><a href="AMQP-Compatibility.html#AMQPcompatibility-InteroptablebyAMQPspecificationversion">1.9.2. + Interop + table by AMQP specification version + </a></span></dt></dl></dd><dt><span class="section"><a href="QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html">1.10. Qpid Interoperability Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html#QpidInteroperabilityDocumentation-SASL">1.10.1. + SASL + </a></span></dt></dl></dd><dt><span class="section"><a href="Using-message-groups.html">1.11. + Using Message Groups + </a></span></dt><dd><dl><dt><span class="section"><a href="Using-message-groups.html#usingmessagegroups-Overview">1.11.1. + Overview + </a></span></dt><dt><span class="section"><a href="Using-message-groups.html#usingmessagegroups-GroupingMessages">1.11.2. + Grouping Messages + </a></span></dt><dt><span class="section"><a href="Using-message-groups.html#usingmessagegroups-BrokerRole">1.11.3. + The Role of the Broker + </a></span></dt><dt><span class="section"><a href="Using-message-groups.html#usingmessagegroups-ConsumerGuide">1.11.4. + Well Behaved Consumers + </a></span></dt><dt><span class="section"><a href="Using-message-groups.html#usingmessagegroups-BrokerConfig">1.11.5. + Broker Configuration + </a></span></dt></dl></dd><dt><span class="section"><a href="chapter-ha.html">1.12. Active-Passive Messaging Clusters</a></span></dt><dd><dl><dt><span class="section"><a href="chapter-ha.html#ha-overview">1.12.1. Overview</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-virtual-ip">1.12.2. Virtual IP Addresses</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-broker-config">1.12.3. Configuring the Brokers</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-rm">1.12.4. The Cluster Resource Manager</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-rm-config">1.12.5. Configuring with <span class="command"><strong>rgmanager</strong></span> as resource manager</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-broker-admin">1.12.6. Broker Administration Tools</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-replicate-values">1.12.7. Controlling replication of queues and exchanges</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-failover">1.12.8. Client Connection and Fail-over</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-security">1.12.9. Security and Access Control.</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-other-rm">1.12.10. Integrating with other Cluster Resource Managers</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-store">1.12.11. Using a message store in a cluster</a></span></dt><dt><span class="section"><a href="chapter-ha.html#ha-troubleshoot">1.12.12. Troubleshooting a cluster</a></span></dt></dl></dd><dt><span class="section"><a href="ha-queue-replication.html">1.13. Replicating Queues with the HA module</a></span></dt><dd><dl><dt><span class="section"><a href="ha-queue-replication.html#idm140333891096176">1.13.1. Replicating queues</a></span></dt><dt><span class="section"><a href="ha-queue-replication.html#idm140333887382320">1.13.2. Replicating queues between clusters</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="chapter-Managing-CPP-Broker.html">2. + Managing the AMQP Messaging Broker + </a></span></dt><dd><dl><dt><span class="section"><a href="chapter-Managing-CPP-Broker.html#section-Managing-CPP-Broker">2.1. Managing the C++ Broker </a></span></dt><dd><dl><dt><span class="section"><a href="chapter-Managing-CPP-Broker.html#MgmtC-2B-2B-Usingqpidconfig">2.1.1. + Using qpid-config + </a></span></dt><dt><span class="section"><a href="chapter-Managing-CPP-Broker.html#MgmtC-2B-2B-Usingqpidroute">2.1.2. + Using qpid-route + </a></span></dt><dt><span class="section"><a href="chapter-Managing-CPP-Broker.html#MgmtC-2B-2B-Usingqpidtool">2.1.3. + Using qpid-tool + </a></span></dt><dt><span class="section"><a href="chapter-Managing-CPP-Broker.html#MgmtC-2B-2B-Usingqpidprintevents">2.1.4. + Using + qpid-printevents + </a></span></dt><dt><span class="section"><a href="chapter-Managing-CPP-Broker.html#idm140333888607376">2.1.5. Using qpid-ha</a></span></dt></dl></dd><dt><span class="section"><a href="ch02s02.html">2.2. + Qpid Management Framework + </a></span></dt><dd><dl><dt><span class="section"><a href="ch02s02.html#QpidManagementFramework-WhatIsQMF">2.2.1. + What Is QMF + </a></span></dt><dt><span class="section"><a href="ch02s02.html#QpidManagementFramework-GettingStartedwithQMF">2.2.2. + Getting + Started with QMF + </a></span></dt><dt><span class="section"><a href="ch02s02.html#QpidManagementFramework-QMFConcepts">2.2.3. + QMF Concepts + </a></span></dt><dt><span class="section"><a href="ch02s02.html#QpidManagementFramework-TheQMFProtocol">2.2.4. + The QMF + Protocol + </a></span></dt><dt><span class="section"><a href="ch02s02.html#QpidManagementFramework-HowtoWriteaQMFConsole">2.2.5. + How + to Write a QMF Console + </a></span></dt><dt><span class="section"><a href="ch02s02.html#QpidManagementFramework-HowtoWriteaQMFAgent">2.2.6. + How to + Write a QMF Agent + </a></span></dt></dl></dd><dt><span class="section"><a href="ch02s03.html">2.3. + QMF Python Console Tutorial + </a></span></dt><dd><dl><dt><span class="section"><a href="ch02s03.html#QMFPythonConsoleTutorial-PrerequisiteInstallQpidMessaging">2.3.1. + Prerequisite + - Install Qpid Messaging + </a></span></dt><dt><span class="section"><a href="ch02s03.html#QMFPythonConsoleTutorial-SynchronousConsoleOperations">2.3.2. + Synchronous + Console Operations + </a></span></dt><dt><span class="section"><a href="ch02s03.html#QMFPythonConsoleTutorial-AsynchronousConsoleOperations">2.3.3. + Asynchronous + Console Operations + </a></span></dt><dt><span class="section"><a href="ch02s03.html#QMFPythonConsoleTutorial-DiscoveringwhatKindsofObjectsareAvailable">2.3.4. + Discovering what Kinds of Objects are Available + </a></span></dt></dl></dd></dl></dd></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="ch01.html#idm140333893043168">QMF Management - Broker Methods for Managing the Timestamp Configuration</a></dt><dt>1.2. <a href="ch01.html#idm140333893030000">C++ Broker Log Severity Levels</a></dt><dt>1.3. <a href="ch01.html#idm140333893018368">C++ Broker Log Categories</a></dt><dt>1.4. <a href="ch01.html#idm140333893004416">C++ Broker Log Statement Attributes</a></dt><dt>1.5. <a href="ch01.html#idm140333892992656">C++ Broker Log Enable/Disable RULE Format</a></dt><dt>1.6. <a href="ch01.html#idm140333892982208">C++ Broker Log Enable/Disable Settings Tables</a></dt><dt>1.7. <a href="ch01.html#idm140333892971088">C++ Broker Log Statement Visibility Determination</a></dt><dt>1.8. <a href="ch01.html#idm140333892957792">QMF Management - Broker Methods for Managing the Log Enable/Disable Settings</a></dt><dt>1.9. <a href="chap-Messaging_User_Gui de-Broker_Federation.html#tabl-Messaging_User_Guide-The_qpid_route_Utility-qpid_route_options"><span class="command">qpid-route</span> options</a></dt><dt>1.10. <a href="chap-Messaging_User_Guide-Broker_Federation.html#tabl-Messaging_User_Guide-Resilient_Connections-State_values_in_qpid_route_list_connections">State values in <span class="command">$ qpid-route list connections</span></a></dt><dt>1.11. <a href="chap-Messaging_User_Guide-Broker_Federation.html#federation-broker-options-table">Broker Options for Federation</a></dt><dt>1.12. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_Rules_permission">ACL Rules: permission</a></dt><dt>1.13. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_Rulesaction">ACL Rules: action</a></dt><dt>1.14. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_Rulesobject">ACL Rules:object</a></dt><dt>1.15. <a href="chap-Messaging_User _Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_Rulesproperty">ACL Rules: property</a></dt><dt>1.16. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_ActionObject_properties">Broker Lookup Events With Allowed Action, Object, and Properties</a></dt><dt>1.17. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_UsernameSubstitution">ACL User Name and Domain Name Substitution Keywords</a></dt><dt>1.18. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-ACL_Syntax-ACL_TopicExchangeMatch">Topic Exchange Wildcard Match Examples</a></dt><dt>1.19. <a href="chap-Messaging_User_Guide-Security.html#tabl-Messaging_User_Guide-Enabling_SSL_in_Clients-SSL_Client_Environment_Variables_for_C_clients">SSL Client Environment Variables for C++ clients</a></dt><dt>1.20. <a href="producer-flow-control.html#idm140333889897776">Queue Declare Method Flow Control Arguments</a></dt><dt>1.21. <a href="producer-flow-control.html#idm140333889654384">Flow Control Statistics available in Queue's QMF Class</a></dt><dt>1.22. <a href="AMQP-Compatibility.html#idm140333888437888">AMQP Version Support by Qpid Release</a></dt><dt>1.23. <a href="AMQP-Compatibility.html#idm140333890174448">AMQP Version Support - alternate format</a></dt><dt>1.24. <a href="QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html#idm140333887401840">SASL Mechanism Support</a></dt><dt>1.25. <a href="QpidInteroperabilityDocumentation-QpidInteroperabilityDocumentation.html#idm140333888205632">SASL Custom Mechanisms</a></dt><dt>1.26. <a href="Using-message-groups.html#idm140333889996128">qpid-config options for creating message group queues</a></dt><dt>1.27. <a href="Using-message-groups.html#idm140333892166304">Queue Declare/Address Syntax Message Group Configuration Arguments</a></dt><dt>1.28. <a href="chapter-ha.html#ha-broker-options">Broker Options for High Availability Messaging Cluster< /a></dt><dt>1.29. <a href="chapter-ha.html#ha-security-options">HA Security Options</a></dt><dt>2.1. <a href="ch02s02.html#idm140333888351904">XML Attributes for QMF Properties and Statistics</a></dt><dt>2.2. <a href="ch02s02.html#idm140333888279792">QMF Datatypes</a></dt><dt>2.3. <a href="ch02s02.html#idm140333892269424">XML Schema Mapping for QMF Types</a></dt><dt>2.4. <a href="ch02s03.html#idm140333887861504">QMF Python Console Class Methods</a></dt></dl></div><div class="list-of-examples"><p><strong>List of Examples</strong></p><dl><dt>1.1. <a href="ch01.html#idm140333893037200">Enabling Message Timestamping via QMF - Python</a></dt><dt>1.2. <a href="ch01.html#idm140333892949648"> + Querying Log Settings via qpid-ctrl utility + </a></dt><dt>1.3. <a href="ch01.html#idm140333892945792"> + Setting Log Settings via qpid-ctrl utility + </a></dt><dt>1.4. <a href="Using-message-groups.html#idm140333888933392">Creating a message group queue via qpid-config</a></dt><dt>1.5. <a href="Using-message-groups.html#idm140333887699152">Creating a message group queue using address syntax (C++)</a></dt><dt>1.6. <a href="Using-message-groups.html#idm140333889261888">Overriding the default message group identifier for the broker</a></dt></dl></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="pr01.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%"> </td><td align="center" width="20%"> </td><td align="right" valign="top" width="40%"> Introduction</td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/book/pr01.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/book/pr01.html.in b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/pr01.html.in new file mode 100644 index 0000000..be231c0 --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/pr01.html.in @@ -0,0 +1,6 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Introduction</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="index.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ch01.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm140333921460368"></a>Introduction</h1></div></div></div><p>Qpid provides two AMQP messaging brokers:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Implemented in C++ - high performance, low latency, and RDMA support.</p></li><li class="listitem"><p>Implemented in Java - Fully JMS compliant, runs on any Java platform.</p></li></ul></div><p>Both AMQP messaging brokers support clients in multiple + languages, as long as the messaging client and the messaging + broker use the same version of AMQP. See <a class="link" href="AMQP-Compatibility.html" title="1.9.  AMQP compatibility">AMQP Compatibility</a> to see + which messaging clients work with each broker.</p><p>This manual contains information specific to the broker that is implemented in C++.</p></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="index.html">Prev</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ch01.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">AMQP Messaging Broker (Implemented in C++) </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> Chapter 1.  + Running the AMQP Messaging Broker + </td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/book/producer-flow-control.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/book/producer-flow-control.html.in b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/producer-flow-control.html.in new file mode 100644 index 0000000..9ab0af2 --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/producer-flow-control.html.in @@ -0,0 +1,191 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.8.  + Producer Flow Control + </th></tr><tr><td align="left" width="20%"><a accesskey="p" href="queue-state-replication.html">Prev</a> </td><th align="center" width="60%">Chapter 1.  + Running the AMQP Messaging Broker + </th><td align="right" width="20%"> <a accesskey="n" href="AMQP-Compatibility.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="producer-flow-control"></a>1.8.  + Producer Flow Control + </h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="producerflowcontrol-Overview"></a>1.8.1.  + Overview + </h3></div></div></div><p> + As of release 0.10, the C++ broker supports the use of flow control to + throttle back message producers that are at risk of overflowing a + destination queue. + </p><p> + Each queue in the C++ broker has two threshold values associated with it: + </p><p> + Flow Stop Threshold: this is the level of queue resource + utilization above which flow control will be enabled. Once this + threshold is crossed, the queue is considered in danger of overflow. + </p><p> + Flow Resume Threshold - this is the level of queue resource utilization + below which flow control will be disabled. Once this threshold is + crossed, the queue is no longer considered in danger of overflow. + </p><p> + In the above description, queue resource utilization may be + defined as the total count of messages currently enqueued, or the total + sum of all message content in bytes. + </p><p> + The value for a queue's Flow Stop Threshold must be greater than or + equal to the value of the queue's Flow Resume Threshold. + </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="producerflowcontrol-QueueThresholdsExample"></a>1.8.1.1.  + Example + </h4></div></div></div><p> + Let's consider a queue with a maximum limit set on the total number of + messages that may be enqueued to that queue. Assume this maximum + message limit is 1000 messages. Assume also that the user configures a + Flow Stop Threshold of 900 messages, and a Flow Resume Threshold of 500 + messages. Then the following holds: + </p><p> + The queue's initial flow control state is "OFF". + </p><p> + While the total number of enqueued messages is less than or equal to + 900, the queue's flow control state remains "OFF". + </p><p> + When the total number of enqueued messages is greater than 900, the + queue's flow control state transitions to "ON". + </p><p> + When the queue's flow control state is "ON", it remains "ON" until the + total number of enqueued messages is less than 500. At that point, the queue's + flow control state transitions to "OFF". + </p><p> + A similar example using total enqueued content bytes as the threshold + units are permitted. + </p></div><p> + Thresholds may be set using both total message counts and total byte + counts. In this case, the following rules apply: + </p><p> + 1) Flow control is "ON" when either stop threshold value is crossed. + </p><p> + 2) Flow control remains "ON" until both resume thresholds are satisfied. + </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="producerflowcontro-MultiThresholdExample"></a>1.8.1.2.  + Example + </h4></div></div></div><p> + Let's consider a queue with a maximum size limit of 10K bytes, and 5000 + messages. A user may assign a Flow Stop Threshold based on a total + message count of 4000 messages. They may also assigne a Flow Stop + Threshold of 8K bytes. The queue's flow control state transitions to + "ON" if either threshold is crossed: (total-msgs greater-than 4000 OR total-bytes + greater-than 8K). + </p><p> + Assume the user has assigned Flow Resume threshold's of 3000 messages and + 6K bytes. Then the queue's flow control will remain active until both + thresholds are satified: (total-msg less-than 3000 AND total-bytes less-than 6K). + </p></div><p> + The Broker enforces flow control by delaying the completion of the + Message.Transfer command that causes a message to be delivered to a queue + with active flow control. The completion of the Message.Transfer command + is held off until flow control state transitions to "OFF" for all queues + that are a destination for that command. + </p><p> + A message producing client is permitted to have a finite number of + commands pending completion. When the total number of these outstanding + commands reaches the limit, the client must not issue further commands + until one or more of the outstanding commands have completed. This + window of outstanding commands is considered the sender's "capacity". + This allows any given producer to have a "capacity's" worth of messages + blocked due to flow control before the sender must stop sending further + messages. + </p><p> + This capacity window must be considered when determining a suitable + flow stop threshold for a given queue, as a producer may send its + capacity worth of messages _after_ a queue has reached the flow stop + threshold. Therefore, a flow stop threshould should be set such that + the queue can accomodate more messages without overflowing. + </p><p> + For example, assume two clients, C1 and C2, are producing messages to + one particular destination queue. Assume client C1 has a configured + capacity of 50 messages, and client C2's capacity is 15 messages. In + this example, assume C1 and C2 are the only clients queuing messages to + a given queue. If this queue has a Flow Stop Threshold of 100 + messages, then, worst-case, the queue may receive up to 165 messages + before clients C1 and C2 are blocked from sending further messages. + This is due to the fact that the queue will enable flow control on + receipt of its 101'st message - preventing the completion of the + Message.Transfer command that carried the 101'st message. However, C1 + and C2 are allowed to have a total of 65 (50 for C1 and 15 for C2) + messages pending completion of Message.Transfer before they will stop + producing messages. Thus, up to 65 messages may be enqueued beyond the + flow stop threshold before the producers will be blocked. + </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="producerflowcontrol-UserInterface"></a>1.8.2.  + User Interface + </h3></div></div></div><p> + By default, the C++ broker assigns a queue's flow stop and flow resume + thresholds when the queue is created. The C++ broker also allows the + user to manually specify the flow control thresholds on a per queue + basis. + </p><p> + However, queues that have been configured with a Limit Policy of type + RING or RING-STRICT do NOT have queue flow thresholds enabled by + default. The nature of a RING queue defines its behavior when its + capacity is reach: replace the oldest message. + </p><p> + The flow control state of a queue can be determined by the "flowState" + boolean in the queue's QMF management object. The queue's management + object also contains a counter that increments each time flow control + becomes active for the queue. + </p><p> + The broker applies a threshold ratio to compute a queue's default flow + control configuration. These thresholds are expressed as a percentage + of a queue's maximum capacity. There is one value for determining the + stop threshold, and another for determining the resume threshold. The + user may configure these percentages using the following broker + configuration options: + </p><pre class="programlisting"> + --default-flow-stop-threshold ("Queue capacity level at which flow control is activated.") + --default-flow-resume-threshold ("Queue capacity level at which flow control is de-activated.") + </pre><p> + For example: + </p><pre class="programlisting"> + qpidd --default-flow-stop-threshold=90 --default-flow-resume-threshold=75 + </pre><p> + Sets the default flow stop threshold to 90% of a queue's maximum + capacity and the flow resume threshold to 75% of the maximum capacity. + If a queue is created with a default-queue-limit of 10000 bytes, then + the default flow stop threshold would be 90% of 10000 = 9000 bytes and + the flow resume threshold would be 75% of 10000 = 7500. The same + computation is performed should a queue be created with a maximum size + expressed as a message count instead of a byte count. + </p><p> + If not overridden by the user, the value of the + default-flow-stop-threshold is 80% and the value of the + default-flow-resume-threshold is 70%. + </p><p> + The user may disable default queue flow control broker-wide by + specifying the value 0 for both of these configuration options. Note + that flow control may still be applied manually on a per-queue basis in + this case. + </p><p> + The user may manually set the flow thresholds when creating a queue. + The following options may be provided when adding a queue using the + <span class="command"><strong>qpid-config</strong></span> command line tool: + </p><pre class="programlisting"> + --flow-stop-size=<em class="replaceable"><code>N</code></em> Sets the queue's flow stop threshold to <em class="replaceable"><code>N</code></em> total bytes. + --flow-resume-size=<em class="replaceable"><code>N</code></em> Sets the queue's flow resume threshold to <em class="replaceable"><code>N</code></em> total bytes. + --flow-stop-count=<em class="replaceable"><code>N</code></em> Sets the queue's flow stop threshold to <em class="replaceable"><code>N</code></em> total messages. + --flow-resume-count=<em class="replaceable"><code>N</code></em> Sets the queue's flow resume threshold to <em class="replaceable"><code>N</code></em> total messages. + </pre><p> + Flow thresholds may also be specified in the + <span class="command"><strong>queue.declare</strong></span> method, via the + <span class="command"><strong>arguments</strong></span> parameter map. The following keys can be + provided in the arguments map for setting flow thresholds: + </p><div class="table"><a id="idm140333889897776"></a><p class="title"><strong>Table 1.20. Queue Declare Method Flow Control Arguments</strong></p><div class="table-contents"><table border="1" class="table" summary="Queue Declare Method Flow Control Arguments"><colgroup><col /><col /></colgroup><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody><tr><td>qpid.flow_stop_size</td><td>integer - queue's flow stop threshold value in bytes</td></tr><tr><td>qpid.flow_resume_size</td><td>integer - queue's flow resume threshold value in bytes</td></tr><tr><td>qpid.flow_stop_count</td><td>integer - queue's flow stop threshold value as a message count</td></tr><tr><td>qpid.flow_resume_count</td><td>integer - queue's flow resume threshold value as a message count</td></tr></tbody></table></div></div><br class="table-break" /><p> + The user may disable flow control on a per queue basis by setting + the flow-stop-size and flow-stop-count to zero for the queue. + </p><p> + The current state of flow control for a given queue can be + determined by the "flowStopped" statistic. This statistic is + available in the queue's QMF management object. The value of + flowStopped is True when the queue's capacity has exceeded the + flow stop threshold. The value of flowStopped is False when the + queue is no longer blocking due to flow control. + </p><p> + A queue will also track the number of times flow control has been + activated. The "flowStoppedCount" statistic is incremented each time + the queue's capacity exceeds a flow stop threshold. This statistic can + be used to monitor the activity of flow control for any given queue + over time. + </p><div class="table"><a id="idm140333889654384"></a><p class="title"><strong>Table 1.21. Flow Control Statistics available in Queue's QMF Class</strong></p><div class="table-contents"><table border="1" class="table" summary="Flow Control Statistics available in Queue's QMF Class"><colgroup><col /><col /><col /></colgroup><thead><tr><th>Statistic Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>flowStopped</td><td>Boolean</td><td>If true, producers are blocked by flow control.</td></tr><tr><td>flowStoppedCount</td><td>count32</td><td>Number of times flow control was activated for this queue</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="queue-state-replication.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="ch01.html">Up</a></td><td align="right" width="40% "> <a accesskey="n" href="AMQP-Compatibility.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.7.  + Queue State Replication +  </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> 1.9.  + AMQP compatibility + </td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/book/queue-state-replication.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/book/queue-state-replication.html.in b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/queue-state-replication.html.in new file mode 100644 index 0000000..65bf1be --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/cpp-broker/book/queue-state-replication.html.in @@ -0,0 +1,229 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.7.  + Queue State Replication + </th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ch01s06.html">Prev</a> </td><th align="center" width="60%">Chapter 1.  + Running the AMQP Messaging Broker + </th><td align="right" width="20%"> <a accesskey="n" href="producer-flow-control.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="queue-state-replication"></a>1.7.  + Queue State Replication + </h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="queuestatereplication-AsynchronousReplicationofQueueState"></a>1.7.1.  + Asynchronous + Replication of Queue State + </h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="queuestatereplication-Overview"></a>1.7.1.1.  + Overview + </h4></div></div></div><p> + There is support in qpidd for selective asynchronous replication + of queue state. This is achieved by: + </p><p> + (a) enabling event generation for the queues in question + </p><p> + (b) loading a plugin on the 'source' broker to encode those + events as messages on a replication queue (this plugin is + called + replicating_listener.so) + </p><p> + (c) loading a custom exchange plugin on the 'backup' broker (this + plugin is called replication_exchange.so) + </p><p> + (d) creating an instance of the replication exchange type on the + backup broker + </p><p> + (e) establishing a federation bridge between the replication + queue on the source broker and the replication exchange on the + backup broker + </p><p> + The bridge established between the source and backup brokers for + replication (step (e) above) should have acknowledgements turned + on (this may be done through the --ack N option to qpid-route). + This ensures that replication events are not lost if the bridge + fails. + </p><p> + The replication protocol will also eliminate duplicates to ensure + reliably replicated state. Note though that only one bridge per + replication exchange is supported. If clients try to publish to + the replication exchange or if more than a the single required + bridge from the replication queue on the source broker is + created, replication will be corrupted. (Access control may be + used to restrict access and help prevent this). + </p><p> + The replicating event listener plugin (step (b) above) has the + following options: + </p><pre class="programlisting"> +Queue Replication Options: + --replication-queue QUEUE Queue on which events for + other queues are recorded + --replication-listener-name NAME (replicator) name by which to register the + replicating event listener + --create-replication-queue if set, the replication will + be created if it does not + exist + </pre><p> + The name of the queue is required. It can either point to a + durable queue whose definition has been previously recorded, or + the --create-replication-queue option can be specified in which + case the queue will be created a simple non-durable queue if it + does not already exist. + </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="queuestatereplication-UsewithClustering"></a>1.7.1.2.  + Use with + Clustering + </h4></div></div></div><p> + The source and/or backup brokers may also be clustered brokers. + In this case the federated bridge will be re-established between + replicas should either of the originally connected nodes fail. + There are however the following limitations at present: + </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The backup site does not process membership updates after it + establishes the first connection. In order for newly added + members on a source cluster to be eligible as failover targets, + the bridge must be recreated after those members have been added + to the source cluster. + </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>New members added to a backup cluster will not receive + information about currently established bridges. Therefore in + order to allow the bridge to be re-established from these members + in the event of failure of older nodes, the bridge must be + recreated after the new members have joined. + </p></li></ul></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Only a single URL can be passed to create the initial link + from backup site to the primary site. this means that at the time + of creating the initial connection the initial node in the + primary site to which the connection is made needs to be running. + Once connected the backup site will receive a membership update + of all the nodes in the primary site, and if the initial + connection node in the primary fails, the link will be + re-established on the next node that was started (time) on the + primary site. + </p></li></ul></div><p> + Due to the acknowledged transfer of events over the bridge (see + note above) manual recreation of the bridge and automatic + re-establishment of te bridge after connection failure (including + failover where either or both ends are clustered brokers) will + not result in event loss. + </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="queuestatereplication-OperationsonBackupQueues"></a>1.7.1.3.  + Operations + on Backup Queues + </h4></div></div></div><p> + When replicating the state of a queue to a backup broker it is + important to recognise that any other operations performed + directly on the backup queue may break the replication. + </p><p> + If the backup queue is to be an active (i.e. accessed by clients + while replication is on) only enqueues should be selected + for + replication. In this mode, any message enqueued on the source + brokers copy of the queue will also be enqueued on the backup + brokers copy. However not attempt will be made to remove messages + from the backup queue in response to removal of messages from the + source queue. + </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="queuestatereplication-SelectingQueuesforReplication"></a>1.7.1.4.  + Selecting + Queues for Replication + </h4></div></div></div><p> + Queues are selected for replication by specifying the types of + events they should generate (it is from these events that the + replicating plugin constructs messages which are then pulled and + processed by the backup site). This is done through options + passed to the initial queue-declare command that creates the + queue and may be done either through qpid-config or similar + tools, or by the application. + </p><p> + With qpid-config, the --generate-queue-events options is used: + </p><pre class="programlisting"> + --generate-queue-events N + If set to 1, every enqueue will generate an event that can be processed by + registered listeners (e.g. for replication). If set to 2, events will be + generated for enqueues and dequeues + </pre><p> + From an application, the arguments field of the queue-declare + AMQP command is used to convey this information. An entry should + be added to the map with key 'qpid.queue_event_generation' and an + integer value of 1 (to replicate only enqueue events) or 2 (to + replicate both enqueue and dequeue events). + </p><p> + Applications written using the c++ client API may fine the + qpid::client::QueueOptions class convenient. This has a + enableQueueEvents() method on it that can be used to set the + option (the instance of QueueOptions is then passed as the value + of the arguments field in the queue-declare command. The boolean + option to that method should be set to true if only enequeue + events should be replicated; by default it is false meaning that + both enqueues and dequeues will be replicated. E.g. + </p><pre class="programlisting"> + QueueOptions options; + options.enableQueueEvents(false); + session.queueDeclare(arg::queue="my-queue", arg::arguments=options); + </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="queuestatereplication-Example"></a>1.7.1.5.  + Example + </h4></div></div></div><p> + Lets assume we will run the primary broker on host1 and the + backup on host2, have installed qpidd on both and have the + replicating_listener and replication_exchange plugins in qpidd's + module directory(*1). + </p><p> + On host1 we start the source broker and specifcy that a queue + called 'replication' should be used for storing the events until + consumed by the backup. We also request that this queue be + created (as transient) if not already specified: + </p><pre class="programlisting"> + qpidd --replication-queue replication-queue --create-replication-queue true --log-enable info+ + </pre><p> + On host2 we start up the backup broker ensuring that the + replication exchange module is loaded: + </p><pre class="programlisting"> + qpidd + </pre><p> + We can then create the instance of that replication exchange that + we will use to process the events: + </p><pre class="programlisting"> + qpid-config -a host2 add exchange replication replication-exchange + </pre><p> + If this fails with the message "Exchange type not implemented: + replication", it means the replication exchange module was + not + loaded. Check that the module is installed on your system and if + necessary provide the full path to the library. + </p><p> + We then connect the replication queue on the source broker with + the replication exchange on the backup broker using the + qpid-route command: + </p><pre class="programlisting"> + qpid-route --ack 50 queue add host2 host1 replication-exchange replication-queue +</pre><p> + The example above configures the bridge to acknowledge messages + in batches of 50. + </p><p> + Now create two queues (on both source and backup brokers), one + replicating both enqueues and dequeues (queue-a) and the + other + replicating only dequeues (queue-b): + </p><pre class="programlisting"> + qpid-config -a host1 add queue queue-a --generate-queue-events 2 + qpid-config -a host1 add queue queue-b --generate-queue-events 1 + + qpid-config -a host2 add queue queue-a + qpid-config -a host2 add queue queue-b + </pre><p> + We are now ready to use the queues and see the replication. + </p><p> + Any message enqueued on queue-a will be replicated to the backup + broker. When the message is acknowledged by a client connected to + host1 (and thus dequeued), that message will be removed from the + copy of the queue on host2. The state of queue-a on host2 will + thus mirror that of the equivalent queue on host1, albeit with a + small lag. (Note + however that we must not have clients connected to host2 publish + to-or consume from- queue-a or the state will fail to replicate + correctly due to conflicts). + </p><p> + Any message enqueued on queue-b on host1 will also be enqueued on + the equivalent queue on host2. However the acknowledgement and + consequent dequeuing of messages from queue-b on host1 will have + no effect on the state of queue-b on host2. + </p><p> + (*1) If not the paths in the above may need to be modified. E.g. + if using modules built from a qpid svn checkout, the following + would be added to the command line used to start qpidd on host1: + </p><pre class="programlisting"> + --load-module <path-to-qpid-dir>/src/.libs/replicating_listener.so + </pre><p> + and the following for the equivalent command line on host2: + </p><pre class="programlisting"> + --load-module <path-to-qpid-dir>/src/.libs/replication_exchange.so + </pre></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ch01s06.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="ch01.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="producer-flow-control.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.6. LVQ - Last Value Queue </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> 1.8.  + Producer Flow Control + </td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/cpp-broker/cpp-broker-book.pdf ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/cpp-broker/cpp-broker-book.pdf b/input/releases/qpid-cpp-1.39.0/cpp-broker/cpp-broker-book.pdf new file mode 100644 index 0000000..d974afd Binary files /dev/null and b/input/releases/qpid-cpp-1.39.0/cpp-broker/cpp-broker-book.pdf differ http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/index.md ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/index.md b/input/releases/qpid-cpp-1.39.0/index.md new file mode 100644 index 0000000..28c582e --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/index.md @@ -0,0 +1,71 @@ +;; +;; Licensed to the Apache Software Foundation (ASF) under one +;; or more contributor license agreements. See the NOTICE file +;; distributed with this work for additional information +;; regarding copyright ownership. The ASF licenses this file +;; to you under the Apache License, Version 2.0 (the +;; "License"); you may not use this file except in compliance +;; with the License. You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, +;; software distributed under the License is distributed on an +;; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +;; KIND, either express or implied. See the License for the +;; specific language governing permissions and limitations +;; under the License. +;; + +# Qpid C++ 1.39.0 + +Qpid C++ offers a connection-oriented messaging API and a message +broker written in C++ that stores, routes, and forwards messages using +AMQP. More about [Qpid]({{site_url}}/index.html). + +For a detailed list of the changes in this release, see the [release +notes](release-notes.html). + +It's important to [verify the +integrity]({{site_url}}/download.html#verify-what-you-download) of the +files you download. + +## Source archives + +| Content | Download | Verify | +|---------|----------|--------| +| C++ broker, Qpid Messaging API (C++) | [qpid-cpp-1.39.0.tar.gz](http://archive.apache.org/dist/qpid/cpp/1.39.0/qpid-cpp-1.39.0.tar.gz) | [ASC](https://archive.apache.org/dist/qpid/cpp/1.39.0/qpid-cpp-1.39.0.tar.gz.asc), [SHA512](https://archive.apache.org/dist/qpid/cpp/1.39.0/qpid-cpp-1.39.0.tar.gz.sha512) | + +## Components + +| Component | Languages | Platforms | AMQP versions | +|-----------|-----------|-----------|---------------| +| [C++ broker]({{site_url}}/components/cpp-broker/index.html) | C++ | Linux, Windows | 1.0, 0-10 | +| [Qpid Messaging API]({{site_url}}/components/messaging-api/index.html) | C++ | Linux, Windows | 1.0, 0-10 | + +## Documentation + + +<div class="two-column" markdown="1"> + + - [Installing Qpid C++](https://git-wip-us.apache.org/repos/asf?p=qpid-cpp.git;a=blob_plain;f=INSTALL.txt;hb=HEAD) + - [C++ broker book](cpp-broker/book/index.html) ([PDF](cpp-broker/cpp-broker-book.pdf)) + - [Using the Qpid Messaging API](messaging-api/book/using-the-qpid-messaging-api.html) ([PDF](messaging-api/qpid-messaging-api-book.pdf)) + - [C++ API reference](messaging-api/cpp/api/index.html) + - [C++ examples](messaging-api/cpp/examples/index.html) + +</div> + + +## More information + + - [Resolved issues in JIRA](https://issues.apache.org/jira/issues/?jql=project+%3D+QPID+AND+fixVersion+%3D+%27qpid-cpp-1.39.0%27+AND+resolution+%3D+%27fixed%27+ORDER+BY+priority+DESC) + - [Source repository tag](https://git-wip-us.apache.org/repos/asf/qpid-cpp.git/tree/refs/tags/1.39.0) + +<script type="text/javascript"> + _deferredFunctions.push(function() { + if ("1.39.0" === "{{current_cpp_release}}") { + _modifyCurrentReleaseLinks(); + } + }); +</script> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/messaging-api/book/Message-Groups-Guide.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/messaging-api/book/Message-Groups-Guide.html.in b/input/releases/qpid-cpp-1.39.0/messaging-api/book/Message-Groups-Guide.html.in new file mode 100644 index 0000000..5e014e3 --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/messaging-api/book/Message-Groups-Guide.html.in @@ -0,0 +1,99 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.17. Using Message Groups</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="section-amqp0-10-mapping.html">Prev</a> </td><th align="center" width="60%">Chapter 1. Using the Qpid Messaging API</th><td align="right" width="20%"> <a accesskey="n" href="ch02.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="Message-Groups-Guide"></a>1.17. Using Message Groups</h2></div></div></div><p> + This section describes how messaging applications can use the Message Group feature + provided by the Broker. + </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3> + The content of this section assumes the reader is familiar with the Message Group + feature as described in the AMQP Messaging Broker user's guide. Please read the + message grouping section in the Broker user's guide before using the + examples given in this section. + </div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="messagegroups-setup"></a>1.17.1. Creating Message Group Queues</h3></div></div></div><p> + The following examples show how to create a message group queue that enforces + ordered group consumption across multiple consumers. + </p><div class="example"><a id="idm140612067785264"></a><p class="title"><strong>Example 1.22. Message Group Queue Creation - Python</strong></p><div class="example-contents"><pre class="programlisting" lang="python" xml:lang="python"> +sender = connection.session().sender("msg-group-q;" + + " {create:always, delete:receiver," + + " node: {x-declare: {arguments:" + + " {'qpid.group_header_key':'THE-GROUP'," + + " 'qpid.shared_msg_group':1}}}}") + </pre></div></div><br class="example-break" /><div class="example"><a id="idm140612067783456"></a><p class="title"><strong>Example 1.23. Message Group Queue Creation - C++</strong></p><div class="example-contents"><pre class="programlisting" lang="c++" xml:lang="c++"> +std::string addr("msg-group-q; " + " {create:always, delete:receiver," + " node: {x-declare: {arguments:" + " {qpid.group_header_key:'THE-GROUP'," + " qpid.shared_msg_group:1}}}}"); +Sender sender = session.createSender(addr); + </pre></div></div><br class="example-break" /><div class="example"><a id="idm140612067782016"></a><p class="title"><strong>Example 1.24. Message Group Queue Creation - Java</strong></p><div class="example-contents"><pre class="programlisting" lang="java" xml:lang="java"> +Session s = c.createSession(false, Session.CLIENT_ACKNOWLEDGE); +String addr = "msg-group-q; {create:always, delete:receiver," + + " node: {x-declare: {arguments:" + + " {'qpid.group_header_key':'THE-GROUP'," + + " 'qpid.shared_msg_group':1}}}}"; +Destination d = (Destination) new AMQAnyDestination(addr); +MessageProducer sender = s.createProducer(d); + </pre></div></div><br class="example-break" /><p> + The example code uses the x-declare map to specify the message group configuration + that should be used for the queue. See the AMQP Messaging Broker user's guide + for a detailed description of these arguments. Note that the + qpid.group_header_key's value MUST be a string type if using the C++ broker. + </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="messagegroups-sending"></a>1.17.2. Sending Grouped Messages</h3></div></div></div><p> + When sending grouped messages, the client must add a message property containing the + group identifier to the outgoing message. If using the C++ broker, the group identifier + must be a string type. The key used for the property must exactly match the value passed in the + 'qpid.group_header_key' configuration argument. + </p><div class="example"><a id="idm140612073762496"></a><p class="title"><strong>Example 1.25. Sending Grouped Messages - Python</strong></p><div class="example-contents"><pre class="programlisting" lang="python" xml:lang="python"> +group = "A" +m = Message(content="some data", properties={"THE-GROUP": group}) +sender.send(m) + +group = "B" +m = Message(content="some other group's data", properties={"THE-GROUP": group}) +sender.send(m) + +group = "A" +m = Message(content="more data for group 'A'", properties={"THE-GROUP": group}) +sender.send(m) + </pre></div></div><br class="example-break" /><div class="example"><a id="idm140612073760720"></a><p class="title"><strong>Example 1.26. Sending Grouped Messages - C++</strong></p><div class="example-contents"><pre class="programlisting" lang="C++" xml:lang="C++"> + +const std::string groupKey("THE-GROUP"); +{ + Message msg("some data"); + msg.getProperties()[groupKey] = std::string("A"); + sender.send(msg); +} +{ + Message msg("some other group's data"); + msg.getProperties()[groupKey] = std::string("B"); + sender.send(msg); +} +{ + Message msg("more data for group 'A'"); + msg.getProperties()[groupKey] = std::string("A"); + sender.send(msg); +} + </pre></div></div><br class="example-break" /><div class="example"><a id="idm140612073758864"></a><p class="title"><strong>Example 1.27. Sending Grouped Messages - Java</strong></p><div class="example-contents"><pre class="programlisting" lang="java" xml:lang="java"> +String groupKey = "THE-GROUP"; + +TextMessage tmsg1 = s.createTextMessage("some data"); +tmsg1.setStringProperty(groupKey, "A"); +sender.send(tmsg1); + +TextMessage tmsg2 = s.createTextMessage("some other group's data"); +tmsg2.setStringProperty(groupKey, "B"); +sender.send(tmsg2); + +TextMessage tmsg3 = s.createTextMessage("more data for group 'A'"); +tmsg3.setStringProperty(groupKey, "A"); +sender.send(tmsg3); + </pre></div></div><br class="example-break" /><p> + The examples above send two groups worth of messages to the queue created in the + previous example. Two messages belong to group "A", and one belongs to group + "B". Note that it is not necessary to complete sending one group's messages before + starting another. Also note that there is no need to indicate to the broker when a + new group is created or an existing group retired - the broker tracks group state + automatically. + </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="messagegroups-receiving"></a>1.17.3. Receiving Grouped Messages</h3></div></div></div><p> + Since the broker enforces group policy when delivering messages, no special actions + are necessary for receiving grouped messages from the broker. However, applications + must adhere to the rules for message group consumption as described in the AMQP + Messaging Broker user's guide. + </p></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="section-amqp0-10-mapping.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="using-the-qpid-messaging-api.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ch02.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.16. The AMQP 0-10 mapping </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> Chapter 2. The .NET Binding for the C++ Messaging Client</td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/messaging-api/book/acknowledgements.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/messaging-api/book/acknowledgements.html.in b/input/releases/qpid-cpp-1.39.0/messaging-api/book/acknowledgements.html.in new file mode 100644 index 0000000..8eefc89 --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/messaging-api/book/acknowledgements.html.in @@ -0,0 +1,21 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.7. Acknowledging Received Messages</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="prefetch.html">Prev</a> </td><th align="center" width="60%">Chapter 1. Using the Qpid Messaging API</th><td align="right" width="20%"> <a accesskey="n" href="ch01s08.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="acknowledgements"></a>1.7. Acknowledging Received Messages</h2></div></div></div><p>Applications that receive messages should acknowledge their + receipt by calling the session's acknowledge method. As in the + case of sending messages, acknowledged transfer of messages to + receivers provides at-least-once reliability, which means that the + loss of the connection or a client crash does not result in lost + messages; durable messages are not lost even if the broker is + restarted. + + Some cases may not require this however and the reliability can be + controlled through a link property in the address options (see + <a class="xref" href="section-addresses.html#table-link-properties" title="Table 1.3. Link Properties">Table 1.3, “Link Properties”</a>).</p><p>The acknowledge call acknowledges all messages received on + the session (i.e. all message that have been returned from a fetch + call on a receiver created on that session).</p><p>The acknowledge call also support an optional parameter + controlling whether the call is synchronous or not. A synchronous + acknowledge will block until the server has confirmed that it has + received the acknowledgement. In the asynchronous case, when the + call returns there is not yet any guarantee that the server has + received and processed the acknowledgement. The session may be + queried for the number of unsettled acknowledgements; when that + count is zero all acknowledgements made for received messages have + been successful.</p></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="prefetch.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="using-the-qpid-messaging-api.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ch01s08.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.6. Receiver Capacity (Prefetch) </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> 1.8. Receiving Messages from Multiple Sources</td></tr></table></div></div> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-site/blob/c3ab60f6/input/releases/qpid-cpp-1.39.0/messaging-api/book/ch01s02.html.in ---------------------------------------------------------------------- diff --git a/input/releases/qpid-cpp-1.39.0/messaging-api/book/ch01s02.html.in b/input/releases/qpid-cpp-1.39.0/messaging-api/book/ch01s02.html.in new file mode 100644 index 0000000..bd0382c --- /dev/null +++ b/input/releases/qpid-cpp-1.39.0/messaging-api/book/ch01s02.html.in @@ -0,0 +1,31 @@ +<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.2. A Simple Messaging Program in Python</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="using-the-qpid-messaging-api.html">Prev</a> </td><th align="center" width="60%">Chapter 1. Using the Qpid Messaging API</th><td align="right" width="20%"> <a accesskey="n" href="ch01s03.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="idm140612073699520"></a>1.2. A Simple Messaging Program in Python</h2></div></div></div><p>The following Python program shows how to create a + connection, create a session, send messages using a sender, and + receive messages using a receiver.</p><div class="example"><a id="idm140612073698272"></a><p class="title"><strong>Example 1.2. "Hello world!" in Python</strong></p><div class="example-contents"><pre class="programlisting" lang="python" xml:lang="python"> + import sys + from qpid.messaging import * + + broker = "localhost:5672" if len(sys.argv)<2 else sys.argv[1] + address = "amq.topic" if len(sys.argv)<3 else sys.argv[2] + + connection = Connection(broker) + + try: + connection.open() <a class="co" href="ch01s02.html#callout-python-open" id="hello-python-open">(1)</a> + session = connection.session() <a class="co" href="ch01s02.html#callout-python-session" id="hello-python-session">(2)</a> + + sender = session.sender(address) <a class="co" href="ch01s02.html#callout-python-sender" id="hello-python-sender">(3)</a> + receiver = session.receiver(address) <a class="co" href="ch01s02.html#callout-python-receiver" id="hello-python-receiver">(4)</a> + + sender.send(Message("Hello world!")); + + message = receiver.fetch(timeout=1) <a class="co" href="ch01s02.html#callout-python-fetch" id="hello-python-fetch">(5)</a> + print message.content + session.acknowledge() <a class="co" href="ch01s02.html#callout-python-acknowledge" id="hello-python-acknowledge">(6)</a> + + except MessagingError,m: + print m + finally: + connection.close() <a class="co" href="ch01s02.html#callout-python-close" id="hello-python-close">(7)</a> + </pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-open"></a><a href="#hello-python-open">(1)</a> </p></td><td align="left" valign="top"><p>Establishes the connection with the messaging broker.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-session"></a><a href="#hello-python-session">(2)</a> </p></td><td align="left" valign="top"><p>Creates a session object on which messages will be sent and received.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-receiver"></a><a href="#hello-python-receiver">(4)</a> </p></td><td align="left" valign="top"><p>Creates a receiver that receives messages from the given address.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-sender"></a><a href="#hello-python-sender">(3)</a> </p></td><td align="left" valign="top"><p>Creates a sender that sends to the given address.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-fetch"></a><a href="#hello-python-fetch">(5)</a> </p></td><td align="left" valign="top"><p>Receives the next message. The duration is optional, if omitted, will wait indefinitely for the next message.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-acknowledge"></a><a href="#hello-python-acknowledge">(6)</a> </p></td><td align="left" valign="top"><p>Acknowledges receipt of all fetched messages on + the session. This informs the broker that the messages were + transfered and processed by the client successfully.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-python-close"></a><a href="#hello-python-close">(7)</a> </p></td><td align="left" valign="top"><p>Closes the connection, all sessions managed by the connection, and all senders and receivers managed by each session.</p></td></tr></table></div></div></div><br class="example-break" /></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="using-the-qpid-messaging-api.html">Prev</a> </td><td align="center" width="20%"><a accesskey="u" href="using-the-qpid-messaging-api.html">Up</a></td><td align="right" width="40%"> <a accesskey="n" href="ch01s03.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">Chapter 1. Using the Qpid Messaging API </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align=" right" valign="top" width="40%"> 1.3. A Simple Messaging Program in .NET C#</td></tr></table></div></div> \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org