http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/management.xml
----------------------------------------------------------------------
diff --git a/docs/user-manual/zh/management.xml 
b/docs/user-manual/zh/management.xml
new file mode 100644
index 0000000..21a3587
--- /dev/null
+++ b/docs/user-manual/zh/management.xml
@@ -0,0 +1,805 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
============================================================================= 
-->
+<!-- Copyright © 2009 Red Hat, Inc. and others.                               
     -->
+<!--                                                                           
    -->
+<!-- The text of and illustrations in this document are licensed by Red Hat 
under  -->
+<!-- a Creative Commons Attribution–Share Alike 3.0 Unported license 
("CC-BY-SA"). -->
+<!--                                                                           
    -->
+<!-- An explanation of CC-BY-SA is available at                                
    -->
+<!--                                                                           
    -->
+<!--            http://creativecommons.org/licenses/by-sa/3.0/.                
    -->
+<!--                                                                           
    -->
+<!-- In accordance with CC-BY-SA, if you distribute this document or an 
adaptation -->
+<!-- of it, you must provide the URL for the original version.                 
    -->
+<!--                                                                           
    -->
+<!-- Red Hat, as the licensor of this document, waives the right to enforce,   
    -->
+<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent    
    -->
+<!-- permitted by applicable law.                                              
    -->
+<!-- 
============================================================================= 
-->
+<chapter id="management">
+   <title>管理</title>
+   
<para>HornetQ拥有套丰富的管理接口。用户使用这些接口可以修改服务器é
…ç½®ã€åˆ›å»ºæ–°çš„资源(如队列和
+      
话题)、检查这些资源(如队列中有多少消息)并进行管理(从队列中åˆ
 é™¤æ¶ˆæ¯ï¼‰ã€‚这样用户可以
+      <emphasis>管理</emphasis>HornetQ。另外,客户还可以订阅
管理通知。</para>
+   <para>有三种方式管理HornetQ:</para>
+   <itemizedlist>
+      <listitem>
+         <para>使用JMX -- JMX是æ 
‡å‡†çš„Java应用程序管理方式。</para>
+      </listitem>
+      <listitem>
+         <para>使用核心接口 -- 管理操作通过<emphasis>æ 
¸å¿ƒæ¶ˆæ¯</emphasis>的方法发向HornetQ服
+         务。</para>
+      </listitem>
+      <listitem>
+         <para>使用JMS接口 -- 
管理操作通过<emphasis>JMS消息</emphasis>的方式发向HornetQ服务器。</para>
+      </listitem>
+   </itemizedlist>
+   
<para>虽然有三种方式,但它们提供相同的功能。使用JMX方法能完成的功能使用æ
 ¸å¿ƒæŽ¥å£æˆ–JMS接口都可以完成。</para>
+   <para>根据不同的应用环境来选择最适当的方式。</para>
+   <section>
+      <title>管理接口API</title>
+      <para>不管使用哪种方式,管理接口都是一样的。</para>
+      
<para>对于每个<emphasis>被管理的资源</emphasis>都有一个Java的接口提供可使用的操作。</para>
+      <para>HornetQ的管理接口分布在2个包中:</para>
+      <itemizedlist>
+         <listitem>
+            <para><emphasis>核心</emphasis>资源的管理接口在 <literal
+                  >org.hornetq.api.core.management</literal>包中。</para>
+         </listitem>
+         <listitem>
+            <para><emphasis>JMS</emphasis>资源的管理接口在 <literal
+                  >org.hornetq.api.jms.management</literal>包中。</para>
+         </listitem>
+      </itemizedlist>
+      
<para>调用<emphasis>管理操作</emphasis>的方法由所使用是方式是JMX、æ
 ¸å¿ƒæ¶ˆæ¯è¿˜æ˜¯JMS
+         消息来决定。</para>
+      <note>
+         
<para>一小部分的管理接口需要一个<literal>过滤器</literal>参数来选择需要的消息。
+            如果要求<emphasis>所有的消息</emphasis>,传
递该参数时使用<literal>
+            null</literal>或者一个空的字符串即可。</para>
+      </note>
+      <section>
+         <title>核心管理接口</title>
+         <para>HornetQ定义了一套对核心资源的管理接口。å…
³äºŽå®ƒä»¬çš„详细说明请参见相应的javadoc。
+            下面是对它们的概述:</para>
+         <section>
+            <title>核心服务器管理</title>
+            <itemizedlist>
+               <listitem>
+                  <para>队列的列表、创建、部署与删除</para>
+                  <para><literal>getQueueNames()</literal> 
method方法用来列出所有已经部署的队列。</para>
+                  <para>在<literal>HornetQServerControl</literal> 
(ObjectName <literal
+                        
>org.hornetq:module=Core,type=Server</literal>或资源名<literal
+                        >core.server</literal>)上有队列创建或删
除的方法,它们是
+                        
<literal>createQueue()</literal>、<literal>deployQueue()</literal>和
+                        <literal>destroyQueue()</literal>。</para>
+                  
<para>如果队列已经存在,那么<literal>createQueue</literal>方法调用会出错,而
+                        
<literal>deployQueue</literal>方法调用没有任何作用。</para>
+               </listitem>
+               <listitem>
+                  <para>暂停与恢复队列</para>
+                  
<para><literal>QueueControl</literal>可用来暂停与恢复队列。如果一个队列被暂停,它
+                     虽然可以继续接收消息但是不传
递消息;当被恢复时,队列又会开始传递消息。
+                  </para>
+               </listitem>
+               <listitem>
+                  <para>远程连接的列表与关闭</para>
+                  
<para><literal>listRemoteAddresses()</literal>方法可以用来列出客户端的远程地址。
+                     
还可以使用<literal>closeConnectionsForAddress()</literal>方法来关闭
+                     与该地址相关的远程连接。</para>
+                  
<para>另外,使用<literal>listConnectionIDs()</literal>方法可以列出连接ID,
+                     
使用<literal>listSessions()</literal>方法可以列出与一个连接ID相å…
³çš„所有
+                     会话(session)。</para>
+               </listitem>
+               <listitem>
+                  <para>事务的手动操作(heuristic operations)</para>
+                  <para>当服务器由于故障而重新启动时,可能造
成一些事务没有完成而需要人工干预。
+                        
<literal>listPreparedTransactions()</literal>方法可以列出所有处于
+                     
准备(prepared)状态的事务(事务是用Base64字符串的形式列出)。如果要提交或回滚,
+                     
可以使用<literal>commitPreparedTransaction()</literal>方法或
+                     
<literal>rollbackPreparedTransaction()</literal>方法。采用启发式
+                    
(heuristic)完成的事务可以用<literal>listHeuristicCommittedTransactions()</literal>
+                     
方法和<literal>listHeuristicRolledBackTransactions</literal>方法列出。</para>
+               </listitem>
+               <listitem>
+                  <para>打开和重置消息计数器</para>
+                  
<para>消息计数器可以用<literal>enableMessageCounters()</literal>方法打开,用
+                        <literal>disableMessageCounters()</literal>方法å…
³é—­ã€‚如果要重置消息计数器,
+                        
可以使用<literal>resetAllMessageCounters()</literal>方法和
+                        
<literal>resetAllMessageCounterHistories()</literal>方法。</para>
+               </listitem>
+               <listitem>
+                  <para>获得服务器的配置和属性</para>
+                  
<para><literal>HornetQServerControl</literal>提供了访问HornetQ服务器所有属性
+                     
的方法(例如<literal>getVersion()</literal>方法可以得到服务器的版本,等等)。
 </para>
+               </listitem>
+               <listitem>
+                  <para>核心桥和转发器的创建,删除与列表</para>
+                  
<para>使用<literal>getBridgeNames()</literal>可以列出部署的核心桥。
+                        
使用<literal>getDivertNames()</literal>可以列出部署的转发器。</para>
+                  <para>使用<literal>HornetQServerControl</literal> 
(ObjectName <literal
+                        >org.hornetq:module=Core,type=Server</literal> 
或资源名 <literal
+                        
>core.server</literal>)的方法<literal>createBridge()</literal>
+                
和<literal>destroyBridge()</literal>可以创建和删除核心桥。
+                        
通过<literal>createDivert()</literal>和<literal>destroyDivert()</literal>
+                        可以创建和删除转发器。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+         <section>
+            <title>核心地址的管理</title>
+            <para>æ 
¸å¿ƒåœ°å€å¯ä»¥é€šè¿‡<literal>AddressControl</literal>类进行访问(ObjectName
+                  是 
<literal>org.hornetq:module=Core,type=Address,name="&lt;the
+                  address name&gt;"</literal>或者资源名 
<literal>core.address.&lt;the
+                  address name&gt;</literal>)。</para>
+            <itemizedlist>
+               <listitem>
+                  <para>修改地址的角色和权限。</para>
+                  <para>ä½ 
可以使用<literal>addRole()</literal>方法或<literal>removeRole()</literal>
+                  方法添加或删
除地址的角色。用<literal>getRoles()</literal>方法可以列出一个地址的所有角色。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+         <section>
+            <title>核心队列的管理</title>
+            <para>管理接口中的一大部分是管理æ 
¸å¿ƒé˜Ÿåˆ—的。<literal>QueueControl</literal>类定义了核心队列的管理
+               接口(ObjectName 
<literal>org.hornetq:module=Core,type=Queue,address="&lt;绑定地址
+                  address&gt;",name="&lt;队列名&gt;"</literal> 或资源名 
<literal
+                  >core.queue.&lt;队列名&gt;</literal>)。</para>
+            
<para>绝大部分的队列管理方法需要一个消息ID参数(如删
除一个消息)或一个过滤器参数(如将具有某个
+               属性值的所有消息设置为过期)。</para>
+            <itemizedlist>
+               <listitem>
+                  <para>消息的过期,发向死信地址及删除</para>
+                  
<para><literal>expireMessages()</literal>方法可以使消息过期。如果设置了一个过期地址,
+                     
这些消息会被发到过期地址。否则这些消息会被丢弃。<literal>setExpiryAddress()</literal>
+                     方法可以用来设置队列的过期地址。</para>
+                  
<para>消息可以用<literal>sendMessagesToDeadLetterAddress()</literal>方法发送到
+                     
一个死信地址。它返回发到这个死信地址的消息的数量。如果没有设置死信地址,那么消息就会从队列中
+                     删
除。用<literal>setDeadLetterAddress()</literal>方法可以设置队列的死信地址。</para>
+                  
<para>消息还可以从一个队列转移到另一个队列。其方法是
+                        <literal>moveMessages()</literal>。</para>
+               </listitem>
+               <listitem>
+                  <para>消息的列表与删除</para>
+                  
<para>用<literal>listMessages()</literal>方法可以列出一个队列中的所有消息。这个方法
+                        
返回的是一个<literal>Map</literal>的数组。每一个Map对应一个消息。</para>
+                  
<para>消息可以用<literal>removeMessages()</literal>方法删
除。如果是使用消息ID,
+                        
返回的是一个布尔常量;如果是用过滤器,则返回的
+                        是删除的消息数量。在使用过滤器来删
除过滤的消息时,如果传入一个空字符串则表示要删除
+                        所有的消息。</para>
+               </listitem>
+               <listitem>
+                  <para>消息计数</para>
+                  
<para>一个队列中的消息数可以用<literal>getMessageCount()</literal>方法获得。
+                        
此外,<literal>countMessages()</literal>方法可以返回队列中与一
+                        个<emphasis>过滤器</emphasis>匹é…
çš„消息数量。</para>
+               </listitem>
+               <listitem>
+                  <para>修改消息的优先级</para>
+                  
<para>用<literal>changeMessagesPriority()</literal>方法可以改变消息的优å
…ˆçº§ã€‚
+                        
该方法如果带一个消息ID参数,返回一个布尔常量;如果带一个过滤器参数,返回优å
…ˆçº§
+                        被更新的消息的数量。</para>
+               </listitem>
+               <listitem>
+                  <para>消息计数器</para>
+                  
<para>用<literal>listMessageCounter()</literal>方法和<literal>
+                        
listMessageCounterHistory()</literal>方法可以列出一个队列的消息计数器。
+                        (参见 <xref 
linkend="management.message-counters"/>)。消息计数器还可以
+                       
用<literal>resetMessageCounter()</literal>方法重置。</para>
+               </listitem>
+               <listitem>
+                  <para>获得队列的属性</para>
+                  <para>通过<literal>QueueControl</literal>可以获得æ 
¸å¿ƒé˜Ÿåˆ—的属性(例如用
+                     <literal>getFilter()</literal>方法可以得到队列的
+                     
过滤器,<literal>isDurable()</literal>方法可以知道队列是否是持ä¹
…的队列等等)。</para>
+               </listitem>
+               <listitem>
+                  <para>暂停和恢复队列</para>
+                     
<para><literal>QueueControl</literal>可用来暂停与恢复队列。如果一个队列被暂停,它
+                     虽然可以继续接收消息但是不传
递消息;当被恢复时,队列又会开始传递消息。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+         <section>
+            <title>其它核心资源的管理</title>
+            <para>HornetQ允许用户启动或停止å…
¶è¿œç¨‹èµ„源(接收器,转发器,桥,等等)。这æ 
·å¯ä»¥ä½¿æœåŠ¡å™¨æš‚停工作
+               而不需要完å…
¨åœæ­¢æœåŠ¡å™¨ï¼ˆæ¯”如可以临时对服务器进行一些离线操作,像对一些事务的处理)。这些资源有:</para>
+            <itemizedlist>
+               <listitem>
+                  <para>接收器</para>
+                  <para>用<literal>AcceptorControl</literal>类(ObjectName 
<literal
+                        
>org.hornetq:module=Core,type=Acceptor,name="&lt;接收器名
+                        &gt;"</literal> 或资源名 
<literal>core.acceptor.&lt;地址名
+                        
&gt;</literal>)的<literal>start()</literal>方法启动,用<literal>
+                        
stop()</literal>方法停止。接收器的参数可以通过<literal>AcceptorControl</literal>
+                        的属性获得。(参见 <xref
+                        
linkend="configuring-transports.acceptors"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>转发器</para>
+                  <para>用<literal>DivertControl</literal>(ObjectName是 
<literal
+                        
>org.hornetq:module=Core,type=Divert,name=&lt;转发器名&gt;</literal>
+                        
或资源名<literal>core.divert.&lt;转发器&gt;</literal>)类的
+                        
<literal>start()</literal>方法可以启动,用<literal>stop()</literal>方法可以停止。
+                        
通过<literal>DivertControl</literal>还可以获得转发器的各种属性。(参见
 <xref
+                        linkend="diverts"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>æ¡¥</para>
+                  
<para>桥可以通过<literal>BridgeControl</literal>类(ObjectName <literal
+                        
>org.hornetq:module=Core,type=Bridge,name="&lt;桥的名字
+                        &gt;"</literal> 或资源名 
<literal>core.bridge.&lt;桥的名字
+                        &gt;</literal>)的<literal>start()</literal>
+                        
方法启动,用<literal>stop()</literal>方法停止。它的属性可以通过
+                        
<literal>BridgeControl</literal>的属性获得(参见
+                        <xref linkend="core-bridges"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>广播组</para>
+                  
<para>广播组可以通过<literal>BroadcastGroupControl</literal>类(ObjectName
 <literal
+                        
>org.hornetq:module=Core,type=BroadcastGroup,name="&lt;广播组名
+                        &gt;"</literal> 或者资源名 <literal
+                        
>core.broadcastgroup.&lt;广播组名&gt;</literal>)的<literal>
+                        
start()</literal>方法启动,用<literal>stop()</literal>方法停止。
+                        它的属性也可以通过<literal
+                        
>BroadcastGroupControl</literal>的属性获得(参见<xref
+                        linkend="clusters.broadcast-groups"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>发现组</para>
+                  
<para>发现组可以通过<literal>DiscoveryGroupControl</literal>类
+                        (ObjectName 
<literal>org.hornetq:module=Core,type=DiscoveryGroup,
+                        name="&lt;发现组名&gt;"</literal> 
或资源名<literal>core.discovery.&lt;
+                        发现组名&gt;</literal>)的
+                        
<literal>start()</literal>方法启动,用<literal>stop()</literal>方法停止。
+                        
它的参数可以通过<literal>DiscoveryGroupControl</literal>的属性获得(参见
+                        <xref 
linkend="clusters.discovery-groups"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>集群连接</para>
+                  
<para>集群连接可以通过<literal>ClusterConnectionControl</literal>类(
+                        ObjectName <literal
+                        
>org.hornetq:module=Core,type=ClusterConnection,name="&lt;集群连接名
+                        &gt;"</literal> 或资源名 <literal
+                        
>core.clusterconnection.&lt;集群连接名&gt;</literal>)的<literal>
+                        
start()</literal>方法启动,用<literal>stop()</literal>方法停止。
+                        它的参数可以通过<literal
+                        
>ClusterConnectionControl</literal>的属性来获得(参见
+                        <xref 
linkend="clusters.cluster-connections"/>)。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+      </section>
+      <section>
+         <title>JMS管理接口</title>
+         
<para>HornetQ定义了一套JMS管理接口来管理JMS的<emphasis>可管理的对象</emphasis>
 
+              (例如JMS队列,话题及连接工厂)。</para>
+         <section>
+            <title>JMS服务器管理</title>
+            <para><literal>JMSServerControl</literal>类(ObjectName <literal
+                  >org.hornetq:module=JMS,type=Server</literal> 
或资源名<literal
+                  
>jms.server</literal>)用来创建JMS资源(连接工厂和目æ 
‡ï¼‰ã€‚</para>
+            <itemizedlist>
+               <listitem>
+                  <para>列表、创建、删除连接工厂</para>
+                  <para>使用<literal>getConnectionFactoryNames()</literal> 
方法可以列出部署的连接工厂的
+                        名字。</para>
+                  
<para>用<literal>createConnectionFactory()</literal>方法和<literal
+                        
>destroyConnectionFactory()</literal>方法能创建和删除JMS连接工厂。
+                     
这些连接工厂都与JNDI绑定以便于客户端来查找。如果是在图形介面下创建连接工厂,在广本框å†
…输入
+                     有关的传
输参数时可使用一组用逗号隔开的键-值对(例如<literal>key1=10,
 key2="value", key3=false</literal>)。
+                     如果需要定义多个传输,你需要将每个传
输的参数对用大括号括起来,例如<literal>{key=10}, 
{key=20}</literal>。
+                     第一个<literal>key</literal>属于第一个传输é…
ç½®ï¼Œç¬¬äºŒä¸ª<literal>key</literal>属于第二个传输配置。
+                     (有关传输的各种参数参见<xref 
linkend="configuring-transports"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>列表、创建与删除队列</para>
+                  
<para><literal>getQueueNames()</literal>方法可以获得部署的JMS队列的名字列表。</para>
+                  
<para>JMS队列可以用<literal>createQueue()</literal>方法创建,用<literal>destroyQueue()</literal>方法åˆ
 é™¤ã€‚
+                     
创建的队列都绑定到JNDI以便JMS客户端可以查找。</para>
+               </listitem>
+               <listitem>
+                  <para>列表、创建与删除话题(topic)</para>
+                  
<para><literal>getTopicNames()</literal>方法可以获得部署的JMS话题名字。</para>
+                  
<para>JMS话题可以用<literal>createTopic()</literal>方法来创建,用<literal>destroyTopic()</literal>方法来åˆ
 é™¤ã€‚
+                     
创建的话题都绑定到JNDI以便客户端查找。</para>
+               </listitem>
+               <listitem>
+                  <para>远程连接的列表与关闭</para>
+                  
<para>用<literal>listRemoteAddresses()</literal>方法可以获得JMS客户端的远程地址。
+                     
还可以用<literal>closeConnectionsForAddress()</literal>方法å…
³é—­ä¸ŽæŸä¸ªè¿œç¨‹åœ°å€ç›¸å…³è”的连接。</para>
+                  
<para>另外,<literal>listConnectionIDs()</literal>方法可以列出连接的ID,
+                     
而<literal>listSessions()</literal>方法可以列出一个给定的连接ID的所有会话(session)。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+         <section>
+            <title>JMS连接工厂的管理</title>
+            <para>使用类(ObjectName 
<literal>org.hornetq:module=JMS,type=ConnectionFactory,
+                  name="&lt;连接工厂名&gt;"</literal>或者
资源名<literal>jms.connectionfactory.&lt;
+                  
连接工厂名&gt;</literal>)可以管理JMS的连接工厂。</para>
+            <itemizedlist>
+               <listitem>
+                  <para>获得连接工厂的属性</para>
+                  
<para><literal>ConnectionFactoryControl</literal>类可以用来获得连接工厂的属性(
+                     
例如<literal>getConsumerWindowSize()</literal>方法可以获得接收者
流控制的窗口大小,
+                     
<literal>isBlockOnNonDurableSend()</literal>方法可以知道从这个连接工厂创建的发送
+                     者是否采用阻塞方式发送非持久
的消息,等等)。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+         <section>
+            <title>JMS队列管理</title>
+            <para>使用<literal>JMSQueueControl</literal>类(ObjectName 
<literal>org.hornetq:module=JMS,
+                  type=Queue,name="&lt;队列名&gt;"</literal>或资源名 
<literal>jms.queue.&lt;队列名
+                  &gt;</literal>可以管理JMS队列。</para>
+            <para><emphasis>JMS队列的管理操作与æ 
¸å¿ƒé˜Ÿåˆ—的管理十分相似。</emphasis></para>
+            <itemizedlist>
+               <listitem>
+                  <para>过期,发送到死信地址和移动消息</para>
+                  
<para>可以使用<literal>expireMessages()</literal>方法将队列中的消息设成过期消息。
+                        如果é…
ç½®æœ‰è¿‡æœŸåœ°å€ï¼Œæ¶ˆæ¯å°±ä¼šè¢«å‘到过期地址。过期地址可以用
+                     
<literal>setExpiryAddress()</literal>方法来设定。</para>
+                  
<para>使用<literal>sendMessagesToDeadLetterAddress()</literal>方法可以将消息发送到死信地址。
+                     
它返回发送到死信地址消息的数量。如果没有设定死信地址,那么消息会被丢弃。使用
+                     
<literal>setDeadLetterAddress()</literal>方法可以设定队列的死信地址。</para>
+                  
<para><literal>moveMessages()</literal>方法将消息从一个队列移动到另一个队列。</para>
+               </listitem>
+               <listitem>
+                  <para>列表与删除消息</para>
+                  
<para>使用<literal>listMessages()</literal>方法可以列出一个队列中的所有消息。它返回的是一个
+                        Map的数组。每一个Map对应一个消息。</para>
+                  
<para>使用<literal>removeMessages()</literal>方法可以从队列中删
除消息。如果带的参数是消息ID,
+                        
返回的是一个布尔常是;如果带的参数是一个过滤器,则返回åˆ
 é™¤çš„消息数。带有过滤器参数的<literal
+                        >removeMessages()</literal>方法只删
除过滤器选择的消息。如果些参数是一个空字符串,那么将
+                        删除所有的消息。</para>
+               </listitem>
+               <listitem>
+                  <para>消息计数</para>
+                  
<para>使用<literal>getMessageCount()</literal>方法可以得到队列中的消息数。另外,方法
+                        
<literal>countMessages()</literal>可以得到队列中所有与<emphasis>过滤器</emphasis>相匹é
…çš„消息数。</para>
+               </listitem>
+               <listitem>
+                  <para>修改消息的优先级</para>
+                  <para>消息的优å…
ˆçº§å¯ä»¥ç”¨<literal>changeMessagesPriority()</literal>方法修改。如果是带一个消
+                        
息ID参数,它返回的是一个布尔常量;如果是带一个过滤器参数,则它返回的是优å
…ˆçº§æ›´æ–°äº†çš„消息数。</para>
+               </listitem>
+               <listitem>
+                  <para>消息计数器</para>
+                  
<para><literal>listMessageCounter()</literal>方法和<literal 
>listMessageCounterHistory()</literal>
+                        
方法可以用来列出队列中的所有消息计数器。(参见 <xref
+                        linkend="management.message-counters"/>)。</para>
+               </listitem>
+               <listitem>
+                  <para>获取队列的属性</para>
+                  
<para><literal>JMSQueueControl</literal>类可以用来获取JMS队列的设置参数(例如方法<literal>isTemporary()</literal>
+                     
可以判断队列是否为临时的,方法<literal>isDurable()</literal>可以判断队列是否为持ä¹
…的等等)。</para>
+               </listitem>
+               <listitem>
+                  <para>队列的暂停与恢复</para>
+                  
<para><literal>JMSQueueControl</literal>可以暂停一个队列或恢复一个队列。
+                     
如果一个队列被暂停,它虽然可以继续接收消息但是不传
递消息;
+                     当被恢复时,队列又会开始传递消息。</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+         <section>
+            <title>JMS话题(Topic)的管理</title>
+            
<para>JMS话题的管理是通过<literal>TopicControl</literal>类(
+               the ObjectName 
<literal>org.hornetq:module=JMS,type=Topic,name="&lt;话题名&gt;"</literal>
+               或资源名 
<literal>jms.topic.&lt;话题名&gt;</literal>)。</para>
+            <itemizedlist>
+               <listitem>
+                  <para>订阅和消息的列表</para>
+                  <para><literal>listAllSubscriptions()</literal>、<literal
+                        >listDurableSubscriptions()</literal>、 <literal
+                        
>listNonDurableSubscriptions()</literal>方法可以列出话题的不同订阅
。
+                     
这些方法都返回<literal>Object</literal>数组,表示订阅
的细节(如订阅名,
+                     客户ID,持久性,消息计数等)。用<literal
+                        
>listMessagesForSubscription()</literal>方法可以列出一个订阅
上的JMS消息。</para>
+               </listitem>
+               <listitem>
+                  <para>删除订阅</para>
+                  <para>持久性订阅
可以使用<literal>dropDurableSubscription()</literal>方法来删
除。</para>
+               </listitem>
+               <listitem>
+                  <para>订阅消息计数</para>
+                  
<para><literal>countMessagesForSubscription()</literal>方法可以得到一个订é˜
…上面所持有
+                     
的消息数(还可带一个消息选择器来得出有多少消息与之匹é…
ï¼‰ã€‚</para>
+               </listitem>
+            </itemizedlist>
+         </section>
+      </section>
+   </section>
+   <section id="management.jmx">
+      <title>使用JMX</title>
+      <para>HornetQ提供了<ulink
+            
url="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/";
+         >JMX</ulink>。</para>
+      <para>HornetQ通过MBean的接口暴露å…
¶JMX管理操作。它将自己的资源注册到<literal>org.hornetq</literal>域。</para>
+      
<para>比如,用来管理一个名为<literal>exampleQueue</literal>JMS队列的<literal>ObjectName</literal>是:</para>
+      <programlisting>
+   org.hornetq:module=JMS,type=Queue,name="exampleQueue"   
+      </programlisting>
+      <para>MBean为:</para>
+      <programlisting>
+   org.hornetq.api.jms.management.JMSQueueControl   
+      </programlisting>
+      <para>MBean的<literal>ObjectName</literal>用 <literal
+            
>org.hornetq.api.core.management.ObjectNameBuilder</literal>来产生出来的。ä½
 ä¹Ÿå¯ä»¥ä½¿ç”¨<literal
+            >jconsole</literal>来查找你
想要的MBean的<literal>ObjectName</literal>。</para>
+      <para>使用JMX来管理HornetQ与用JMX管理å…
¶å®ƒJava应用程序没有什么不同。你可以使用反射或者
创建MBean代理的方法。</para>
+      <section id="management.jmx.configuration">
+         <title>配置JMX</title>
+         <para>默认情况下HornetQ的JMX是打开的。将<literal
+               >hornetq-configuration.xml</literal>文件中的<literal
+               
>jmx-management-enabled</literal>设置为<literal>false</literal>就可以å…
³é—­JMX:</para>
+         <programlisting>
+&lt;!-- false to disable JMX management for HornetQ --&gt;
+&lt;jmx-management-enabled&gt;false&lt;/jmx-management-enabled&gt;            
+         </programlisting>
+         
<para>如果JMX功能是打开的,则使用<literal>jconsole</literal>可以管理本地的HornetQ。</para>
+         <note>
+           <para>出于安全考虑,默认情况下JMX远程连接是å…
³é—­çš„。参见<ulink 
url="http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html#remote";
+               >Java管理指南</ulink>来é…
ç½®æœåŠ¡å™¨çš„远程管理(系统变量必
须在<literal>run.sh</literal>或<literal>run.bat</literal>中定义)。</para>
+         </note>
+         
<para>HornetQ默认使用JMX域名"org.hornetq"。如果要用一个MBeanServer管理多个HornetQ服务器,可以将每个HornetQ
+            服务器é…
ç½®æˆä¸åŒçš„JMX域。方法就是在<literal>hornetq-configuration.xml</literal>文件中设置<literal>jmx-domain</literal>:</para>
+         <programlisting>
+&lt;!-- use a specific JMX domain for HornetQ MBeans -->
+&lt;jmx-domain>my.org.hornetq&lt;/jmx-domain>            
+         </programlisting>
+         <section>
+            <title>MBeanServer的配置</title>
+            <para>HornetQ在独立运行时使用Java虚拟机的<literal
+                  >Platform MBeanServer</literal>来注册å…
¶MBean。这在JBoss Microcontainer(微容器)的bean
+               文件中进行配置(参见<xref 
linkend="server.microcontainer.configuration"/>):</para>
+            <programlisting>&lt;!-- MBeanServer --&gt;
+&lt;bean name="MBeanServer" class="javax.management.MBeanServer"&gt;
+   &lt;constructor factoryClass="java.lang.management.ManagementFactory"
+                         factoryMethod="getPlatformMBeanServer" /&gt;
+&lt;/bean&gt;            
+            </programlisting>
+            <para>当与AS 
5+集成运行时,它使用应用服务器自己的MBean服务,这æ 
·å°±å¯ä»¥ä½¿ç”¨å®ƒçš„jmx-console:</para>
+            <programlisting>&lt;!-- MBeanServer --&gt;
+&lt;bean name="MBeanServer" class="javax.management.MBeanServer"&gt;
+   &lt;constructor factoryClass="org.jboss.mx.util.MBeanServerLocator"
+                         factoryMethod="locateJBoss" /&gt;
+&lt;/bean&gt;            
+            </programlisting>
+         </section>
+      </section>
+      <section>
+         <title>例子</title>
+         <para>参见<xref 
linkend="examples.jmx"/>,这个例子展示了如何使用远程JMX连接或MBean代理来管理HornetQ。</para>
+      </section>
+   </section>
+   <section>
+      <title>使用核心接口</title>
+      <para>核心管理接口的调用实际
上是向一个特殊的地址发送æ 
¸å¿ƒæ¶ˆæ¯ã€‚这个特殊地址称为<emphasis>管理地址</emphasis>。</para>
+      
<para><emphasis>管理消息</emphasis>是一些定义了一些固定属性的普通æ
 ¸å¿ƒæ¶ˆæ¯ã€‚服务器通过这些属性来解释管理操作:</para>
+      <itemizedlist>
+         <listitem>
+            <para>管理资源的名称</para>
+         </listitem>
+         <listitem>
+            <para>管理操作的名称</para>
+         </listitem>
+         <listitem>
+            <para>管理操作的参数</para>
+         </listitem>
+      </itemizedlist>
+      
<para>当一个管理消息发送到管理地址时,HornetQ服务器将从中提取出相应的信息,再调用相应的管理资源的方法,之后向
+         该管理消息的回答地址(reply-to 
address,由<literal>ClientMessageImpl.REPLYTO_HEADER_NAME
+         
</literal>定义)发送一个<emphasis>管理回答</emphasis>。</para>
+      
<para>一个<literal>ClientConsumer</literal>用来接收管理回答并提取出å
…¶ä¸­çš„操作的結果(如果有的话)。
+         考虑到可移植性,返回的結果采用的是æ 
¼å¼çš„字符串,而没有采用Java的序列化技术
+         
(<literal>org.hornetq.api.core.management.ManagementHelper</literal>可以用来将JSON字符串
+         转换成Java对象)。</para>
+      <para>使用以下步骤可以简化使用æ 
¸å¿ƒæ¶ˆæ¯è°ƒç”¨ç®¡ç†æ“ä½œï¼š</para>
+      <orderedlist>
+         <listitem>
+            
<para>创建一个<literal>ClientRequestor</literal>对象,用来发送管理消息并接收回答。</para>
+         </listitem>
+         <listitem>
+            <para>创建一个<literal>ClientMessage</literal>。</para>
+         </listitem>
+         <listitem>
+            <para>使用<literal
+                  
>org.hornetq.api.core.management.ManagementHelper</literal>类来帮助设置消息的管理参数。</para>
+         </listitem>
+         <listitem>
+            
<para>通过<literal>ClientRequestor</literal>将消息发送</para>
+         </listitem>
+         <listitem>
+            <para>使用 <literal
+                  
>org.hornetq.api.core.management.ManagementHelper</literal>类从管理操作結果中提取返回值。</para>
+         </listitem>
+      </orderedlist>
+      <para>例如,要得到æ 
¸å¿ƒé˜Ÿåˆ—<literal>exampleQueue</literal>中消息的数量:</para>
+      <programlisting>
+   ClientSession session = ...
+   ClientRequestor requestor = new ClientRequestor(session, 
"jms.queue.hornetq.management");
+   ClientMessage message = session.createMessage(false);
+   ManagementHelper.putAttribute(message, "core.queue.exampleQueue", 
"messageCount");
+   ClientMessage reply = requestor.request(m);
+   int count = (Integer) ManagementHelper.getResult(reply);
+   System.out.println("There are " + count + " messages in exampleQueue");
+      </programlisting>
+      <para>管理操作名及其参数必
须和<literal>management</literal>包中定义的Java接口一致。</para>
+      
<para>资源的名称是用<literal>org.hornetq.api.core.management.ResourceNames</literal>类来生成的,
+            命名都非常直观(如æ 
¸å¿ƒé˜Ÿåˆ—<literal>exampleQueue</literal>的名称为<literal>core.queue.exampleQueue</literal>,
+            JMS Topic 
<literal>exampleTopic</literal>的名称为<literal>jms.topic.exampleTopic</literal>,等等)。
+</para>
+      <section id="management.core.configuration">
+         <title>配置核心管理</title>
+         <para>管理地址的配置在文件<literal
+               >hornetq-configuration.xml</literal>中:</para>
+         <programlisting>
+   
&lt;management-address&gt;jms.queue.hornetq.management&lt;/management-address&gt;
+         </programlisting>
+         
<para>它的默认地址是<literal>jms.queue.hornetq.management</literal> 
(地址前缀加上
+            
“jms.queue”是为了方便JMS客户端也可以向它发送管理消息。</para>
+         
<para>管理地址需要一个<emphasis>特殊</emphasis>的用户权限
+               
<literal>manage</literal>来接收并处理管理消息。这个权限也在hornetq-configuration.xml文件中é
…ç½®ï¼š</para>
+         <programlisting>
+   &lt;!-- users with the admin role will be allowed to manage --&gt; 
+   &lt;!-- HornetQ using management messages        --&gt;
+   &lt;security-setting match="jms.queue.hornetq.management"&gt;
+      &lt;permission type="manage" roles="admin" /&gt;
+   &lt;/security-setting&gt;
+         </programlisting>
+      </section>
+   </section>
+   <section id="management.jms">
+      <title>使用JMS进行管理</title>
+      <para>使用JMS管理HornetQ与使用æ 
¸å¿ƒAPI管理HornetQ十分相似。</para>
+      <para>å…
¶ä¸­ä¸€ä¸ªé‡è¦çš„不同是JMS需要一个JMS队列来发送消息(而æ 
¸å¿ƒæŽ¥å£ä½¿ç”¨çš„是一个地址)。</para>
+      
<para><emphasis>管理队列</emphasis>是一个特殊的队列,它需要客户端直接实例化:</para>
+      <programlisting>
+   Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management");
+      </programlisting>
+      <para>其余步骤完全和使用核心接口一æ 
·ï¼Œåªæ˜¯ç›¸åº”的对象不同:</para>
+      <orderedlist>
+         <listitem>
+            
<para>创建一个<literal>QueueRequestor</literal>来向管理地址发送管理消息并接收回答。</para>
+         </listitem>
+         <listitem>
+            <para>创建一个<literal>消息</literal></para>
+         </listitem>
+         <listitem>
+            <para>使用 
<literal>org.hornetq.api.jms.management.JMSManagementHelper</literal>类向消息中设置管理参数。</para>
+         </listitem>
+         <listitem>
+            
<para>再使用<literal>QueueRequestor</literal>发送消息。</para>
+         </listitem>
+         <listitem>
+            
<para>使用<literal>org.hornetq.api.jms.management.JMSManagementHelper</literal>来从回答中提取返回結果。</para>
+         </listitem>
+      </orderedlist>
+      
<para>例如,要得到一个JMS队列<literal>exampleQueue</literal>中有多少消息:</para>
+      <programlisting>
+   Queue managementQueue = HornetQJMSClient.createQueue("hornetq.management"); 
  
+   
+   QueueSession session = ...      
+   QueueRequestor requestor = new QueueRequestor(session, managementQueue);
+   connection.start();
+   Message message = session.createMessage();
+   JMSManagementHelper.putAttribute(message, "jms.queue.exampleQueue", 
"messageCount");
+   Message reply = requestor.request(message);
+   int count = (Integer)JMSManagementHelper.getResult(reply);
+   System.out.println("There are " + count + " messages in exampleQueue");
+      </programlisting>
+      <section>
+         <title>配置JMS管理</title>
+         <para>JMS管理的配置与核心接口管理的配置步骤是一æ 
·çš„(参见<xref linkend="management.core.configuration"/>)。</para>
+      </section>
+      <section>
+         <title>例子</title>
+         <para>参见<xref 
linkend="examples.management"/>,它展示了如何使用JMS消息来管理HornetQ。</para>
+      </section>
+   </section>
+ 
+   <section id="management.notifications">
+      <title>管理通知</title>
+      
<para>HornetQ可以向listener发送各种事件的<emphasis>通知</emphasis>(如资源的创建,安å
…¨ç ´åç­‰ï¼‰ã€‚</para>
+      <para>有三种方式接收管理通知</para>
+      <itemizedlist>
+         <listitem>
+            <para>JMX通知</para>
+         </listitem>
+         <listitem>
+            <para>核心消息</para>
+         </listitem>
+         <listitem>
+            <para>JMS消息</para>
+         </listitem>
+      </itemizedlist>
+      <section>
+         <title>JMX通知</title>
+         <para>如果设置了JMX(参见<xref 
linkend="management.jmx.configuration"/>),就可以通过订阅以下
+               两个MBean来获得通知:</para>
+         <itemizedlist>
+            <listitem>
+               <para><literal>org.hornetq:module=Core,type=Server</literal> 
可以获得有关
+                     <emphasis>核心</emphasis>资源的通知</para>
+            </listitem>
+            <listitem>
+               
<para><literal>org.hornetq:module=JMS,type=Server</literal>可以获得有关
+                     <emphasis>JMS</emphasis>资源的通知</para>
+            </listitem>
+         </itemizedlist>
+      </section>
+      <section>
+         <title>核心消息通知</title>
+         
<para>HornetQ定义了一个特殊的<emphasis>管理通知地址</emphasis>。æ
 ¸å¿ƒé˜Ÿåˆ—绑定到该地址后,客户
+            端就可以接收以æ 
¸å¿ƒæ¶ˆæ¯å½¢å¼å‘送的管理信通知了。</para>
+         <para>一个核心客户端要想接收到管理通知,它必
须要创建一个队列并绑定到这个管理通知地址上,然后从这个
+            队列接收通知。</para>
+         <para>通知消息就是普通的核心消息加上相å…
³çš„属性(如通知类型,事件发生时间,资源等)。</para>
+         <para>由于是标准的æ 
¸å¿ƒæ¶ˆæ¯ï¼Œä½¿ç”¨é€‰æ‹©å™¨è¿˜èƒ½å¤Ÿè¿‡æ»¤æŽ‰ä¸€éƒ¨åˆ†é€šçŸ¥è€ŒåªæŽ¥æ”¶æ„Ÿå…
´è¶£çš„通知。</para>
+         <section id="management.notifications.core.configuration">
+            <title>配置核心管理通知地址</title>
+            
<para>用来发送管理通知的地址在文件中<literal>hornetq-configuration.xml</literal>é
…ç½®ï¼š</para>
+            <programlisting>
+               
&lt;management-notification-address&gt;hornetq.notifications&lt;/management-notification-address&gt;
+            </programlisting>
+            
<para>默认的地址是<literal>hornetq.notifications</literal>。</para>
+         </section>
+      </section>
+      <section>
+         <title>JMS消息通知</title>
+         <para>HornetQ还可以通过JMS消息的方式发送通知。</para>
+         <para>这种方式与æ 
¸å¿ƒæ¶ˆæ¯é€šçŸ¥ç›¸ä¼¼ï¼Œä½†æ˜¯æœ‰ä¸€ä¸ªé‡è¦çš„不同:JMS消息需要一个JMS的目æ
 ‡ï¼ˆé€šå¸¸æ˜¯ä¸€ä¸ªTopic)。</para>
+         <para>要通过一个JMS目标来接收管理通知,必
须将服务器的管理通知地址修改为以<literal>jms.queue</literal>开头(如果是一个
+            JMS队列)或者
<literal>jms.topic</literal>(如果是一个话题):</para>
+         <programlisting>
+            &lt;!-- 通知将从JMS话题 "notificationsTopic"上接收 --> 
+            
&lt;management-notification-address&gt;jms.topic.notificationsTopic&lt;/management-notification-address&gt;
+         </programlisting>
+         
<para>这个通知话题一旦被创建,就可以接收消息了(或者
使用<literal>MessageListener</literal>):</para>
+         <programlisting>
+   Topic notificationsTopic = 
HornetQJMSClient.createTopic("notificationsTopic");
+
+   Session session = ...
+   MessageConsumer notificationConsumer = 
session.createConsumer(notificationsTopic);
+      notificationConsumer.setMessageListener(new MessageListener()
+      {
+         public void onMessage(Message notif)
+         {
+            System.out.println("------------------------");
+            System.out.println("Received notification:");
+            try
+            {
+               Enumeration propertyNames = notif.getPropertyNames();
+               while (propertyNames.hasMoreElements())
+               {
+                  String propertyName = (String)propertyNames.nextElement();
+                  System.out.format("  %s: %s\n", propertyName, 
notif.getObjectProperty(propertyName));
+               }
+            }
+            catch (JMSException e)
+            {
+            }
+            System.out.println("------------------------");
+         }            
+      });            
+         </programlisting>
+      </section>
+      <section>
+         <title>例子</title>
+         <para>参见<xref 
linkend="examples.management-notifications"/>。本例采用了JMS的<literal>
+            MessageListener</literal>方法从HornetQ
+            服务器接收管理通知。</para>
+      </section>
+   </section>
+   <section id="management.message-counters">
+      <title>消息计数器</title>
+      
<para>HornetQ保存着队列的历史数据,而消息计数器可以从服务器上获取这些信息。</para>
+      
<para>这些信息可以显示队列的一些<emphasis>趋势</emphasis>。例如,使用管理接口ä½
 å¯ä»¥å®šæœŸæ¥æŸ¥è¯¢ä¸€ä¸ªé˜Ÿåˆ—
+         
的消息数量。但这个数量不足以说明这个队列是否在工作--也许这个队列既没有发送è€
…也没有接收者;也许这个队列
+         
在不停地发送与接收,但是发送消息的速度与接收的速度相等。两咱æƒ
…况下都会造成消息数在队列中不变,但实际队列
+         的状态确完全不一样。</para>
+      <para>消息计数器可以提供队列的更多的信息:</para>
+      <itemizedlist>
+         <listitem>
+            <para><literal>count</literal></para>
+            <para>从服务器启动时加
到队列中的<emphasis>总</emphasis>消息数。</para>
+         </listitem>
+         <listitem>
+            <para><literal>countDelta</literal></para>
+            <para>自<emphasis>上次消息计数器更新</emphasis>后加å…
¥åˆ°é˜Ÿåˆ—的消息数。</para>
+         </listitem>
+         <listitem>
+            <para><literal>depth</literal></para>
+            <para>队列<emphasis>当前</emphasis>的消息数。</para>
+         </listitem>
+         <listitem>
+            <para><literal>depthDelta</literal></para>
+            <para>自<emphasis>上次消息计数器更新</emphasis>后被加
入/删除的消息<emphasis>总数</emphasis>。
+                  
例如,如果<literal>depthDelta</literal>是<literal>-10</literal>,就意谓着有10个消息从
+                  队列中删除了(有可能是2个消息加å…
¥äº†ä½†æœ‰12个消息删除了)。</para>
+         </listitem>
+         <listitem>
+            <para><literal>lastAddTimestamp</literal></para>
+            <para>最后一个消息加入到队列的时间戳。</para>
+         </listitem>
+         <listitem>
+            <para><literal>udpateTimestamp</literal></para>
+            <para>最后一次消息计数器更新的时间戳。</para>
+         </listitem>
+      </itemizedlist>
+      <section id="configuring.message.counters">
+         <title>配置消息计数器</title>
+         <para>默认的消息计数器是关闭的,因为它需要占
用一些内存。</para>
+         
<para>要打开消息计数器,编辑<literal>hornetq-configuration.xml</literal>文件将å
…¶è®¾ä¸º<literal>true</literal>:</para>
+         <programlisting>
+&lt;message-counter-enabled&gt;true&lt;/message-counter-enabled&gt;
+         </programlisting>
+         
<para>消息计数器会保存队列的历史数据(默认是10天)。它以一定间隔(默认10秒一次)对每个队列进行扫描。
+            
如果消息计数器打开,这些参数可以在<literal>hornetq-configuration.xml</literal>文件中进行调整:</para>
+         <programlisting>
+&lt;!-- keep history for a week --&gt;
+&lt;message-counter-max-day-history&gt;7&lt;/message-counter-max-day-history&gt;
            
+&lt;!-- sample the queues every minute (60000ms) --&gt;
+&lt;message-counter-sample-period&gt;60000&lt;/message-counter-sample-period&gt;
+         </programlisting>
+         
<para>使用管理接口可以获得消息计数器。例如要使用JMX得到一个JMS队列的消息计数器:</para>
+         <programlisting>
+// retrieve a connection to HornetQ's MBeanServer
+MBeanServerConnection mbsc = ...
+JMSQueueControlMBean queueControl = 
(JMSQueueControl)MBeanServerInvocationHandler.newProxyInstance(mbsc,
+   on,
+   JMSQueueControl.class,
+   false);
+// message counters are retrieved as a JSON String                             
                                                                         
+String counters = queueControl.listMessageCounter();
+// use the MessageCounterInfo helper class to manipulate message counters more 
easily
+MessageCounterInfo messageCounter = MessageCounterInfo.fromJSON(counters);     
    
+System.out.format("%s message(s) in the queue (since last sample: %s)\n",
+   counter.getDepth(),
+   counter.getDepthDelta());
+         </programlisting>
+      </section>
+      <section>
+         <title>例子</title>
+         <para>参见<xref 
linkend="examples.message-counters"/>。这个例子使用消息计数器来获得一个JMS队列的相å
…³æ•°æ®ã€‚</para>
+      </section>
+   </section>
+   <section>
+      <title>通过JBoss应用服务器的Admin 
Console来管理HornetQ的资源</title>
+      <para>通过JBoss应用服务器的Admin Console可以创建与é…
ç½®HornetQ的各种资源。</para>
+      <para>Admin Console允许你创建各种目æ 
‡ï¼ˆJMS话题与队列)和JMS的连接工厂。</para>
+      <para>登录admin console后你在左边的树中会看到JMS 
Manager节点。所有HornetQ的资源都属于这个节点。在它的下面有JMS
 Queues、
+         Topics以及Connection 
Factories。分别点击它们将会看到相应的资源。下面将解释如何创建并é
…ç½®å®ƒä»¬ã€‚</para>
+      <section>
+         <title>JMS队列</title>
+         <para>要创建一个新的JMS队列,点击JMS 
Queues将列出当前的队列。在右边的窗口中有一个“add a new 
resource“按钮,点击这个按钮
+            并选择默认(JMS 
队列)模板。点击“continue“。填å…
¥ç›¸åº”的队列名称与JNDI名称。å…
¶å®ƒçš„参数值都给出了合理的默认值,通常情况下
+            不用改动它们。在底部可以配置安全角色,如果你
不提供将使用默认的配置。当这个队列成功创建后这些é…
ç½®å°†ä¼šæ˜¾ç¤ºå‡ºæ¥ã€‚除了队列的名字
+            和JNDI名字外,其它参数都可以在contigurationæ 
‡ç­¾é¡µä¸‹è¿›è¡Œä¿®æ”¹ã€‚下面就对它们分别解释。</para>
+         <para>点击 configuration后你将看到如下显示:</para>
+         <para>
+            <graphic fileref="images/console1.png" align="center"/>
+        </para>
+         <para>name和JNDI name是不能改变的。如果你
想改变它们,必须重新创建队列。其它选项是å…
³äºŽåœ°å€è®¾ç½®ä¸Žå®‰å…¨è®¾ç½®ã€‚
+         默认的地址设置来自于服务器的配置。如果你
通过console修改或创建一个队列,那么就会增加
一条新的地址设置。有关
+         地址设置的完整说明参见<xref 
linkend="queue-attributes.address-settings"/>。</para>
+         <para>要删
除一个队列,只要点击队列名称旁边的“delete“按钮即可。与此队列相å
…³çš„任何地址设置或安全设置也将被删除。</para>
+         <para>配置的最后一部分是安å…
¨è§’色。如果在创建时没有给出则默认的安å…
¨è®¾ç½®å°†ä¼šæ˜¾ç¤ºåœ¨å±å¹•ä¸Šã€‚如果它们被修改并更新则队列的安å
…¨è®¾ç½®
+            将被更新。关于安全设置参见<xref 
linkend="security"/>。 </para>
+         <para>在console中还有一个metricsæ 
‡ç­¾é¡µï¼Œå®ƒæ˜¾ç¤ºäº†é˜Ÿåˆ—的各项统计数据,如消息计数,接收者
计数等。</para>
+         <para>在controlæ 
‡ç­¾é¡µä¸­å¯ä»¥å¯¹é˜Ÿåˆ—进行各种操作,比如启动和停止队列,对队列中的消息进行列表,移动,变为过期,åˆ
 é™¤ç­‰ã€‚
+         
要进行一项操作只要点击相应的按钮,然后在出现的提示中输å
…
¥ç›¸åº”的参数,再点击ok按钮即可。操作的結果会显示在屏幕的底部。</para>
+      </section>
+      <section>
+         <title>JMS话题</title>
+         <para>创建及配置JMS话题几乎与队列的操作是一æ 
·çš„。唯一不同的是这些配置应用于一个代表订阅
的队列。</para>
+      </section>
+      <section>
+         <title>JMS连接工厂</title>
+         
<para>JMS连接工厂的创建的操作过程与上述队列或话题的操作一致,只是é
…ç½®å…·ä½“的参数不同而已。关于连接工厂的参数参见é…
ç½®ç´¢å¼•ã€‚</para>
+      </section>
+   </section>
+</chapter>

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/master.xml
----------------------------------------------------------------------
diff --git a/docs/user-manual/zh/master.xml b/docs/user-manual/zh/master.xml
new file mode 100644
index 0000000..9023ca0
--- /dev/null
+++ b/docs/user-manual/zh/master.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- 
============================================================================= 
-->
+<!-- Copyright © 2009 Red Hat, Inc. and others.                               
     -->
+<!--                                                                           
    -->
+<!-- The text of and illustrations in this document are licensed by Red Hat 
under  -->
+<!-- a Creative Commons Attribution–Share Alike 3.0 Unported license 
("CC-BY-SA"). -->
+<!--                                                                           
    -->
+<!-- An explanation of CC-BY-SA is available at                                
    -->
+<!--                                                                           
    -->
+<!--            http://creativecommons.org/licenses/by-sa/3.0/.                
    -->
+<!--                                                                           
    -->
+<!-- In accordance with CC-BY-SA, if you distribute this document or an 
adaptation -->
+<!-- of it, you must provide the URL for the original version.                 
    -->
+<!--                                                                           
    -->
+<!-- Red Hat, as the licensor of this document, waives the right to enforce,   
    -->
+<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent    
    -->
+<!-- permitted by applicable law.                                              
    -->
+<!-- 
============================================================================= 
-->
+
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
+        "../../../lib/docbook-support/support/docbook-dtd/docbookx.dtd" [  
+        <!ENTITY appserver-integration   SYSTEM "appserver-integration.xml">
+        <!ENTITY architecture            SYSTEM "architecture.xml">
+        <!ENTITY client-reconnection     SYSTEM "client-reconnection.xml">
+        <!ENTITY client-classpath        SYSTEM "client-classpath.xml">
+        <!ENTITY clusters                SYSTEM "clusters.xml">
+        <!ENTITY configuration-index     SYSTEM "configuration-index.xml">
+        <!ENTITY configuring-transports  SYSTEM "configuring-transports.xml">
+        <!ENTITY connection-ttl          SYSTEM "connection-ttl.xml">
+        <!ENTITY core-bridges            SYSTEM "core-bridges.xml">
+        <!ENTITY diverts                 SYSTEM "diverts.xml">
+        <!ENTITY duplicate-detection     SYSTEM "duplicate-detection.xml">
+        <!ENTITY embedding-hornetq       SYSTEM "embedding-hornetq.xml">
+        <!ENTITY examples                SYSTEM "examples.xml">
+        <!ENTITY filter-expressions      SYSTEM "filter-expressions.xml">
+        <!ENTITY flow-control            SYSTEM "flow-control.xml">       
+        <!ENTITY ha                      SYSTEM "ha.xml">
+        <!ENTITY transaction-config      SYSTEM "transaction-config.xml">
+        <!ENTITY intercepting-operations SYSTEM "intercepting-operations.xml">
+        <!ENTITY interoperability        SYSTEM "interoperability.xml">
+        <!ENTITY jms-bridge              SYSTEM "jms-bridge.xml">
+        <!ENTITY jms-core-mapping        SYSTEM "jms-core-mapping.xml">
+        <!ENTITY large-messages          SYSTEM "large-messages.xml">
+        <!ENTITY last-value-queues       SYSTEM "last-value-queues.xml">
+        <!ENTITY logging                 SYSTEM "logging.xml">
+        <!ENTITY management              SYSTEM "management.xml">
+        <!ENTITY message-expiry          SYSTEM "message-expiry.xml">
+        <!ENTITY message-grouping        SYSTEM "message-grouping.xml">
+        <!ENTITY messaging-concepts      SYSTEM "messaging-concepts.xml">
+        <!ENTITY notice                  SYSTEM "notice.xml">
+        <!ENTITY paging                  SYSTEM "paging.xml">
+        <!ENTITY perf-tuning             SYSTEM "perf-tuning.xml">
+        <!ENTITY persistence             SYSTEM "persistence.xml">
+        <!ENTITY pre-acknowledge         SYSTEM "pre-acknowledge.xml">
+        <!ENTITY preface                 SYSTEM "preface.xml">
+        <!ENTITY project-info            SYSTEM "project-info.xml">
+        <!ENTITY queue-attributes        SYSTEM "queue-attributes.xml">
+        <!ENTITY scheduled-messages      SYSTEM "scheduled-messages.xml">
+        <!ENTITY security                SYSTEM "security.xml">
+        <!ENTITY send-guarantees         SYSTEM "send-guarantees.xml">
+        <!ENTITY thread-pooling          SYSTEM "thread-pooling.xml">
+        <!ENTITY undelivered-messages    SYSTEM "undelivered-messages.xml">
+        <!ENTITY using-core              SYSTEM "using-core.xml">
+        <!ENTITY using-jms               SYSTEM "using-jms.xml">
+        <!ENTITY using-server            SYSTEM "using-server.xml">
+        <!ENTITY wildcard-syntax         SYSTEM "wildcard-syntax.xml">
+        <!ENTITY wildcard-routing        SYSTEM "wildcard-routing.xml">
+        <!ENTITY libaio                  SYSTEM "libaio.xml">
+        ]>
+<book lang="en">
+   <bookinfo>         
+      <title>HornetQ 2.1用户手册</title>
+      <subtitle>Putting the buzz in messaging</subtitle>
+   </bookinfo>
+
+   <toc></toc>
+
+   &notice;
+   &preface;
+   &project-info;
+   &messaging-concepts;        
+   &architecture;
+   &using-server;
+   &using-jms;
+   &using-core;
+   &jms-core-mapping;
+   &client-classpath;  
+   &examples;
+   &wildcard-routing;
+   &wildcard-syntax;
+   &filter-expressions;   
+   &persistence;        
+   &configuring-transports;
+   &connection-ttl;
+   &transaction-config;
+   &flow-control;
+   &send-guarantees;
+   &undelivered-messages;
+   &message-expiry;     
+   &large-messages;
+   &paging;
+   &queue-attributes;              
+   &scheduled-messages;
+   &last-value-queues;
+   &message-grouping;
+   &pre-acknowledge;   
+   &management;
+   &security;   
+   &appserver-integration;   
+   &jms-bridge;   
+   &client-reconnection;
+   &diverts;
+   &core-bridges;
+   &duplicate-detection;
+   &clusters;
+   &ha;   
+   &libaio;
+   &thread-pooling;
+   &logging;
+   &embedding-hornetq;
+   &intercepting-operations;
+   &interoperability;
+   &perf-tuning;
+   &configuration-index;
+   
+   
+</book>

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/message-expiry.xml
----------------------------------------------------------------------
diff --git a/docs/user-manual/zh/message-expiry.xml 
b/docs/user-manual/zh/message-expiry.xml
new file mode 100644
index 0000000..5feb6f2
--- /dev/null
+++ b/docs/user-manual/zh/message-expiry.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
============================================================================= 
-->
+<!-- Copyright © 2009 Red Hat, Inc. and others.                               
     -->
+<!--                                                                           
    -->
+<!-- The text of and illustrations in this document are licensed by Red Hat 
under  -->
+<!-- a Creative Commons Attribution–Share Alike 3.0 Unported license 
("CC-BY-SA"). -->
+<!--                                                                           
    -->
+<!-- An explanation of CC-BY-SA is available at                                
    -->
+<!--                                                                           
    -->
+<!--            http://creativecommons.org/licenses/by-sa/3.0/.                
    -->
+<!--                                                                           
    -->
+<!-- In accordance with CC-BY-SA, if you distribute this document or an 
adaptation -->
+<!-- of it, you must provide the URL for the original version.                 
    -->
+<!--                                                                           
    -->
+<!-- Red Hat, as the licensor of this document, waives the right to enforce,   
    -->
+<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent    
    -->
+<!-- permitted by applicable law.                                              
    -->
+<!-- 
============================================================================= 
-->
+<chapter id="message-expiry">
+   <title>过期的消息</title>
+   
<para>消息在发送时有一个可选的<emphasis>生存时间</emphasis>属性。</para>
+   <para>如果一个消息已经超
过了它的生存时间,HornetQ不再将它传递给任何接收者。
+      服务器会将过期的消息抛弃。</para>
+   <para>HornetQ的地址可以é…
ç½®ä¸€ä¸ªè¿‡æœŸåœ°å€ï¼Œå½“消息过期时,它们被从队列中删
除并被转移到过期地址中。
+      
多个不同的队列可以绑定到一个过期地址上。这些过期的消息过后可以接收下来以供分析用。</para>
+   <section>
+      <title>过期消息的配置</title>
+      <para>如果使用HornetQæ 
¸å¿ƒAPI,可以直接在消息上设置过期时间:</para>
+      <programlisting>
+// message will expire in 5000ms from now
+message.setExpiration(System.currentTimeMillis() + 5000);         
+              </programlisting>
+      <para>JMS的MessageProducer可以设置一个TimeToLive来控制å…
¶å‘送的消息:</para>
+      <programlisting>
+// messages sent by this producer will be retained for 5s (5000ms) before 
expiration           
+producer.setTimeToLive(5000);
+        </programlisting>
+      <para>从过期地址中接收下来的消息有以下属性:</para>
+      <itemizedlist>
+         <listitem>
+            <para><literal>_HQ_ORIG_ADDRESS</literal></para>
+            
<para>这是一个字符串,它是该消息的<emphasis>原始地址</emphasis>。</para>
+         </listitem>
+         <listitem>
+            <para><literal>_HQ_ACTUAL_EXPIRY</literal></para>
+            <para>一个长整型量,代表此消息<emphasis>实际
过期时间</emphasis>。</para>
+         </listitem>
+      </itemizedlist>
+   </section>
+   <section id="message-expiry.configuring">
+      <title>配置过期地址</title>
+      <para>过期地址配置在地址设置(address-setting)中:</para>
+      <programlisting>
+&lt;!-- expired messages in exampleQueue will be sent to the expiry address 
expiryQueue --&gt;
+&lt;address-setting match="jms.queue.exampleQueue"&gt;
+   &lt;expiry-address&gt;jms.queue.expiryQueue&lt;/expiry-address&gt;
+&lt;/address-setting&gt;
+        </programlisting>
+      
<para>如果没有定义过期地址,当一个消息过期时,它将被删
除。配置过期地址时可以使用通配符
+         来给一组地址配置过期地址。(参见<xref 
linkend="wildcard-syntax"/>)。</para>
+   </section>
+   <section id="configuring.expiry.reaper">
+      <title>配置过期回收线程</title>
+      
<para>HornetQ有一个回收线程定期地检查队列中的消息,目的是发现是否有消息过期。</para>
+      
<para>在<literal>hornetq-configuration.xml</literal>文件中可以对回收线程进行é
…ç½®ï¼Œå‚数如下:</para>
+      <itemizedlist>
+         <listitem>
+            <para><literal>message-expiry-scan-period</literal></para>
+            
<para>过期消息的扫描间隔(单位毫秒,默认为30000ms)。如要å
…³é—­æ‰«æï¼Œå°†å…¶è®¾ä¸º<literal>-1</literal>。</para>
+         </listitem>
+         <listitem>
+            <para><literal>message-expiry-thread-priority</literal></para>
+            <para>回收线程的优先级(为0到9的整数,9优å…
ˆçº§æœ€é«˜ã€‚默认是3)。</para>
+         </listitem>
+      </itemizedlist>
+   </section>
+   <section>
+      <title>例子</title>
+      <para>参见<xref 
linkend="examples.expiry"/>。这个例子展示了在JMS中如何é…
ç½®ä½¿ç”¨æ¶ˆæ¯è¿‡æœŸåŠŸèƒ½ã€‚</para>
+   </section>
+</chapter>

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/message-grouping.xml
----------------------------------------------------------------------
diff --git a/docs/user-manual/zh/message-grouping.xml 
b/docs/user-manual/zh/message-grouping.xml
new file mode 100644
index 0000000..c41341f
--- /dev/null
+++ b/docs/user-manual/zh/message-grouping.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
============================================================================= 
-->
+<!-- Copyright © 2009 Red Hat, Inc. and others.                               
     -->
+<!--                                                                           
    -->
+<!-- The text of and illustrations in this document are licensed by Red Hat 
under  -->
+<!-- a Creative Commons Attribution–Share Alike 3.0 Unported license 
("CC-BY-SA"). -->
+<!--                                                                           
    -->
+<!-- An explanation of CC-BY-SA is available at                                
    -->
+<!--                                                                           
    -->
+<!--            http://creativecommons.org/licenses/by-sa/3.0/.                
    -->
+<!--                                                                           
    -->
+<!-- In accordance with CC-BY-SA, if you distribute this document or an 
adaptation -->
+<!-- of it, you must provide the URL for the original version.                 
    -->
+<!--                                                                           
    -->
+<!-- Red Hat, as the licensor of this document, waives the right to enforce,   
    -->
+<!-- and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent    
    -->
+<!-- permitted by applicable law.                                              
    -->
+<!-- 
============================================================================= 
-->
+<chapter id="message-grouping">
+   <title>消息分组</title>
+   <para>消息组是具有下列特性的消息集合:</para>
+   <itemizedlist>
+      <listitem>
+         <para>在一个消息组中的消息有相同的组æ 
‡è¯†ï¼ˆid),即它们的<literal>JMSXGroupID</literal>(JMS)或
+               <literal>_HQ_GROUP_ID</literal>(HornetQæ 
¸å¿ƒï¼‰çš„值相同。</para>
+      </listitem>
+      <listitem>
+         <para>不管存在多少个接收者
(consumer),一个消息组的所有消息总是被同一个接收者
所接收。一个组id总是
+            与同一个接收者相关联。如果这个接收者被å…
³é—­ï¼Œå¦å¤–一个接收者
就被选中来代替它接收该消息组的消息。</para>
+      </listitem>
+   </itemizedlist>
+   <para>消息组在需要同一个接收者
按顺序处理某类消息的时候很有用。</para>
+   
<para>一支股票的订购就是一个例子。某支股票的订单需要同一个接收è€
…按顺序处理。于是可以每支股票有一个接收者
+      来处理(也可以用少一些的接收者
),然后将每支股票的名字设在消息的_HQ_GROUP_ID参数中。</para>
+   <para>这样可以保证一支股票的消息只被同一个接收者
处理。</para>
+   <section>
+      <title>使用核心接口</title>
+      <para>用来标识一个消息组的参数是 
<literal>"_HQ_GROUP_ID""</literal> (或者相应的常量<literal
+         
>MessageImpl.HDR_GROUP_ID</literal>)。另一种方法是在<literal>SessionFactory</literal>
+         中将<literal>autogroup</literal>设置为true。这æ 
·åšçš„话组id是随机给出的。</para>
+   </section>
+   <section id="message-grouping.jmsconfigure">
+      <title>使用JMS</title>
+      <para>用来æ 
‡è¯†ä¸€ä¸ªæ¶ˆæ¯ç»„的参数是<literal>JMSXGroupID</literal>。</para>
+      <programlisting>
+ // send 2 messages in the same group to ensure the same
+ // consumer will receive both
+ Message message = ...
+ message.setStringProperty("JMSXGroupID", "Group-0");
+ producer.send(message);
+
+ message = ...
+ message.setStringProperty("JMSXGroupID", "Group-0");
+ producer.send(message);          
+       </programlisting>
+      
<para>另一个方法是将<literal>HornetQConnectonFactory</literal>的<literal>autogroup</literal>
+         属性设为true,或者
在<literal>hornetq-jms.xml</literal>文件中进行配置:</para>
+      <programlisting>&lt;connection-factory name="ConnectionFactory">
+      &lt;connectors>
+         &lt;connector-ref connector-name="netty-connector"/>
+      &lt;/connectors>
+      &lt;entries>
+         &lt;entry name="ConnectionFactory"/>
+      &lt;/entries>
+      &lt;autogroup>true&lt;/autogroup>
+&lt;/connection-factory></programlisting>
+      
<para>还可以通过连接工厂来设置组id。来自这个连接工厂的所有的发送è€
…(producer)发送的消息的<literal
+            >JMSXGroupID</literal>将å…
·æœ‰æŒ‡å®šçš„值。这种方法需要在<literal>hornetq-jms.xml</literal>
+            文件中作如下配置:
+         <programlisting>
+         &lt;connection-factory name="ConnectionFactory"&gt;
+      &lt;connectors&gt;
+         &lt;connector-ref connector-name="netty-connector"/&gt;
+      &lt;/connectors&gt;
+      &lt;entries&gt;
+         &lt;entry name="ConnectionFactory"/&gt;
+      &lt;/entries>
+      &lt;group-id>Group-0&lt;/group-id&gt;
+   &lt;/connection-factory&gt;
+      </programlisting></para>
+   </section>
+   <section>
+      <title>例子</title>
+      <para>参见<xref 
linkend="examples.message-group"/>。这个例子展示的是在JMS中如何é…
ç½®ä¸Žä½¿ç”¨æ¶ˆæ¯ç»„。</para>
+   </section>
+   <section>
+      <title>例子</title>
+      <para><xref 
linkend="examples.message-group2"/>是另外一个消息组的例子,在这个例子中通过é
…ç½®è¿žæŽ¥å·¥åŽ‚
+         来使用消息组。</para>
+   </section>
+   <section>
+      <title>集群中的消息组</title>
+      <para>在集群中使用消息组是相对比较复杂的。这是因
在在集群中,一个消息组中的消息有可能被送到集群中的任一å
…¨èŠ‚点,
+         
这就要求每个节点都要知道这个消息是属于哪个节点上的哪个接收è€
…(consumer)。一个消息组的消息往往会被发送到
+         集群中的一个节点,而该消息组的接收者
在另一个节点上。每个节点都要知道这些细节以便能将消息正确路由到所属接收
+         者所在的节点上。</para>
+      
<para>为了解决上述问题,我们使用了消息组处理器。每个节点都有一个自己的消息组处理器。当一个带有组id的消息收到时,
+         
这些节点的消息组处理器就会协同作出决定该如何对这个消息进行路由。</para>
+      
<para>消息组处理器有两种:本地消息组处理器和远程消息组处理器。在一个集群中要选择一个节点作为本地消息组处理器的
+         节点,集群中所有å…
¶å®ƒçš„节点都持有远程消息组处理器。在集群中由本地消息组处理器最終决定消息怎æ
 ·è·¯ç”±ï¼Œå…¶å®ƒçš„远程
+         处理器配合本地处理器完成决策。消息组处理器的é…
ç½®åœ¨<emphasis role="italic">hornetq-configuration.xml</emphasis>
+         文件中,下面就是一个例子:
+<programlisting>   &lt;grouping-handler name="my-grouping-handler">
+      &lt;type>LOCAL&lt;/type>
+      &lt;address>jms&lt;/address>
+      &lt;timeout>5000&lt;/timeout>
+   &lt;/grouping-handler>
+
+   &lt;grouping-handler name="my-grouping-handler">
+      &lt;type>REMOTE&lt;/type>
+      &lt;address>jms&lt;/address>
+      &lt;timeout>5000&lt;/timeout>
+   &lt;/grouping-handler></programlisting></para>
+      <para><emphasis 
role="italic">address</emphasis>属性表示一个集群的连接以及它使用的地址。有å
…³å¦‚何配置集群
+         参见集群章节。<emphasis 
role="italic">timeout</emphasis>属性代表做出路由决定所需要等待
的时间。如果超过
+         
了这个时间还没有做出决定,则会抛出异常。这可以保证严æ 
¼çš„顺序。</para>
+      <para>收到消息的节点会首å…
ˆæå‡ºä¸€ä¸ªæ¶ˆæ¯è·¯ç”±çš„建议。它采用轮询方式来选择一个合适的路由。它首å
…ˆé€‰æ‹©ä¸€ä¸ªæœ¬åœ°çš„队列,之后
+         再选择一个有接收者
的队列。如果这个建议被所有组处理器接受,消息就会被路由到所选的队列。如果被拒绝就提出另一个路
+         
由方案,如此反复直到方案被接受为止。队列选择后所有å…
¶å®ƒçš„节点都将消息路由到这个队列。这æ 
·æ‰€æœ‰çš„消息组的消息在一个
+         节点上进行处理,也就是该节点上的接收者
接收所有的同组的消息。</para>
+      <para>由于只有一个本地处理器,如果它的节点出现故
障则无法做出决定。这时所有的消息将不能被传
递,并且会抛出异常。
+         为了避免这一单点故
障,本地处理器可以在备份节点上有一个复本。只要创建备份节点并é
…ç½®ä¸€ä¸ªç›¸åŒçš„本地处理器即可。</para>
+      <para/>
+      <section>
+         <title>集群消息组的最佳使用惯例</title>
+         <para>下面是一些很好的建议:<orderedlist>
+               <listitem>
+                  <para>尽可能使接收者
均匀分布在不同的节点上。由于消息组的消息总是传
递到同一个队列的同一个接收者,
+                     如果你经常性地创建与关闭接收者
,就可能出现消息由于没有接收者而传递不出去,造
成消息在队列中
+                     不断积累的情况。因此,尽量要避免å…
³é—­æŽ¥æ”¶è€…,或者确保有足够数量的接收者。例如,如果你
的集群
+                     有3个节点,那么就创建3个接收者。</para>
+               </listitem>
+               <listitem>
+                  <para>尽可能使用持久
型队列。如果消息组的消息与一个队列绑定,一旦这个队列被åˆ
 é™¤ï¼Œå…¶å®ƒèŠ‚点可能仍然
+                     尝试向这个已删除的队列路由消息。为避å…
è¿™ç§æƒ…况,要确保这个队列由发送消息的会话来删除。这æ 
·å¦‚æžœ
+                     下一个消息发出后发现原来的队列被删
除,新的路由建议就会提出。另外一种方案是你
可以重新使用一个不
+                     同的组ID。</para>
+               </listitem>
+               <listitem>
+                  
<para>一定要确保本地的消息组处理器有备份。这样在有故
障时消息组仍然可以正常工作。</para>
+               </listitem>
+            </orderedlist></para>
+      </section>
+      <section>
+         <title>集群消息组例子</title>
+         <para>参见<xref 
linkend="examples.clustered.grouping"/>,这个例子给出了如何在HornetQ集群中é
…ç½®æ¶ˆæ¯ç»„。</para>
+      </section>
+   </section>
+</chapter>

Reply via email to