http://git-wip-us.apache.org/repos/asf/qpid-site/blob/a39b425b/content/releases/qpid-0.26/cpp-broker/book/chapter-Managing-CPP-Broker.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-0.26/cpp-broker/book/chapter-Managing-CPP-Broker.html b/content/releases/qpid-0.26/cpp-broker/book/chapter-Managing-CPP-Broker.html deleted file mode 100644 index 79a276b..0000000 --- a/content/releases/qpid-0.26/cpp-broker/book/chapter-Managing-CPP-Broker.html +++ /dev/null @@ -1,606 +0,0 @@ -<!DOCTYPE html> -<!-- - - - - 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. - - ---> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> - <head> - <title>2.1.  Managing the C++ Broker - Apache Qpid™</title> - <meta http-equiv="X-UA-Compatible" content="IE=edge"/> - <meta name="viewport" content="width=device-width, initial-scale=1.0"/> - <link rel="stylesheet" href="/site.css" type="text/css" async="async"/> - <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/> - <script type="text/javascript">var _deferredFunctions = [];</script> - <script type="text/javascript" src="/deferred.js" defer="defer"></script> - <!--[if lte IE 8]> - <link rel="stylesheet" href="/ie.css" type="text/css"/> - <script type="text/javascript" src="/html5shiv.js"></script> - <![endif]--> - - <!-- Redirects for `go get` and godoc.org --> - <meta name="go-import" - content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/> - <meta name="go-source" - content="qpid.apache.org -https://github.com/apache/qpid-proton/blob/go1/README.md -https://github.com/apache/qpid-proton/tree/go1{/dir} -https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> - </head> - <body> - <div id="-content"> - <div id="-top" class="panel"> - <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a> - - <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a> - - <ul id="-global-navigation"> - <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li> - <li><a href="/documentation.html">Documentation</a></li> - <li><a href="/download.html">Download</a></li> - <li><a href="/discussion.html">Discussion</a></li> - </ul> - </div> - - <div id="-menu" class="panel" style="display: none;"> - <div class="flex"> - <section> - <h3>Project</h3> - - <ul> - <li><a href="/overview.html">Overview</a></li> - <li><a href="/components/index.html">Components</a></li> - <li><a href="/releases/index.html">Releases</a></li> - </ul> - </section> - - <section> - <h3>Messaging APIs</h3> - - <ul> - <li><a href="/proton/index.html">Qpid Proton</a></li> - <li><a href="/components/jms/index.html">Qpid JMS</a></li> - <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li> - </ul> - </section> - - <section> - <h3>Servers and tools</h3> - - <ul> - <li><a href="/components/java-broker/index.html">Broker for Java</a></li> - <li><a href="/components/cpp-broker/index.html">C++ broker</a></li> - <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li> - </ul> - </section> - - <section> - <h3>Resources</h3> - - <ul> - <li><a href="/dashboard.html">Dashboard</a></li> - <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li> - <li><a href="/resources.html">More resources</a></li> - </ul> - </section> - </div> - </div> - - <div id="-search" class="panel" style="display: none;"> - <form action="http://www.google.com/search" method="get"> - <input type="hidden" name="sitesearch" value="qpid.apache.org"/> - <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/> - <button type="submit">Search</button> - <a href="/search.html">More ways to search</a> - </form> - </div> - - <div id="-middle" class="panel"> - <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-0.26/index.html">Qpid 0.26</a></li><li><a href="/releases/qpid-0.26/cpp-broker/book/index.html">AMQP Messaging Broker (Implemented in C++)</a></li><li>2.1.  Managing the C++ Broker</li></ul> - - <div id="-middle-content"> - <div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter 2.  - Managing the AMQP Messaging Broker - </th></tr><tr><td align="left" width="20%"><a accesskey="p" href="ha-queue-replication.html">Prev</a> </td><th align="center" width="60%"> </th><td align="right" width="20%"> <a accesskey="n" href="ch02s02.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="chapter-Managing-CPP-Broker"></a>Chapter 2.  - Managing the AMQP Messaging Broker - </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><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#idm139836367882816">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></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="section-Managing-CPP-Broker"></a>2.1.  Managing the C++ Broker </h2></div></div></div><p> - There are quite a few ways to interact with the C++ broker. The - command line tools - include: - </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>qpid-route - used to configure federation (a set of federated - brokers) - </p></li><li class="listitem"><p>qpid-config - used to configure queues, exchanges, bindings - and list them etc - </p></li><li class="listitem"><p>qpid-tool - used to view management information/statistics - and call any management actions on the broker - </p></li><li class="listitem"><p>qpid-printevents - used to receive and print QMF events - </p></li><li class="listitem"><p>qpid-ha - used to interact with the High Availability module - </p></li></ul></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="MgmtC-2B-2B-Usingqpidconfig"></a>2.1.1.  - Using qpid-config - </h3></div></div></div><p> - This utility can be used to create queues exchanges and bindings, - both durable and transient. Always check for latest options by - running --help command. - </p><pre class="programlisting"> -$ qpid-config --help -Usage: qpid-config [OPTIONS] - qpid-config [OPTIONS] exchanges [filter-string] - qpid-config [OPTIONS] queues [filter-string] - qpid-config [OPTIONS] add exchange <type> <name> [AddExchangeOptions] - qpid-config [OPTIONS] del exchange <name> - qpid-config [OPTIONS] add queue <name> [AddQueueOptions] - qpid-config [OPTIONS] del queue <name> - qpid-config [OPTIONS] bind <exchange-name> <queue-name> [binding-key] - qpid-config [OPTIONS] unbind <exchange-name> <queue-name> [binding-key] - -Options: - -b [ --bindings ] Show bindings in queue or exchange list - -a [ --broker-addr ] Address (localhost) Address of qpidd broker - broker-addr is in the form: [username/password@] hostname | ip-address [:<port>] - ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost - -Add Queue Options: - --durable Queue is durable - --file-count N (8) Number of files in queue's persistence journal - --file-size N (24) File size in pages (64Kib/page) - --max-queue-size N Maximum in-memory queue size as bytes - --max-queue-count N Maximum in-memory queue size as a number of messages - --limit-policy [none | reject | flow-to-disk | ring | ring-strict] - Action taken when queue limit is reached: - none (default) - Use broker's default policy - reject - Reject enqueued messages - flow-to-disk - Page messages to disk - ring - Replace oldest unacquired message with new - ring-strict - Replace oldest message, reject if oldest is acquired - --order [fifo | lvq | lvq-no-browse] - Set queue ordering policy: - fifo (default) - First in, first out - lvq - Last Value Queue ordering, allows queue browsing - lvq-no-browse - Last Value Queue ordering, browsing clients may lose data - --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 - -Add Exchange Options: - --durable Exchange is durable - --sequence Exchange will insert a 'qpid.msg_sequence' field in the message header - with a value that increments for each message forwarded. - --ive Exchange will behave as an 'initial-value-exchange', keeping a reference - to the last message forwarded and enqueuing that message to newly bound - queues. -</pre><p> - Get the summary page - </p><pre class="programlisting"> -$ qpid-config -Total Exchanges: 6 - topic: 2 - headers: 1 - fanout: 1 - direct: 2 - Total Queues: 7 - durable: 0 - non-durable: 7 -</pre><p> - List the queues - </p><pre class="programlisting"> -$ qpid-config queues -Queue Name Attributes -================================================================= -pub_start -pub_done -sub_ready -sub_done -perftest0 --durable -reply-dhcp-100-18-254.bos.redhat.com.20713 auto-del excl -topic-dhcp-100-18-254.bos.redhat.com.20713 auto-del excl - -</pre><p> - List the exchanges with bindings - </p><pre class="programlisting"> -$ ./qpid-config -b exchanges -Exchange '' (direct) - bind pub_start => pub_start - bind pub_done => pub_done - bind sub_ready => sub_ready - bind sub_done => sub_done - bind perftest0 => perftest0 - bind mgmt-3206ff16-fb29-4a30-82ea-e76f50dd7d15 => mgmt-3206ff16-fb29-4a30-82ea-e76f50dd7d15 - bind repl-3206ff16-fb29-4a30-82ea-e76f50dd7d15 => repl-3206ff16-fb29-4a30-82ea-e76f50dd7d15 -Exchange 'amq.direct' (direct) - bind repl-3206ff16-fb29-4a30-82ea-e76f50dd7d15 => repl-3206ff16-fb29-4a30-82ea-e76f50dd7d15 - bind repl-df06c7a6-4ce7-426a-9f66-da91a2a6a837 => repl-df06c7a6-4ce7-426a-9f66-da91a2a6a837 - bind repl-c55915c2-2fda-43ee-9410-b1c1cbb3e4ae => repl-c55915c2-2fda-43ee-9410-b1c1cbb3e4ae -Exchange 'amq.topic' (topic) -Exchange 'amq.fanout' (fanout) -Exchange 'amq.match' (headers) -Exchange 'qpid.management' (topic) - bind mgmt.# => mgmt-3206ff16-fb29-4a30-82ea-e76f50dd7d15 -</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="MgmtC-2B-2B-Usingqpidroute"></a>2.1.2.  - Using qpid-route - </h3></div></div></div><p> - This utility is to create federated networks of brokers, This - allows you for forward messages between brokers in a network. - Messages can be routed statically (using "qpid-route route add") - where the bindings that control message forwarding are supplied - in the route. Message routing can also be dynamic (using - "qpid-route dynamic add") where the messages are automatically - forwarded to clients based on their bindings to the local broker. - </p><pre class="programlisting"> -$ qpid-route -Usage: qpid-route [OPTIONS] dynamic add <dest-broker> <src-broker> <exchange> [tag] [exclude-list] - qpid-route [OPTIONS] dynamic del <dest-broker> <src-broker> <exchange> - - qpid-route [OPTIONS] route add <dest-broker> <src-broker> <exchange> <routing-key> [tag] [exclude-list] - qpid-route [OPTIONS] route del <dest-broker> <src-broker> <exchange> <routing-key> - qpid-route [OPTIONS] queue add <dest-broker> <src-broker> <exchange> <queue> - qpid-route [OPTIONS] queue del <dest-broker> <src-broker> <exchange> <queue> - qpid-route [OPTIONS] route list [<dest-broker>] - qpid-route [OPTIONS] route flush [<dest-broker>] - qpid-route [OPTIONS] route map [<broker>] - - qpid-route [OPTIONS] link add <dest-broker> <src-broker> - qpid-route [OPTIONS] link del <dest-broker> <src-broker> - qpid-route [OPTIONS] link list [<dest-broker>] - -Options: - -v [ --verbose ] Verbose output - -q [ --quiet ] Quiet output, don't print duplicate warnings - -d [ --durable ] Added configuration shall be durable - -e [ --del-empty-link ] Delete link after deleting last route on the link - -s [ --src-local ] Make connection to source broker (push route) - -t <transport> [ --transport <transport>] - Specify transport to use for links, defaults to tcp - - dest-broker and src-broker are in the form: [username/password@] hostname | ip-address [:<port>] - ex: localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost -</pre><p> - A few examples: - </p><pre class="programlisting"> -qpid-route dynamic add host1 host2 fed.topic -qpid-route dynamic add host2 host1 fed.topic - -qpid-route -v route add host1 host2 hub1.topic hub2.topic.stock.buy -qpid-route -v route add host1 host2 hub1.topic hub2.topic.stock.sell -qpid-route -v route add host1 host2 hub1.topic 'hub2.topic.stock.#' -qpid-route -v route add host1 host2 hub1.topic 'hub2.#' -qpid-route -v route add host1 host2 hub1.topic 'hub2.topic.#' -qpid-route -v route add host1 host2 hub1.topic 'hub2.global.#' -</pre><p> - The link map feature can be used to display the entire federated - network configuration by supplying a single broker as an entry - point: - </p><pre class="programlisting"> -$ qpid-route route map localhost:10001 - -Finding Linked Brokers: - localhost:10001... Ok - localhost:10002... Ok - localhost:10003... Ok - localhost:10004... Ok - localhost:10005... Ok - localhost:10006... Ok - localhost:10007... Ok - localhost:10008... Ok - -Dynamic Routes: - - Exchange fed.topic: - localhost:10002 <=> localhost:10001 - localhost:10003 <=> localhost:10002 - localhost:10004 <=> localhost:10002 - localhost:10005 <=> localhost:10002 - localhost:10006 <=> localhost:10005 - localhost:10007 <=> localhost:10006 - localhost:10008 <=> localhost:10006 - - Exchange fed.direct: - localhost:10002 => localhost:10001 - localhost:10004 => localhost:10003 - localhost:10003 => localhost:10002 - localhost:10001 => localhost:10004 - -Static Routes: - - localhost:10003(ex=amq.direct) <= localhost:10005(ex=amq.direct) key=rkey - localhost:10003(ex=amq.direct) <= localhost:10005(ex=amq.direct) key=rkey2 -</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="MgmtC-2B-2B-Usingqpidtool"></a>2.1.3.  - Using qpid-tool - </h3></div></div></div><p> - This utility provided a telnet style interface to be able to - view, list all stats and action - all the methods. Simple capture below. Best to just play with it - and mail the list if you have - questions or want features added. - </p><pre class="programlisting"> -qpid: -qpid: help -Management Tool for QPID -Commands: - list - Print summary of existing objects by class - list <className> - Print list of objects of the specified class - list <className> all - Print contents of all objects of specified class - list <className> active - Print contents of all non-deleted objects of specified class - list <list-of-IDs> - Print contents of one or more objects (infer className) - list <className> <list-of-IDs> - Print contents of one or more objects - list is space-separated, ranges may be specified (i.e. 1004-1010) - call <ID> <methodName> <args> - Invoke a method on an object - schema - Print summary of object classes seen on the target - schema <className> - Print details of an object class - set time-format short - Select short timestamp format (default) - set time-format long - Select long timestamp format - quit or ^D - Exit the program -qpid: list -Management Object Types: - ObjectType Active Deleted - ================================ - qpid.binding 21 0 - qpid.broker 1 0 - qpid.client 1 0 - qpid.exchange 6 0 - qpid.queue 13 0 - qpid.session 4 0 - qpid.system 1 0 - qpid.vhost 1 0 -qpid: list qpid.system -Objects of type qpid.system - ID Created Destroyed Index - ================================== - 1000 21:00:02 - host -qpid: list 1000 -Object of type qpid.system: (last sample time: 21:26:02) - Type Element 1000 - ======================================================= - config sysId host - config osName Linux - config nodeName localhost.localdomain - config release 2.6.24.4-64.fc8 - config version #1 SMP Sat Mar 29 09:15:49 EDT 2008 - config machine x86_64 -qpid: schema queue -Schema for class 'qpid.queue': - Element Type Unit Access Notes Description - =================================================================================================================== - vhostRef reference ReadCreate index - name short-string ReadCreate index - durable boolean ReadCreate - autoDelete boolean ReadCreate - exclusive boolean ReadCreate - arguments field-table ReadOnly Arguments supplied in queue.declare - storeRef reference ReadOnly Reference to persistent queue (if durable) - msgTotalEnqueues uint64 message Total messages enqueued - msgTotalDequeues uint64 message Total messages dequeued - msgTxnEnqueues uint64 message Transactional messages enqueued - msgTxnDequeues uint64 message Transactional messages dequeued - msgPersistEnqueues uint64 message Persistent messages enqueued - msgPersistDequeues uint64 message Persistent messages dequeued - msgDepth uint32 message Current size of queue in messages - msgDepthHigh uint32 message Current size of queue in messages (High) - msgDepthLow uint32 message Current size of queue in messages (Low) - byteTotalEnqueues uint64 octet Total messages enqueued - byteTotalDequeues uint64 octet Total messages dequeued - byteTxnEnqueues uint64 octet Transactional messages enqueued - byteTxnDequeues uint64 octet Transactional messages dequeued - bytePersistEnqueues uint64 octet Persistent messages enqueued - bytePersistDequeues uint64 octet Persistent messages dequeued - byteDepth uint32 octet Current size of queue in bytes - byteDepthHigh uint32 octet Current size of queue in bytes (High) - byteDepthLow uint32 octet Current size of queue in bytes (Low) - enqueueTxnStarts uint64 transaction Total enqueue transactions started - enqueueTxnCommits uint64 transaction Total enqueue transactions committed - enqueueTxnRejects uint64 transaction Total enqueue transactions rejected - enqueueTxnCount uint32 transaction Current pending enqueue transactions - enqueueTxnCountHigh uint32 transaction Current pending enqueue transactions (High) - enqueueTxnCountLow uint32 transaction Current pending enqueue transactions (Low) - dequeueTxnStarts uint64 transaction Total dequeue transactions started - dequeueTxnCommits uint64 transaction Total dequeue transactions committed - dequeueTxnRejects uint64 transaction Total dequeue transactions rejected - dequeueTxnCount uint32 transaction Current pending dequeue transactions - dequeueTxnCountHigh uint32 transaction Current pending dequeue transactions (High) - dequeueTxnCountLow uint32 transaction Current pending dequeue transactions (Low) - consumers uint32 consumer Current consumers on queue - consumersHigh uint32 consumer Current consumers on queue (High) - consumersLow uint32 consumer Current consumers on queue (Low) - bindings uint32 binding Current bindings - bindingsHigh uint32 binding Current bindings (High) - bindingsLow uint32 binding Current bindings (Low) - unackedMessages uint32 message Messages consumed but not yet acked - unackedMessagesHigh uint32 message Messages consumed but not yet acked (High) - unackedMessagesLow uint32 message Messages consumed but not yet acked (Low) - messageLatencySamples delta-time nanosecond Broker latency through this queue (Samples) - messageLatencyMin delta-time nanosecond Broker latency through this queue (Min) - messageLatencyMax delta-time nanosecond Broker latency through this queue (Max) - messageLatencyAverage delta-time nanosecond Broker latency through this queue (Average) -Method 'purge' Discard all messages on queue -qpid: list queue -Objects of type qpid.queue - ID Created Destroyed Index - =========================================================================== - 1012 21:08:13 - 1002.pub_start - 1014 21:08:13 - 1002.pub_done - 1016 21:08:13 - 1002.sub_ready - 1018 21:08:13 - 1002.sub_done - 1020 21:08:13 - 1002.perftest0 - 1038 21:09:08 - 1002.mgmt-3206ff16-fb29-4a30-82ea-e76f50dd7d15 - 1040 21:09:08 - 1002.repl-3206ff16-fb29-4a30-82ea-e76f50dd7d15 - 1046 21:09:32 - 1002.mgmt-df06c7a6-4ce7-426a-9f66-da91a2a6a837 - 1048 21:09:32 - 1002.repl-df06c7a6-4ce7-426a-9f66-da91a2a6a837 - 1054 21:10:01 - 1002.mgmt-c55915c2-2fda-43ee-9410-b1c1cbb3e4ae - 1056 21:10:01 - 1002.repl-c55915c2-2fda-43ee-9410-b1c1cbb3e4ae - 1063 21:26:00 - 1002.mgmt-8d621997-6356-48c3-acab-76a37081d0f3 - 1065 21:26:00 - 1002.repl-8d621997-6356-48c3-acab-76a37081d0f3 -qpid: list 1020 -Object of type qpid.queue: (last sample time: 21:26:02) - Type Element 1020 - ========================================================================== - config vhostRef 1002 - config name perftest0 - config durable False - config autoDelete False - config exclusive False - config arguments {'qpid.max_size': 0, 'qpid.max_count': 0} - config storeRef NULL - inst msgTotalEnqueues 500000 messages - inst msgTotalDequeues 500000 - inst msgTxnEnqueues 0 - inst msgTxnDequeues 0 - inst msgPersistEnqueues 0 - inst msgPersistDequeues 0 - inst msgDepth 0 - inst msgDepthHigh 0 - inst msgDepthLow 0 - inst byteTotalEnqueues 512000000 octets - inst byteTotalDequeues 512000000 - inst byteTxnEnqueues 0 - inst byteTxnDequeues 0 - inst bytePersistEnqueues 0 - inst bytePersistDequeues 0 - inst byteDepth 0 - inst byteDepthHigh 0 - inst byteDepthLow 0 - inst enqueueTxnStarts 0 transactions - inst enqueueTxnCommits 0 - inst enqueueTxnRejects 0 - inst enqueueTxnCount 0 - inst enqueueTxnCountHigh 0 - inst enqueueTxnCountLow 0 - inst dequeueTxnStarts 0 - inst dequeueTxnCommits 0 - inst dequeueTxnRejects 0 - inst dequeueTxnCount 0 - inst dequeueTxnCountHigh 0 - inst dequeueTxnCountLow 0 - inst consumers 0 consumers - inst consumersHigh 0 - inst consumersLow 0 - inst bindings 1 binding - inst bindingsHigh 1 - inst bindingsLow 1 - inst unackedMessages 0 messages - inst unackedMessagesHigh 0 - inst unackedMessagesLow 0 - inst messageLatencySamples 0 - inst messageLatencyMin 0 - inst messageLatencyMax 0 - inst messageLatencyAverage 0 -qpid: -</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="MgmtC-2B-2B-Usingqpidprintevents"></a>2.1.4.  - Using - qpid-printevents - </h3></div></div></div><p> - This utility connects to one or more brokers and collects events, - printing out a line per event. - </p><pre class="programlisting"> -$ qpid-printevents --help -Usage: qpid-printevents [options] [broker-addr]... - -Collect and print events from one or more Qpid message brokers. If no broker- -addr is supplied, qpid-printevents will connect to 'localhost:5672'. broker- -addr is of the form: [username/password@] hostname | ip-address [:<port>] ex: -localhost, 10.1.1.7:10000, broker-host:10000, guest/guest@localhost - -Options: - -h, --help show this help message and exit -</pre><p> - You get the idea... have fun! - </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm139836367882816"></a>2.1.5. Using qpid-ha</h3></div></div></div><p>This utility lets you monitor and control the activity of the clustering behavior provided by the HA module. - </p><pre class="programlisting"> - -qpid-ha --help -usage: qpid-ha <command> [<arguments>] - -Commands are: - - ready Test if a backup broker is ready. - query Print HA configuration settings. - set Set HA configuration settings. - promote Promote broker from backup to primary. - replicate Set up replication from <queue> on <remote-broker> to <queue> on the current broker. - -For help with a command type: qpid-ha <command> --help - - </pre></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="ha-queue-replication.html">Prev</a> </td><td align="center" width="20%"> </td><td align="right" width="40%"> <a accesskey="n" href="ch02s02.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.13. Replicating Queues with the HA module </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> 2.2.  - Qpid Management Framework - </td></tr></table></div></div> - - <hr/> - - <ul id="-apache-navigation"> - <li><a href="http://www.apache.org/">Apache</a></li> - <li><a href="http://www.apache.org/licenses/">License</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="/security.html">Security</a></li> - <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li> - </ul> - - <p id="-legal"> - Apache Qpid, Messaging built on AMQP; Copyright © 2015 - The Apache Software Foundation; Licensed under - the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache - License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton, - Proton, Apache, the Apache feather logo, and the Apache Qpid - project logo are trademarks of The Apache Software - Foundation; All other marks mentioned may be trademarks or - registered trademarks of their respective owners - </p> - </div> - </div> - </div> - </body> -</html>
http://git-wip-us.apache.org/repos/asf/qpid-site/blob/a39b425b/content/releases/qpid-0.26/cpp-broker/book/chapter-ha.html ---------------------------------------------------------------------- diff --git a/content/releases/qpid-0.26/cpp-broker/book/chapter-ha.html b/content/releases/qpid-0.26/cpp-broker/book/chapter-ha.html deleted file mode 100644 index 92da499..0000000 --- a/content/releases/qpid-0.26/cpp-broker/book/chapter-ha.html +++ /dev/null @@ -1,693 +0,0 @@ -<!DOCTYPE html> -<!-- - - - - 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. - - ---> -<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> - <head> - <title>1.12. Active-Passive Messaging Clusters - Apache Qpid™</title> - <meta http-equiv="X-UA-Compatible" content="IE=edge"/> - <meta name="viewport" content="width=device-width, initial-scale=1.0"/> - <link rel="stylesheet" href="/site.css" type="text/css" async="async"/> - <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/> - <script type="text/javascript">var _deferredFunctions = [];</script> - <script type="text/javascript" src="/deferred.js" defer="defer"></script> - <!--[if lte IE 8]> - <link rel="stylesheet" href="/ie.css" type="text/css"/> - <script type="text/javascript" src="/html5shiv.js"></script> - <![endif]--> - - <!-- Redirects for `go get` and godoc.org --> - <meta name="go-import" - content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/> - <meta name="go-source" - content="qpid.apache.org -https://github.com/apache/qpid-proton/blob/go1/README.md -https://github.com/apache/qpid-proton/tree/go1{/dir} -https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/> - </head> - <body> - <div id="-content"> - <div id="-top" class="panel"> - <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a> - - <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a> - - <ul id="-global-navigation"> - <li><a id="-logotype" href="/index.html">Apache Qpid<sup>™</sup></a></li> - <li><a href="/documentation.html">Documentation</a></li> - <li><a href="/download.html">Download</a></li> - <li><a href="/discussion.html">Discussion</a></li> - </ul> - </div> - - <div id="-menu" class="panel" style="display: none;"> - <div class="flex"> - <section> - <h3>Project</h3> - - <ul> - <li><a href="/overview.html">Overview</a></li> - <li><a href="/components/index.html">Components</a></li> - <li><a href="/releases/index.html">Releases</a></li> - </ul> - </section> - - <section> - <h3>Messaging APIs</h3> - - <ul> - <li><a href="/proton/index.html">Qpid Proton</a></li> - <li><a href="/components/jms/index.html">Qpid JMS</a></li> - <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li> - </ul> - </section> - - <section> - <h3>Servers and tools</h3> - - <ul> - <li><a href="/components/java-broker/index.html">Broker for Java</a></li> - <li><a href="/components/cpp-broker/index.html">C++ broker</a></li> - <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li> - </ul> - </section> - - <section> - <h3>Resources</h3> - - <ul> - <li><a href="/dashboard.html">Dashboard</a></li> - <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li> - <li><a href="/resources.html">More resources</a></li> - </ul> - </section> - </div> - </div> - - <div id="-search" class="panel" style="display: none;"> - <form action="http://www.google.com/search" method="get"> - <input type="hidden" name="sitesearch" value="qpid.apache.org"/> - <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/> - <button type="submit">Search</button> - <a href="/search.html">More ways to search</a> - </form> - </div> - - <div id="-middle" class="panel"> - <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-0.26/index.html">Qpid 0.26</a></li><li><a href="/releases/qpid-0.26/cpp-broker/book/index.html">AMQP Messaging Broker (Implemented in C++)</a></li><li>1.12. Active-Passive Messaging Clusters</li></ul> - - <div id="-middle-content"> - <div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">1.12. Active-Passive Messaging Clusters</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="Using-message-groups.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="ha-queue-replication.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a id="chapter-ha"></a>1.12. Active-Passive Messaging Clusters</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="ha-overview"></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> - messaging clusters to provide fault tolerant message delivery. - </p><p> - In an active-passive cluster only one broker, known as the - <em class="firstterm">primary</em>, is active and serving clients at a time. The other - brokers are standing by as <em class="firstterm">backups</em>. Changes on the primary - are replicated to all the backups so they are always up-to-date or "hot". Backup - brokers reject client connection attempts, to enforce the requirement that clients - only connect to the primary. - </p><p> - If the primary fails, one of the backups is promoted to take over as the new - primary. Clients fail-over to the new primary automatically. If there are multiple - backups, the other backups also fail-over to become backups of the new primary. - </p><p> - 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"><div class="titlepage"><div><div><h4 class="title"><a id="ha-at-least-once"></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 and acknowledged by all of the back-up - brokers, or has been consumed from the primary queue. - </p><p> - This ensures that all acknowledged messages are safe: they have either - been consumed or backed up to all backup brokers. Messages that are - consumed <span class="emphasis"><em>before</em></span> they are replicated do not need to - be replicated. This reduces the work load when replicating a queue with - active consumers. - </p><p> - Clients keep <span class="emphasis"><em>unacknowledged</em></span> messages in a buffer - <a class="footnote" href="#ftn.idm139836366433200" id="idm139836366433200"><sup class="footnote">[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. - <a class="footnote" href="#ftn.idm139836367357152" id="idm139836367357152"><sup class="footnote">[2]</sup></a> - </p><p> - 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 - message to received by the backup that becomes the new primary - <span class="emphasis"><em>and</em></span> re-sent by the client. The application must take steps - to identify and eliminate duplicates. - </p><p> - When a new primary is promoted after a fail-over it is initially in - "recovering" mode. In this mode, it delays acknowledgment of messages - 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><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"><strong>HA Broker States</strong></p><dl class="variablelist"><dt><span class="term">Joining</span></dt><dd><p> - Initial state 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 - on queues and messages. - </p></dd><dt><span class="term">Ready</span></dt><dd><p> - A backup broker that is fully caught-up and ready to take over as - primary. - </p></dd><dt><span class="term">Recovering</span></dt><dd><p> - 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"><div class="titlepage"><div><div><h4 class="title"><a id="limitations"></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 future 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> - Federation links <span class="emphasis"><em>to</em></span> the primary will fail over - correctly. 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. It is possible to work around this by replacing the - <code class="literal">qpidd-primary</code> start up script with a script that - re-creates federation links when the primary is promoted. - </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="ha-virtual-ip"></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 - resource manager associates this address with the primary node in the - cluster, and relocates it to the new primary when there is a failure. This - simplifies configuration as you can publish a single IP address rather - than a list. - </p><p> - A virtual IP address can be used by clients 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"><div class="titlepage"><div><div><h3 class="title"><a id="ha-broker-config"></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 id="ha-broker-options"></a><p class="title"><strong>Table 1.27. Broker Options for High Availability Messaging Cluster</strong></p><div class="table-contents"><table border="1" summary="Broker Options for High Availability Messaging Cluster"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="center" colspan="2"> - 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="ha-queue-replication.html" title="1.13. Replicating Queues with the HA module">Section 1.13, “Replicating Queues with the HA module”</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 - <a class="footnote" href="#ftn.ha-url-grammar" id="ha-url-grammar"><sup class="footnote">[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. - </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 <a class="footnoteref" href="chapter-ha.html#ftn.ha-url-grammar"><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> - 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="chapter-ha.html#ha-replicate-values" 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> - <p><code class="literal">ha-password <em class="replaceable"><code>PASS</code></em></code></p> - <p><code class="literal">ha-mechanism <em class="replaceable"><code>MECHANISM</code></em></code></p> - </td><td align="left"> - Authentication settings used by HA brokers to connect to each other, - see <a class="xref" href="chapter-ha.html#ha-security" title="1.12.9. Security and Access Control.">Section 1.12.9, “Security and Access Control.”</a> - </td></tr><tr><td align="left"><code class="literal">ha-backup-timeout<em class="replaceable"><code>SECONDS</code></em></code> - <a class="footnote" href="#ftn.ha-seconds-spec" id="ha-seconds-spec"><sup class="footnote">[b]</sup></a> - </td><td align="left"> - <p> - Maximum time that a recovering primary will wait for an expected - backup to connect and become ready. - </p> - </td></tr><tr><td align="left"> - <code class="literal">link-maintenance-interval <em class="replaceable"><code>SECONDS</code></em></code> - <a class="footnoteref" href="chapter-ha.html#ftn.ha-seconds-spec"><sup class="footnoteref">[b]</sup></a> - </td><td align="left"> - <p> - Interval for the broker to check link health and re-connect links if need - be. If you want brokers to fail over quickly you can set this to a - fraction of a second, for example: 0.1. - </p> - </td></tr><tr><td align="left"> - <code class="literal">link-heartbeat-interval <em class="replaceable"><code>SECONDS</code></em></code> - <a class="footnoteref" href="chapter-ha.html#ftn.ha-seconds-spec"><sup class="footnoteref">[b]</sup></a> - </td><td align="left"> - <p> - 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" id="ftn.ha-url-grammar"><p><a class="para" href="#ha-url-grammar"><sup class="para">[a] </sup></a> - The full format of the URL is given by this grammar: - </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><p> - </p></div><div class="footnote" id="ftn.ha-seconds-spec"><p><a class="para" href="#ha-seconds-spec"><sup class="para">[b] </sup></a> - Values specified as <em class="replaceable"><code>SECONDS</code></em> can be a - fraction of a second, e.g. "0.1" for a tenth of a second. - They can also have an explicit unit, e.g. 10s, 10ms, 10us, 10ns - </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"><div class="titlepage"><div><div><h3 class="title"><a id="ha-rm"></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. - </p><p> - The resource manager is responsible for starting the <span class="command"><strong>qpidd</strong></span> broker - on each node in the cluster. The resource manager then <em class="firstterm">promotes</em> - one of the brokers to be the primary. The other brokers connect to the primary as - backups, using the URL provided in the <code class="literal">ha-brokers-url</code> configuration - option. - </p><p> - Once connected, the backup brokers synchronize their state with the - primary. When a backup is synchronized, or "hot", it is ready to take - over if the primary fails. Backup brokers continually receive updates - from the primary in order to stay synchronized. - </p><p> - If the primary fails, backup brokers go into fail-over mode. The resource - manager must detect the failure and promote one of the backups to be the - new primary. The other backups connect to the new primary and synchronize - their state with it. - </p><p> - The resource manager is also responsible for protecting the cluster from - <em class="firstterm">split-brain</em> conditions resulting from a network partition. A - 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"><div class="titlepage"><div><div><h3 class="title"><a id="ha-rm-config"></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, - hot-standby <span class="command"><strong>qpidd</strong></span> HA cluster with <span class="command"><strong>rgmanager</strong></span>. - </p><p> - You must provide a <code class="literal">cluster.conf</code> file to configure - <span class="command"><strong>cman</strong></span> and <span class="command"><strong>rgmanager</strong></span>. Here is - an example <code class="literal">cluster.conf</code> file for a cluster of 3 nodes named - node1, node2 and node3. We will go through the configuration step-by-step. - </p><pre class="programlisting"> - -<?xml version="1.0"?> -<!-- -This is an example of a cluster.conf file to run qpidd HA under rgmanager. -This example assumes a 3 node cluster, with nodes named node1, node2 and node3. - -NOTE: fencing is not shown, you must configure fencing appropriately for your cluster. ---> - -<cluster name="qpid-test" config_version="18"> - <!-- The cluster has 3 nodes. Each has a unique nodid and one vote - for quorum. --> - <clusternodes> - <clusternode name="node1.example.com" nodeid="1"/> - <clusternode name="node2.example.com" nodeid="2"/> - <clusternode name="node3.example.com" nodeid="3"/> - </clusternodes> - <!-- Resouce Manager configuration. --> - <rm> - <!-- - There is a failoverdomain for each node containing just that node. - This lets us stipulate that the qpidd service should always run on each node. - --> - <failoverdomains> - <failoverdomain name="node1-domain" restricted="1"> - <failoverdomainnode name="node1.example.com"/> - </failoverdomain> - <failoverdomain name="node2-domain" restricted="1"> - <failoverdomainnode name="node2.example.com"/> - </failoverdomain> - <failoverdomain name="node3-domain" restricted="1"> - <failoverdomainnode name="node3.example.com"/> - </failoverdomain> - </failoverdomains> - - <resources> - <!-- This script starts a qpidd broker acting as a backup. --> - <script file="/etc/init.d/qpidd" name="qpidd"/> - - <!-- This script promotes the qpidd broker on this node to primary. --> - <script file="/etc/init.d/qpidd-primary" name="qpidd-primary"/> - - <!-- This is a virtual IP address for client traffic. --> - <ip address="20.0.20.200" monitor_link="1"/> - </resources> - - <!-- There is a qpidd service on each node, it should be restarted if it fails. --> - <service name="node1-qpidd-service" domain="node1-domain" recovery="restart"> - <script ref="qpidd"/> - </service> - <service name="node2-qpidd-service" domain="node2-domain" recovery="restart"> - <script ref="qpidd"/> - </service> - <service name="node3-qpidd-service" domain="node3-domain" recovery="restart"> - <script ref="qpidd"/> - </service> - - <!-- There should always be a single qpidd-primary service, it can run on any node. --> - <service name="qpidd-primary-service" autostart="1" exclusive="0" recovery="relocate"> - <script ref="qpidd-primary"/> - <!-- The primary has the IP addresses for brokers and clients to connect. --> - <ip ref="20.0.20.200"/> - </service> - </rm> -</cluster> - - </pre><p> - There is a <code class="literal">failoverdomain</code> for each node containing just that - one node. This lets us stipulate that the qpidd service should always run on all - nodes. - </p><p> - The <code class="literal">resources</code> section defines the <span class="command"><strong>qpidd</strong></span> - script used to start the <span class="command"><strong>qpidd</strong></span> service. It also defines the - <span class="command"><strong>qpid-primary</strong></span> script which does not - actually start a new service, rather it promotes the existing - <span class="command"><strong>qpidd</strong></span> broker to primary status. - </p><p> - The <code class="literal">resources</code> section also defines a virtual IP - address for clients. - </p><p> - To take advantage of the virtual IP addresses, <code class="filename">qpidd.conf</code> - should contain these lines: - </p><pre class="programlisting"> - ha-cluster=yes - ha-public-url=20.0.10.200 - ha-brokers-url=20.0.20.1,20.0.20.2,20.0.20.3 - </pre><p> - This configuration allows clients to connect to a single address: - 20.0.10.200. The brokers connect to each other directly via the addresses - listed in <span class="command"><strong>ha-brokers-url</strong></span>. Note the client and broker - addresses are on separate sub-nets, this is recommended but not required. - </p><p> - The <code class="literal">service</code> section defines 3 <code class="literal">qpidd</code> - services, one for each node. Each service is in a restricted fail-over - domain containing just that node, and has the <code class="literal">restart</code> - recovery policy. The effect of this is that rgmanager will run - <span class="command"><strong>qpidd</strong></span> on each node, restarting if it fails. - </p><p> - There is a single <code class="literal">qpidd-primary-service</code> using the - <span class="command"><strong>qpidd-primary</strong></span> script which is not restricted to a - domain and has the <code class="literal">relocate</code> recovery policy. This means - rgmanager will start <span class="command"><strong>qpidd-primary</strong></span> on one of the nodes - when the cluster starts and will relocate it to another node if the - 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"><div class="titlepage"><div><div><h3 class="title"><a id="ha-broker-admin"></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 - replicated queues, nor create or delete replicated queues or exchanges as - this will disrupt the replication process and may cause message loss. - </p><p> - <span class="command"><strong>qpid-ha</strong></span> allows you to view and change HA configuration settings. - </p><p> - 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"><div class="titlepage"><div><div><h3 class="title"><a id="ha-replicate-values"></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 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 - takes the same values as <code class="literal">ha-replicate</code> - </p><p> - Bindings are automatically replicated if the queue and exchange being bound both - have replication <code class="literal">all</code> or <code class="literal">configuration</code>, they - are not replicated otherwise. - </p><p> - You can create replicated queues and exchanges with the - <span class="command"><strong>qpid-config</strong></span> management tool like this: - </p><pre class="programlisting"> - qpid-config add queue myqueue --replicate all - </pre><p> - To create replicated queues and exchanges via the client API, add a - <code class="literal">node</code> entry to the address like this: - </p><pre class="programlisting"> - "myqueue;{create:always,node:{x-declare:{arguments:{'qpid.replicate':all}}}}" - </pre><p> - There are some built-in exchanges created automatically by the broker, these - exchanges are never replicated. The built-in exchanges are the default (nameless) - exchange, the AMQP standard exchanges (<code class="literal">amq.direct, amq.topic, amq.fanout</code> and - <code class="literal">amq.match</code>) and the management exchanges (<code class="literal">qpid.management, qmf.default.direct</code> and - <code class="literal">qmf.default.topic</code>) - </p><p> - Note that if you bind a replicated queue to one of these exchanges, the - binding will <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"><div class="titlepage"><div><div><h3 class="title"><a id="ha-failover"></a>1.12.8. Client Connection and Fail-over</h3></div></div></div><p> - Clients can only connect to the primary broker. Backup brokers reject any - connection attempt by a client. Clients rejected by a backup broker will - automatically fail-over until they connect to the primary. if - <code class="literal">ha-public-url</code> contains multiple addresses, the client - will them all in rotation. If it is a virtual IP address the clients will - retry on the same address until it is reconnected. - </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 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. - This is the recommended configuration. - </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, - so clients only need to re-try on a single address. - </p><p> - When the primary broker fails, clients re-try all known cluster addresses - until they connect to the new primary. The client re-sends any messages - that were previously sent but not acknowledged by the broker at the time - of the failure. Similarly messages that have been sent by the broker, but - not acknowledged by the client, are re-queued. - </p><p> - TCP can be slow to detect connection failures. A client can configure a - connection to use a <em class="firstterm">heartbeat</em> to detect connection - failure, and can specify a time interval for the heartbeat. If heartbeats - are in use, failures will be detected no later than twice the heartbeat - interval. The following sections explain how to enable heartbeat in each - client. - </p><p> - Note: the following sections explain how to configure clients with - multiple dresses, but if you are using a virtual IP address you only need - to configure that one address for clients, you don't need to list all the - addresses. - </p><p> - Suppose your cluster has 3 nodes: <code class="literal">node1</code>, - <code class="literal">node2</code> and <code class="literal">node3</code> all using the - default AMQP port, and you are not using a virtual IP address. To connect - 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"><div class="titlepage"><div><div><h4 class="title"><a id="ha-clients"></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 - <a class="footnote" href="#ftn.idm139836370894704" id="idm139836370894704"><sup class="footnote">[3]</sup></a> - You also need to specify the connection option - <code class="literal">reconnect</code> to be true. For example: - </p><pre class="programlisting"> - qpid::messaging::Connection c("node1,node2,node3","{reconnect:true}"); - </pre><p> - Heartbeats are disabled by default. You can enable them by specifying a - heartbeat interval (in seconds) for the connection via the - <code class="literal">heartbeat</code> option. For example: - </p><pre class="programlisting"> - qpid::messaging::Connection c("node1,node2,node3","{reconnect:true,heartbeat:10}"); - </pre><p> - </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="ha-python-client"></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 - <code class="literal">Connection.establish</code> or - <code class="literal">Connection.open</code> - </p><pre class="programlisting"> - connection = qpid.messaging.Connection.establish("node1", reconnect=True, reconnect_urls=["node1", "node2", "node3"]) - </pre><p> - Heartbeats are disabled by default. You can - enable them by specifying a heartbeat interval (in seconds) for the - 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"><div class="titlepage"><div><div><h4 class="title"><a id="ha-jms-client"></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: - </p><pre class="screen"> - connectionfactory.qpidConnectionfactory = amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'&failover='failover_exchange' - </pre><p> - This property can take three values: - </p><div class="variablelist"><p class="title"><strong>Fail-over Modes</strong></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>. - </p></dd><dt><span class="term">singlebroker</span></dt><dd><p> - Fail-over is not supported; the connection is to a single broker only. - </p></dd></dl></div><p> - In a Connection URL, heartbeat is set using the <span class="command"><strong>heartbeat</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'&heartbeat='3' - </pre></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="ha-security"></a>1.12.9. Security and Access Control.</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>. - HA brokers use the credentials set by the following options: - </p><div class="table"><a id="ha-security-options"></a><p class="title"><strong>Table 1.28. HA Security Options</strong></p><div class="table-contents"><table border="1" summary="HA Security Options"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="center" colspan="2"> - HA Security Options - </th></tr></thead><tbody><tr><td align="left"><p><code class="literal">ha-username</code> <em class="replaceable"><code>USER</code></em></p></td><td align="left"><p>User name for HA brokers.</p></td></tr><tr><td align="left"><p><code class="literal">ha-password</code> <em class="replaceable"><code>PASS</code></em></p></td><td align="left"><p>Password for HA brokers.</p></td></tr><tr><td align="left"><p><code class="literal">ha-mechanism</code> <em class="replaceable"><code>MECHANISM</code></em></p></td><td align="left"><p>Mechanism for HA brokers.</p></td></tr></tbody></table></div></div><br class="table-break" /><p> - This identity is used to authorize federation links from backup to - primary. It is also used to authorize actions on the backup to replicate - primary state, for example creating queues and exchanges. - </p><p> - When using an Access Control List the following ACL rule is required - when <code class="literal">ha-username</code>=<em class="replaceable"><code>USER</code></em> - </p><pre class="programlisting"> - acl allow <em class="replaceable"><code>USER</code></em>@QPID all all - </pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="ha-other-rm"></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 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. - </p><p> - To test if a broker is the primary: - </p><pre class="programlisting"> - qpid-ha -b <em class="replaceable"><code>broker-address</code></em> status --expect=primary - </pre><p> - This command will return 0 if the broker at <em class="replaceable"><code>broker-address</code></em> - is the primary, non-0 otherwise. - </p><p> - To promote a broker to primary: - </p><pre class="programlisting"> - qpid-ha -b <em class="replaceable"><code>broker-address</code></em> promote - </pre><p> - </p><p> - <span class="command"><strong>qpid-ha --help</strong></span> gives information on other commands and options available. - 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="section"><div class="titlepage"><div><div><h3 class="title"><a id="ha-store"></a>1.12.11. Using a message store in a cluster</h3></div></div></div><p> - If you use a persistent store for your messages then each broker in a - cluster will have its own store. If the entire cluster fails and is - restarted, the *first* broker that becomes primary will recover from its - store. All the other brokers will clear their stores and get an update - from the primary to ensure consistency. - </p></div><div class="footnotes"><br /><hr align="left" width="100" /><div class="footnote" id="ftn.idm139836366433200"><p><a class="para" href="#idm139836366433200"><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" id="ftn.idm139836367357152"><p><a class="para" href="#idm139836367357152"><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" id="ftn.idm139836370894704"><p><a class="para" href="#idm139836370894704"><sup class="para">[3] </sup></a> - The full grammar for the URL is: - </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></div></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="Using-message-groups.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="ha-queue-replication.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">1.11.  - Using Message Groups -  </td><td align="center" width="20%"><a accesskey="h" href="index.html">Home</a></td><td align="right" valign="top" width="40%"> 1.13. Replicating Queues with the HA module</td></tr></table></div></div> - - <hr/> - - <ul id="-apache-navigation"> - <li><a href="http://www.apache.org/">Apache</a></li> - <li><a href="http://www.apache.org/licenses/">License</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="/security.html">Security</a></li> - <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li> - </ul> - - <p id="-legal"> - Apache Qpid, Messaging built on AMQP; Copyright © 2015 - The Apache Software Foundation; Licensed under - the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache - License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton, - Proton, Apache, the Apache feather logo, and the Apache Qpid - project logo are trademarks of The Apache Software - Foundation; All other marks mentioned may be trademarks or - registered trademarks of their respective owners - </p> - </div> - </div> - </div> - </body> -</html> http://git-wip-us.apache.org/repos/asf/qpid-site/blob/a39b425b/content/releases/qpid-0.26/cpp-broker/book/css/style.css ---------------------------------------------------------------------- diff --git a/content/releases/qpid-0.26/cpp-broker/book/css/style.css b/content/releases/qpid-0.26/cpp-broker/book/css/style.css deleted file mode 100644 index c681596..0000000 --- a/content/releases/qpid-0.26/cpp-broker/book/css/style.css +++ /dev/null @@ -1,279 +0,0 @@ -/* - * - * 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; -} - - --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org