http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/client-classpath.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/client-classpath.xml b/docs/user-manual/zh/client-classpath.xml new file mode 100644 index 0000000..9a82ce3 --- /dev/null +++ b/docs/user-manual/zh/client-classpath.xml @@ -0,0 +1,47 @@ +<?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="client-classpath"> + <title>客æ·ç«¯çClasspath</title> + <para>HornetQç<emphasis>客æ·ç«¯Classpath</emphasis>éè¦æå 个jaræ件ãå ·ä½æ¯åªå 个è¦æ ¹æ®å®¢æ·ç«¯ + æ¯éè¦å æ ¸APIãJMSåJNDIä¸çåªäºæå¡æ¥ç¡®å®ã</para> + <warning> + <para>æ¬ç« ææåçææjaræä»¶å ¨é¨å¨HorneQåå¸å ç <literal>lib</literal>ç®å½ä¸ãå¨ä½¿ç¨ä¸ä¸å® + è¦ç¡®ä¿ææçjaræ件å±äºåä¸ä¸ªåå¸çæ¬ãå°ä¸åçæ¬çjaræ··å¨ä¸èµ·ä½¿ç¨å¯è½é æä¸äºé¾ä»¥åç°çé误ã</para> + </warning> + <section> + <title>使ç¨HornetQå æ ¸ç客æ·ç«¯</title> + <para>å¦æ客æ·ç«¯åªä½¿ç¨HornetQå æ ¸ï¼éJMS客æ·ç«¯ï¼ï¼éè¦å° <literal + >hornetq-core-client.jar</literal>å + <literal>netty.jar</literal> æ¾å°classpathä¸ã</para> + </section> + <section> + <title>JMS客æ·ç«¯</title> + <para>å¦æ客æ·ç«¯ä½¿ç¨JMSï¼éè¦å¨classpathä¸å¢å 两个jaræä»¶ï¼ <literal + >hornetq-jms-client.jar</literal> å <literal>jboss-jms-api.jar</literal>ã</para> + <note> + <para><literal>jboss-jms-api.jar</literal>ä¸å å«çåªæ¯ <literal>javax.jms.*</literal> å ä¸çæ¥å£ç±»ã + å¦æè¿äºç±»å·²ç»å¨ä½ çclasspathä¸ï¼åä½ å°±ä¸éè¦è¿ä¸ªjaræ件ã</para> + </note> + </section> + <section> + <title>éè¦JNDIçJMS客æ·ç«¯</title> + <para>å¦æä½ çJMS客æ·ç«¯ä½¿ç¨JNDIæ¥æ¥æ¾HornetQåç¬æå¡å¨ä¸ç对象ï¼ä½ éè¦å° <literal>jnp-client.jar</literal> å¢å + å°ä½ çclasspathä¸ã</para> + </section> +</chapter>
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/client-reconnection.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/client-reconnection.xml b/docs/user-manual/zh/client-reconnection.xml new file mode 100644 index 0000000..70ea033 --- /dev/null +++ b/docs/user-manual/zh/client-reconnection.xml @@ -0,0 +1,116 @@ +<?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="client-reconnection"> + <title>客æ·ç«¯éæ°è¿æ¥ä¸ä¼è¯æ¢å¤</title> + <para>éè¿é ç½®ï¼HornetQç客æ·ç«¯å¨ä¸æå¡å¨çè¿æ¥åºç°æ éæ¶ï¼å¯ä»¥èªå¨å°éæ°å»ºç«è¿æ¥å¹¶æ¢å¤ä¸æå¡å¨çéè¿ ã</para> + <section> + <title>100%éæçä¼è¯æ¢å¤ï¼re-attachmentï¼</title> + <para>å¦æç½ç»åºç°ææ¶æ§è¿æ¥æ éï¼å¹¶ä¸æå¡å¨æ²¡æéå¯çæ åµä¸ï¼å½åçä¼è¯è¿ä¼åå¨æå¡å¨ä¸ï¼å ¶ç¶æå¦å客æ·ç«¯ + 没ææå¼è¶ è¿è¿æ¥TTL<xref linkend="connection-ttl"/>æ¶é´ã</para> + <para>å¨è¿ç§æ åµä¸ï¼å½å®¢æ·ç«¯éæ°è¿æ¥ä¸æå¡å¨åï¼HornetQèªå¨å°å®¢æ·ç«¯åä¼è¯ä¸æå¡å¨ç«¯çä¼è¯éæ°è¿æ¥èµ·æ¥ãæ´ä¸ªè¿ç¨ + 对äºå®¢æ·ç«¯æ¯å®å ¨éæçï¼å¨å®¢æ·ç«¯å°±å¥½åä»ä¹é½æ²¡æåçä¸æ ·ã</para> + <para>å ·ä½å·¥ä½åçå¦ä¸ï¼</para> + <para>客æ·ç«¯ååæå¡å¨åéå½ä»¤æ¶ï¼å®å°æ¯ä¸ªå½ä»¤ä¿åå°å åçä¸åç¼åä¸ãå½è¿æ¥åºç°æ éæ¶å®¢æ·ç«¯ä¼å°è¯ä¸è¯¥æå¡ + å¨æ¢å¤ä¼è¯ãå为æ¢å¤åè®®çä¸é¨åï¼æå¡å¨å¨ä¼è¯æ¢å¤æ¶éç¥å®¢æ·ç«¯æåä¸ä¸ªæåæ¥æ¶çå½ä»¤idã</para> + <para>æ ¹æ®è¿ä¸ªå½ä»¤idï¼å®¢æ·ç«¯å¯ä»¥å¤æå®çç¼åä¸æ¯å¦æå½ä»¤è¿æªè¢«æå¡å¨æåæ¥æ¶ãå¦ææï¼å®¢æ·ç«¯å¯ä»¥éæ°åé + è¿äºå½ä»¤ã</para> + <para>ç¼åç大å°ç±<literal>ConfirmationWindowSize</literal>åæ°å³å®ãå½æå¡å¨æåæ¥æ¶äº + <literal>ConfirmationWindowSize</literal>åèçå½ä»¤æ¶ï¼ä¼å客æ·ç«¯åéä¸ä¸ªå½ä»¤ç¡®è®¤ï¼ä»¥ä½¿å®¢æ·ç«¯ + åæ¶æ¸ é¤ç¼åã</para> + <para>å¦æ使ç¨JMSæå¡ï¼å¹¶ä¸JMSçè¿æ¥å·¥åæ¯æ³¨åå°JNDIçè¯ï¼ç¸åºçåæ°æ¯<literal + >hornetq-jms.xml</literal>æ件ä¸ç<literal + >confirmation-window-size</literal>项ãå¦æä½ å¹¶ä¸å°JMSè¿æ¥å·¥å注åå°JNDIï¼åä½ éè¦å¨ + <literal>HornetQConnectionFactory</literal>ä¸ä½¿ç¨ç¸åºçæ¹æ³ç´æ¥è®¾ç½®è¯¥åæ°ã</para> + <para>å¦æ使ç¨æ ¸å¿æå¡ï¼ä½ å¯ä»¥ç´æ¥å¨<literal>ClientSessionFactory</literal>å®ä¾ä¸ç´æ¥è®¾ç½®è¯¥åæ°ã</para> + <para>åæ°çåä½æ¯åèã</para> + <para>å¦æ该åæ°æ¯å¼è®¾ä¸º<literal>-1</literal>ï¼åå ³éç¼åï¼å³å ³éäºéæ°æ¢å¤åè½ï¼è¿«ä½¿è¿è¡éæ°è¿æ¥ãé»è®¤ + å¼æ¯<literal>-1</literal>ï¼è¡¨ç¤ºæ²¡æèªå¨æ¢å¤ï¼ã</para> + </section> + <section> + <title>ä¼è¯éæ°è¿æ¥</title> + <para>ææ¶æå¡å¨åçæ éåè¿è¡äºéå¯ãè¿æ¶æå¡å¨å°ä¸¢å¤±ææå½åçä¼è¯ï¼ä¸é¢æè¿°çä¼è¯æ¢å¤å°±ä¸è½åå°å®å ¨éæäºã</para> + <para>å¨è¿ç§æ åµä¸ï¼HornetQèªå¨å°éæ°å»ºç«è¿æ¥å¹¶<emphasis role="italic">éæ°å建</emphasis>ä¼è¯ + åæ¥æ¶è ãè¿ä¸è¿ç¨ä¸åå¤ä»½æå¡å¨è¿è¡å¤±æå¤æ´ï¼failoverï¼å®å ¨ä¸æ ·ã</para> + <para>客æ·éæ°è¿æ¥çåè½è¿ç¨å¨å ¶å®ä¸äºæ¨¡åä¸ï¼å¦æ ¸å¿æ¡¥ï¼ä»¥ä½¿å®ä»¬è½å¤éæ°è¿æ¥å°ç®æ æå¡å¨ä¸ã</para> + <para>è¦å ¨é¢ç解äºå¡æ§ä¼è¯åéäºå¡æ§ä¼è¯å¨å¤±æå¤æ´ï¼éè¿æ¥æ åµä¸çç»èï¼ä»¥åå¦ä½ä¿è¯<emphasis role="italic"> + ä¸æ¬¡å¹¶ä¸åªæä¸æ¬¡</emphasis>çæ¶æ¯ä¼ éï¼è¯·åè§<xref linkend="ha.automatic.failover"/>çæå ³å 容ã</para> + </section> + <section> + <title>éæ°è¿æ¥ï¼ä¼è¯æ¢å¤çé ç½®åæ°</title> + <para>ä¸é¢æ¯å®¢æ·ç«¯ç¨äºéæ°è¿æ¥çåæ°ï¼</para> + <itemizedlist> + <listitem> + <para><literal>retry-interval</literal>ãå¯éåæ°ãå®å³å®äºä¸¤æ¬¡éæ°è¿æ¥å°è¯é´éçæ¶é´ãåä½ + æ¯æ¯«ç§ãé»è®¤å¼æ¯<literal>2000</literal>毫ç§ã</para> + </listitem> + <listitem> + <para><literal>retry-interval-multiplier</literal>ãå¯éåæ°ãå®è¡¨ç¤ºä¸ä¸æ¬¡éè¯æ¶é´é´éç + ç³»æ°ãå³ä¸ä¸æ¬¡éè¯çæ¶é´é´éæ¯æ¬æ¬¡æ¶é´é´éä¹ä»¥è¯¥åæ°ã</para> + <para>è¿æ ·å¯ä»¥å®ç°éè¯é´éç<emphasis>ææ°å»¶è¿ï¼exponential backoffï¼</emphasis>ã</para> + <para>让æ们çä¸ä¸ªä¾åï¼</para> + <para>å设<literal>retry-interval</literal>为<literal>1000</literal> msï¼å¹¶ä¸æ们 + å°<literal>retry-interval-multiplier</literal>设为<literal>2.0</literal>ï¼å¦æ + 第ä¸æ¬¡å°è¯å¤±è´¥ï¼åçå¾ <literal>1000</literal>毫ç§åè¿è¡ç¬¬äºæ¬¡éè¯ï¼å¦æå失败ï¼åæ¯ä¸æ¬¡é + è¯è¦å¨<literal>2000</literal>毫ç§åè¿è¡ï¼ç¬¬å次è¦çå¾ <literal>4000</literal>毫ç§ï¼ + 以æ¤ç±»æ¨ã</para> + <para>é»è®¤å¼æ¯<literal>1.0</literal>ï¼è¡¨ç¤ºæ¯æ¬¡éè¯é´éç¸åçæ¶é´ã</para> + </listitem> + <listitem> + <para><literal>max-retry-interval</literal>ãå¯éåæ°ãå®å³å®äºéè¯é´çæ大æ¶é´é´éã + 使ç¨<literal>retry-interval-multiplier</literal>å¯ä»¥ä½¿éè¯çæ¶é´é´é以ææ°çº§å¢å ã + æå¯è½é ææ¶é´é´éå¢å å°ä¸ä¸ªé常大çæ°å¼ãéè¿è®¾ç½®ä¸ä¸ªæ大å¼å¯å¯¹å ¶å¢é¿è¿è¡éå¶ãé»è®¤ + å¼æ¯<literal>2000</literal>毫ç§ã</para> + </listitem> + <listitem> + <para><literal>reconnect-attempts</literal>ãå¯éåæ°ãå®è¡¨ç¤ºè¦è¿è¡å¤å°éè¯åææ¾å¼ + 并éåºã<literal>-1</literal>表示è¿è¡æ é次éè¯ãé»è®¤å¼æ¯<literal>0</literal>ã</para> + </listitem> + </itemizedlist> + <para>å¦æ使ç¨JMS并ä¸å°JMSçè¿æ¥å·¥åç»å®å°JNDIæå¡ä¸ï¼åéè¦å¨<literal>hornetq-jms.xml</literal> + æ件ä¸å¯¹è¿äºåæ°è¿è¡é ç½®ï¼å¦ä¸ä¾æ示ï¼</para> + <programlisting> +<connection-factory name="ConnectionFactory"> +<connectors> + <connector-ref connector-name="netty"/> +</connectors> +<entries> + <entry name="ConnectionFactory"/> + <entry name="XAConnectionFactory"/> +</entries> +<retry-interval>1000</retry-interval> +<retry-interval-multiplier>1.5</retry-interval-multiplier> +<max-retry-interval>60000</max-retry-interval> +<reconnect-attempts>1000</reconnect-attempts> +</connection-factory> + </programlisting> + <para>å¦æ使ç¨JMSä½æ¯ç´æ¥å®ä¾åJMSè¿æ¥å·¥åï¼ä½ å¯ä»¥ä½¿ç¨éå½çæ¹æ³å¨ <literal + >HornetQConnectionFactory</literal> 对象ä¸ç´æ¥è®¾ç½®è¿äºåæ°ã</para> + <para>å¦æ使ç¨æ ¸å¿æ¥å£ç´æ¥å建 <literal + >ClientSessionFactory</literal>å®ä¾ï¼åç¨å®çéå½çæ¹æ³å¯ä»¥è®¾ç½®è¿äºåæ°ã</para> + <para>å¦æ客æ·ç«¯éæ°è¿æ¥ååç°ä¼è¯å·²ç»ä¸¢å¤±ï¼å¦æå¡å¨éå¯æè¶ æ¶ï¼ï¼åæ æ³å®ææ¢å¤ãå¦æå¨è¿æ¥ä¸æä¼è¯ä¸æ³¨åäº + <literal>ExceptionListener</literal>æ<literal>FailureListener</literal>ï¼ + å®ä»¬å°ä¼è¢«éç¥ã</para> + </section> + <section id="client-reconnection.exceptionlistener"> + <title>ExceptionListeners and SessionFailureListeners</title> + <para>请注æå½å®¢æ·ç«¯è¿è¡éæ°è¿æ¥ææ¢å¤ä¼è¯æ¶ï¼æ³¨åçJMS <literal + >ExceptionListener</literal> ææ ¸å¿æ¥å£ç <literal>SessionFailureListener</literal> + å°ä¼è¢«è°ç¨ã</para> + </section> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/clusters.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/clusters.xml b/docs/user-manual/zh/clusters.xml new file mode 100644 index 0000000..a6cb591 --- /dev/null +++ b/docs/user-manual/zh/clusters.xml @@ -0,0 +1,551 @@ +<?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="clusters"> + <title>é群</title> + <section> + <title>é群æ¦è¿°</title> + <para>HornetQé群æ¯ç±ä¸ç»HornetQæå¡å¨ç»æçéåï¼å®ä»¬åååä½è¿è¡æ¶æ¯å¤çãé群ä¸æ¯ä¸ªä¸»èç¹å°±æ¯ä¸ä¸ª + HornetQæå¡å¨ï¼å®ç®¡çèªå·±çè¿æ¥å¹¶å¤çèªå·±çæ¶æ¯ãè¦å°ä¸ä¸ªHornetQæå¡å¨é 置为é群æå¡å¨ï¼éè¦å°é ç½® + æ件<literal>hornetq-configuration.xml</literal>ä¸<literal>clustered</literal>çå¼è®¾ + 为<literal>true</literal>ãé»è®¤å¼æ¯<literal>false</literal>ã</para> + <para>è¦ç»æä¸ä¸ªé群ï¼æ¯ä¸ªèç¹é½è¦å¨å ¶æ ¸å¿é ç½®æ件<literal>hornetq-configuration.xml</literal> + ä¸å£°æ<emphasis>é群è¿æ¥</emphasis>ï¼ç¨æ¥å»ºç«ä¸é群ä¸å ¶å®èç¹çéè¿ ãæ¯ä¸¤ä¸ªèç¹é´é½æ¯éè¿å é¨çä¸ä¸ª + <emphasis>æ ¸å¿æ¡¥</emphasis>ï¼åè§<xref linkend="core-bridges" />ï¼è¿æ¥çãè¿äºè¿æ¥ç建ç«æ¯ + éæçï¼ï¼ä½ ä¸éè¦ä¸ºæ¯ä¸ªè¿æ¥æ¾å¼å°å£°æä¸ä¸ªæ¡¥ãé群è¿æ¥çä½ç¨æ¯å¨é群çå个èç¹é´è¿è¡è´è½½å¹³è¡¡ã</para> + <para>HornetQå¯ä»¥éç¨ä¸åçææç»ææ¥ç»æé群ãæ¬ç« åé¢å°è®²è¿°å ç§å¸¸ç¨çææç»æã</para> + <para>æ们è¿å°è®¨è®ºå®¢æ·ç«¯çè´è½½åè¡¡ï¼ï¼å®¢æ·ç«¯å¦ä½åè¡¡å ¶ä¸é群åèç¹çè¿æ¥ï¼ä»¥åæ¶æ¯çååé ï¼ï¼å¨èç¹é´åç + çåé æ¶æ¯ä»¥é¿å æ¶æ¯å®ä¹ï¼starvationï¼ã</para> + <para>æ¬ç« è¿æ¶åé群çå¦ä¸ä¸ªéè¦æ¹é¢ï¼ï¼<emphasis>æå¡å¨åç°</emphasis>ï¼å³æå¡å¨éè¿å¹¿æçæ¹å¼å° + èªå·±çè¿æ¥ä¿¡æ¯åè¯å®¢æ·ç«¯æå ¶å®æå¡å¨ï¼ä»¥ä½¿å®ä»¬è½ä¸å ¶å»ºç«è¿æ¥ï¼ä¸éè¦é¢å¤çé ç½®ã</para> + </section> + <section id="clusters.server-discovery"> + <title>æå¡å¨åç°</title> + <para>æå¡å¨åç°æ¯ææå¡å¨éè¿å¹¿æçæ¹å¼å°èªå·±çè¿æ¥è®¾ç½®åéå°ç½ç»ä¸çæºå¶ï¼å®æ两个ç®çï¼</para> + <itemizedlist> + <listitem> + <para>被æ¶æ¯å®¢æ·ç«¯åç°ã客æ·ç«¯æ¥å°å¹¿æåå¯ä»¥ç¥éé群ä¸æåªäºæå¡å¨å¤äºå·¥ä½ç¶æ以åå¦ä½ä¸å®ä»¬ + 建ç«è¿æ¥ãè½ç¶å®¢æ·ç«¯<emphasis>å¯ä»¥</emphasis>å¯ä»¥å¨åå§åæ¶æ¥åä¸ä¸ªé群æå¡å¨çåè¡¨ï¼ + ä½æ¯è¿æ ·åä¸å¹¿ææ¹å¼ç¸æ¯ä¸å¤çµæ´»ãæ¯å¦é群ä¸ææå¡å¨ç¦»å¼ææ°å å ¥æ¶ï¼å表çæ¹å¼ä¸è½åæ¶æ´æ°è¿äºä¿¡æ¯ã</para> + </listitem> + <listitem> + <para>è¢«å ¶å®æå¡å¨åç°ãéè¿å¹¿æï¼æå¡å¨ä¹é´å¯ä»¥èªå¨å»ºç«å½¼æ¤é´çè¿æ¥ï¼ä¸éè¦äºå ç¥éé群ä¸å ¶å® + æå¡å¨çä¿¡æ¯ã</para> + </listitem> + </itemizedlist> + <para>æå¡å¨åç°ä½¿ç¨<ulink url="http://en.wikipedia.org/wiki/User_Datagram_Protocol" + >UDP</ulink>åè®®æ¥å¹¿æè¿æ¥è®¾ç½®ãå¦æç½ç»ä¸UDPè¢«å ³éï¼åä¸è½ä½¿ç¨æå¡å¨åç°åè½ãåªæç¨æ¾å¼ + å°æå®æå¡å¨çæ¹æ³æ¥è®¾ç½®é群æé群ç客æ·ç«¯ã</para> + <section id="clusters.broadcast-groups"> + <title>广æç»</title> + <para>æå¡å¨ä»¥å¹¿æç»çæ¹å¼æ¥å¹¿æå®çè¿æ¥å¨ä¿¡æ¯ãè¿æ¥å¨å®ä¹äºå¦ä½ä¸è¯¥æå¡å¨å»ºç«è¿æ¥çä¿¡æ¯ãå ³äºè¿æ¥å¨æ´å¤ç + 解éï¼è¯·åè§<xref linkend="configuring-transports" />ã</para> + <para>广æç»å æ¬äºä¸ç³»åçè¿æ¥å¨å¯¹ãæ¯ä¸ªè¿æ¥å¨å¯¹ç±ä¸»æå¡å¨çè¿æ¥å¨åå¤ä»½ï¼å¯éï¼æå¡å¨è¿æ¥å¨ä¿¡æ¯ç»æã + 广æç»è¿å®ä¹äºæ使ç¨çUDPçå¨åå端å£ä¿¡æ¯ã</para> + <para>广æç»çé ç½®ä¸æå¡å¨é ç½®æ件<literal + >hornetq-configuration.xml</literal>ä¸ãä¸ä¸ªHornetQæå¡å¨å¯ä»¥æå¤ä¸ªå¹¿æç»ãææç广æç» + å¿ éå®ä¹å¨<literal>broadcast-groups</literal>å ã</para> + <para>让æ们æ¥çä¸ä¸ª<literal>hornetq-configuration.xml</literal>æ件ä¸å¹¿æç»çä¾åï¼</para> + <programlisting><broadcast-groups> + <broadcast-group name="my-broadcast-group"> + <local-bind-address>172.16.9.3</local-bind-address> + <local-bind-port>54321</local-bind-port> + <group-address>231.7.7.7</group-address> + <group-port>9876</group-port> + <broadcast-period>2000</broadcast-period> + <connector-ref connector-name="netty-connector" + backup-connector="backup-connector"/> + </broadcast-group> +</broadcast-groups></programlisting> + <para>æäºå¹¿æç»çåæ°æ¯å¯éçï¼é常æ åµä¸å¯ä»¥ä½¿ç¨é»è®¤å¼ãå¨ä¸é¢ä¾åä¸æ们为äºè¯´æç®çç»åºäºè¿äºåæ°ã + ä¸é¢æ¯è¿äºåæ°ç说æï¼</para> + <itemizedlist> + <listitem> + <para><literal>name</literal>ãæ¯ä¸ªå¹¿æç»éè¦æä¸ä¸ªå¯ä¸çååã</para> + </listitem> + <listitem> + <para><literal>local-bind-address</literal>ãè¿ä¸ªåæ°æ¯å¥æ¥åçæ¬å°ç»å®å°åãå¦æå¨æå¡å¨ + ä¸æå¤ä¸ªç½ç»æ¥å£å¡æ¶ï¼å¿ é¡»è¦æå®ä½¿ç¨çæ¯åªä¸ªæ¥å£ãå¦æè¿ä¸ªåæ°æ²¡ææå®ï¼é£ä¹å°ä½¿ç¨ç³»ç»å æ ¸ + æéå®çIPå°åã</para> + </listitem> + <listitem> + <para><literal>local-bind-port</literal>ãè¿ä¸ªåæ°æå®äºå¥æ¥åçæ¬å°ç»å®ç«¯å£ãé常æ åµä¸ + å¯ä»¥ä½¿ç¨å ¶é»è®¤å¼<literal>-1</literal>ï¼è¡¨ç¤ºä½¿ç¨éæºç端å£ãè¿ä¸ªåæ°æ»æ¯å + <literal>local-bind-address</literal>ä¸èµ·å®ä¹ã</para> + </listitem> + <listitem> + <para><literal>group-address</literal>ãè¿ä¸ªåæ°æå®çæ¯å¹¿æå°åãå®æ¯ä¸ä¸ªDç±»çIPå°åï¼ + åå¼èå´æ¯<literal>224.0.0.0</literal>å°<literal>239.255.255.255</literal>ã + å°å<literal>224.0.0.0</literal>æ¯ä¿çå°åï¼æ以ä¸è½ä½¿ç¨ãè¿ä¸ªåæ°æ¯å¿ éæå®ã</para> + </listitem> + <listitem> + <para><literal>group-port</literal>ãè¿ä¸ªåæ°è®¾å®å¹¿æçUDP端å£ã + æ¯ä¸ä¸ªå¿ éæå®çåæ°ã</para> + </listitem> + <listitem> + <para><literal>broadcast-period</literal>ãæå®ä¸¤æ¬¡å¹¿æä¹é´çæ¶é´é´éï¼åä½æ¯«ç§ã + è¿æ¯ä¸ä¸ªå¯éåæ°ï¼å®çé»è®¤å¼æ¯<literal>1000</literal>毫ç§ã</para> + </listitem> + <listitem> + <para><literal>connector-ref</literal>ãè¿ä¸ªåæ°æå®äºè¦å¹¿æçè¿æ¥å¨ä»¥åå¯éçå¤ä»½è¿æ¥å¨ã + ï¼åè§<xref linkend="configuring-transports" />ï¼ã + <literal>connector-name</literal>å±æ§çå¼æ¯è¿æ¥å¨çååï¼ + <literal>backup-connector</literal>å±æ§æ¯å¤ä»½è¿æ¥å¨çååï¼æ¯å¯éå±æ§ã</para> + </listitem> + </itemizedlist> + </section> + <section id="clusters.discovery-groups"> + <title>åç°ç»</title> + <para>广æç»è§å®äºå¦ä½å¹¿æè¿æ¥å¨çä¿¡æ¯ï¼åç°ç»åå®ä¹çå¦ä½æ¥æ¶è¿æ¥å¨çä¿¡æ¯ã</para> + <para>ä¸ä¸ªåç°ç»å æ¬äºä¸ç³»åçè¿æ¥å¨å¯¹ï¼ï¼æ¯ä¸ªè¿æ¥å¨å¯¹ä»£è¡¨ä¸ä¸ªä¸åçæå¡å¨å¹¿æçè¿æ¥å¨ä¿¡æ¯ãæ¯å½æ¥æ¶ä¸æ¬¡å¹¿æï¼ + è¿ä¸ªè¿æ¥å¯¹çå表就被æ´æ°ä¸æ¬¡ã</para> + <para>å¦æå¨ä¸å®æ¶é´å 没ææ¶å°æ个æå¡å¨ç广æï¼åå ¶ç¸åºçè¿æ¥å¨å¯¹å°ä»å表ä¸å é¤ã</para> + <para>åç°ç»å¨HornetQä¸æ两å¤åºç¨ï¼</para> + <itemizedlist> + <listitem> + <para>å¨å建é群è¿æ¥æ¶ç¨æ¥å¤æé群ä¸åªäºæå¡å¨æ¯å¯ä»¥è¿æ¥çã</para> + </listitem> + <listitem> + <para>客æ·ç«¯ç¨æ¥åç°åªäºæå¡å¨å¯ä»¥è¿æ¥ã</para> + </listitem> + </itemizedlist> + </section> + <section> + <title>å¨æå¡å¨ç«¯å®ä¹åç°ç»ã</title> + <para>æå¡å¨ç«¯çåç°ç»å®ä¹å¨<literal>hornetq-configuration.xml</literal>é ç½®æ件ä¸ãææçåç°ç»é½å¿ é¡» + å¨<literal>discovery-groups</literal>å å®ä¹ãåç°ç»å¯ä»¥å®ä¹å¤ä¸ªã请çä¸é¢çä¾åï¼</para> + <programlisting><discovery-groups> + <discovery-group name="my-discovery-group"> + <local-bind-address>172.16.9.7</local-bind-address> + <group-address>231.7.7.7</group-address> + <group-port>9876</group-port> + <refresh-timeout>10000</refresh-timeout> + </discovery-group> +</discovery-groups></programlisting> + <para>ä¸é¢æ¯å¯¹æ¯ä¸ªåæ°ç解éï¼</para> + <itemizedlist> + <listitem> + <para><literal>name</literal>å±æ§ãæ¯ä¸ªåç°ç»é½å¿ é¡»æä¸ä¸ªå¯ä¸çååã</para> + </listitem> + <listitem> + <para><literal>local-bind-address</literal>ãå¦æä½ ç主æºæå¤ä¸ªç½ç»æ¥å£ï¼ä½ å¯è½å¸æåç°ç»åªçå¬ä¸ä¸ªæå®ç + ç½ç»æ¥å£ãè¿ä¸ªåæ°å°±å¯ä»¥ç¨äºè¿ä¸ªç®çãå®æ¯ä¸ä¸ªå¯éåæ°ã</para> + </listitem> + <listitem> + <para><literal>group-address</literal>ãéè¦çå¬ç广æå°åãå®éè¦ä¸å¹¿æç»ç + <literal>group-address</literal>ä¸è´æå¯ä»¥æ¶å°å¹¿æç»çä¿¡æ¯ãè¿æ¯ä¸ä¸ªå¿ è¦åæ°ã</para> + </listitem> + <listitem> + <para><literal>group-port</literal>ãéè¦çå¬çUDP端å£ãå®éè¦ä¸å¹¿æç»ç + <literal>group-port</literal>å¼ç¸åæå¯ä»¥æ¶å°å¹¿æç»çä¿¡æ¯ãè¿æ¯ä¸ä¸ªå¿ è¦åæ°ã</para> + </listitem> + <listitem> + <para><literal>refresh-timeout</literal>ãè¿ä¸ªåæ°å³å®äºå¨æ¶å°æ个æå¡å¨ç广æåï¼éè¦çå¾ + å¤é¿æ¶é´ä¸ä¸æ¬¡å¹¿æå¿ é¡»æ¶å°ï¼å¦åå°è¯¥æå¡å¨çè¿æ¥å¨å¯¹ä»å表ä¸å é¤ãé常è¿ä¸ªåæ°çå¼åºè¯¥è¿å¤§äº + 广æç»ç<literal>broadcast-period</literal>ï¼å¦åä¼ä½¿æå¡å¨ä¿¡æ¯ç±äºå°çæ¶é´å·®å¼è丢失ã + è¿ä¸ªåæ°æ¯å¯éçï¼å®çé»è®¤å¼æ¯<literal>10000</literal>毫ç§ï¼10ç§ï¼ã</para> + </listitem> + </itemizedlist> + </section> + <section id="clusters-discovery.groups.clientside"> + <title>客æ·ç«¯çåç°ç»</title> + <para>ç°å¨è®¨è®ºå¦ä½é ç½®HornetQ客æ·ç«¯æ¥åç°å¯ä»¥è¿æ¥çæå¡å¨å表ã使ç¨JMSæ¶æç¨çæ¹æ³ä¸ä½¿ç¨æ ¸å¿æ¥å£æ¶æç¨ç + æ¹æ³ææä¸åã</para> + <section> + <title>使ç¨JMSæ¶å®¢æ·ç«¯åç°çé ç½®æ¹æ³</title> + <para>å¦æ使ç¨JMSï¼å¹¶ä¸å¨æå¡å¨ç«¯çJMSè¿æ¥å·¥åæ¯æ³¨åå°JNDIçæ åµä¸ï¼ä½ å¯ä»¥å¨æå¡å¨ç«¯çé ç½®æ件 + <literal>hornetq-jms.xml</literal>ä¸æå®è¿æ¥å·¥åæç¨çåç°ç»ãå¦ä¸é¢æ示ï¼</para> + <programlisting><connection-factory name="ConnectionFactory"> + <discovery-group-ref discovery-group-name="my-discovery-group"/> + <entries> + <entry name="ConnectionFactory"/> + </entries> +</connection-factory></programlisting> + <para>å ¶ä¸<literal>discovery-group-ref</literal>çå¼æ¯å®ä¹å¨ + <literal>hornetq-configuration.xml</literal>æ件ä¸çä¸ä¸ªåç°ç»ã</para> + <para>å½è¿æ¥å·¥åä»JNDIä¸è½½å°å®¢æ·ç«¯æ¶ï¼ä½¿ç¨å®å建è¿æ¥å°±ä¼å¨å表ä¸çæå¡å¨é´è¿è¡è´è½½åè¡¡ã + 客æ·ç«¯éè¿çå¬åç°ç»ä¸ç广æå°åå¯ä»¥ä¸ææ´æ°è¿ä¸ªæå¡å¨å表ã</para> + <para>å¦æ使ç¨JMSä½æ¯ä¸ç¨JNDIï¼èæ¯ç´æ¥å®ä¾åJMSçè¿æ¥å·¥åçè¯ï¼å¯ä»¥ç¨éå½çæ¹æ³æ¥è®¾ç½®åç°ç»çå个 + åæ°ãå¦ä¸æ示ï¼<programlisting>final String groupAddress = "231.7.7.7"; + +final int groupPort = 9876; + +ConnectionFactory jmsConnectionFactory = + HornetQJMSClient.createConnectionFactory(groupAddress, groupPort); + +Connection jmsConnection1 = jmsConnectionFactory.createConnection(); + +Connection jmsConnection2 = jmsConnectionFactory.createConnection();</programlisting></para> + <para><literal>refresh-timeout</literal>åæ°å¯ä»¥ç´æ¥å¨è¿æ¥å·¥åä¸ä½¿ç¨ + <literal>setDiscoveryRefreshTimeout()</literal>æ¹æ³è®¾ç½®ã</para> + <para>è¿æ¥å·¥åè¿æä¸ä¸ªæ¹æ³<literal>setDiscoveryInitialWaitTimeout()</literal>ãå®å¯ä»¥è®¾ç½®è¿æ¥å·¥åç + åå§çå¾ æ¶é´ãå½ä¸ä¸ªè¿æ¥å·¥å被å建åç«å³è¿è¡ç¨äºå建è¿æ¥çè¯ï¼è¿æ¥å·¥åå¯è½æ²¡æ足å¤çæ¶é´æ¥æ¥æ¶å + 个æå¡å¨ååºç广æä¿¡æ¯ï¼ä¹å°±æ æ³å»ºç«å®æ´çæå¡å¨å表ãæäºè¿ä¸ªåæ°ï¼è¿æ¥å·¥åä¼å¨é¦æ¬¡å建è¿æ¥æ¶ + çå¾ ä¸å®çæ¶é´ï¼ä»¥æ¥æ¶å¹¿æãé»è®¤å¼æ¯<literal>10000</literal>毫ç§ã</para> + </section> + <section> + <title>使ç¨æ ¸å¿APIç客æ·ç«¯çé ç½®</title> + <para>å¦æ使ç¨æ ¸å¿æ¥å£ç´æ¥å建<literal>ClientSessionFactory</literal>çå®ä¾ï¼å¯ä»¥ä½¿ç¨ç¸åºçæ¹æ³ + ç´æ¥è¿è¡åæ°ç设置ï¼å¦ï¼ + <programlisting> + final String groupAddress = "231.7.7.7"; + final int groupPort = 9876; + SessionFactory factory = HornetQClient.createClientSessionFactory(groupAddress, groupPort); + ClientSession session1 = factory.createClientSession(...); ClientSession + session2 = factory.createClientSession(...); + + </programlisting> + </para> + <para>æ¹æ³<literal>setDiscoveryRefreshTimeout()</literal>å¯ä»¥ç¨æ¥ç´æ¥è®¾ç½®åæ° + <literal>refresh-timeout</literal>ã</para> + <para>ä¼è¯å·¥åè¿æä¸ä¸ªæ¹æ³<literal>setDiscoveryInitialWaitTimeout()</literal>ãå®å¯ä»¥è®¾ç½®ä¼è¯å·¥åç + åå§çå¾ æ¶é´ãå½ä¸ä¸ªä¼è¯å·¥å被å建åç«å³è¿è¡ç¨äºå建è¿æ¥çè¯ï¼è¯¥ä¼è¯å·¥åå¯è½æ²¡æ足å¤çæ¶é´æ¥æ¥æ¶å + 个æå¡å¨ååºç广æä¿¡æ¯ï¼ä¹å°±æ æ³å»ºç«å®æ´çæå¡å¨å表ãæäºè¿ä¸ªåæ°ï¼ä¼è¯å·¥åä¼å¨é¦æ¬¡å建è¿æ¥æ¶ + çå¾ ä¸å®çæ¶é´ï¼ä»¥æ¥æ¶å¹¿æãé»è®¤å¼æ¯<literal>10000</literal>毫ç§ã</para> + </section> + </section> + </section> + <section> + <title>æå¡å¨ç«¯æ¶æ¯çè´è½½åè¡¡</title> + <para>å¦æé群ååèç¹é´å®ä¹äºé群è¿æ¥ï¼HornetQå¯ä»¥å¯¹å°è¾¾ä¸ä¸ªèç¹çæ¶æ¯è¿è¡è´è½½åè¡¡ã</para> + <para>举ä¸ä¸ªç®åçä¾åãä¸ä¸ªé群æ4个èç¹ï¼åå«ç§°ä¸ºèç¹AãBãCåèç¹Dãå®ä»¬ç»æäºä¸ä¸ª + <emphasis>对称å¼é群</emphasis>ï¼æå ³å¯¹ç§°å¼é群åè§<xref linkend="symmetric-cluster" />ï¼ã + å¨æ¯ä¸ªèç¹ä¸é¨ç½²äºä¸ä¸ªå为<literal>OrderQueue</literal>çéåã</para> + <para>ä¸ä¸ªå®¢æ·ç«¯Caè¿æ¥å°èç¹A并åå ¶åé订åæ¶æ¯ã客æ·ç«¯PaãPbãPcåPdåå«è¿æ¥å°èç¹AãBãCåD并æ¥æ¶å¤ç + è¿äºè®¢åæ¶æ¯ãå¦æå¨èç¹Aä¸æ²¡æå®ä¹é群è¿æ¥ï¼é£ä¹è®¢åæ¶æ¯é½åéå°èç¹Aä¸çéå<literal>OrderQueue</literal> + ä¸ãå æ¤åªæè¿æ¥å°èç¹Aç客æ·ç«¯Paæè½æ¥æ¶å°è®¢åæ¶æ¯ã</para> + <para>å¦æå¨èç¹Aå®ä¹äºé群è¿æ¥çè¯ï¼åéå°èç¹Açæ¶æ¯è¢«è½®æµï¼round-robinï¼ä»èç¹Aåé å°å个èç¹ä¸ç + <literal>OrderQueue</literal>éåä¸ãè¿ç§æ¶æ¯åé å®å ¨å¨æå¡å¨ç«¯å®æï¼å®¢æ·ç«¯åªåèç¹Aåéæ¶æ¯ã</para> + <para>ä¾å¦å°è¾¾èç¹Açæ¶æ¯å¯è½ä»¥ä¸å顺åºè¿è¡åé ï¼BãDãCãAãBãDãCãAãBãDãå ·ä½ç顺åºåå³äºèç¹å¯å¨ç + å åï¼ä½æ¯å ¶ç®æ³æ¯ä¸åçï¼å³round-robinï¼ã</para> + <para>HornetQé群è¿æ¥å¨è¿è¡æ¶æ¯è´è½½åè¡¡æ¶ï¼å¯ä»¥é ç½®æç»ä¸è´è½½å衡模å¼ï¼å³ä¸ç®¡å个èç¹ä¸ææ åéçæ¥æ¶è ï¼ä¸å¾å¨ + ææèç¹é´è¿è¡æ¶æ¯çåé ãä¹å¯ä»¥é ç½®æ为æºè½è´è½½å衡模å¼ï¼å³åªå°æ¶æ¯åé å°æåéæ¥æ¶è çèç¹ä¸ãè¿ä¸¤ç§æ¨¡å¼æ们 + é½å°ä¸¾ä¾è¯´æãé¦å æ们å ä»ç»ä¸è¬çé群è¿æ¥é ç½®ã</para> + <section id="clusters.cluster-connections"> + <title>é ç½®é群è¿æ¥</title> + <para>é群è¿æ¥å°ä¸ç»æå¡å¨è¿æ¥æ为ä¸ä¸ªé群ï¼æ¶æ¯å¯ä»¥å¨é群çèç¹ä¹é´è¿è¡è´è½½åè¡¡ãé群è¿æ¥çé ç½®å¨ + <literal>hornetq-configuration.xml</literal>æ件ä¸ç + <literal>cluster-connection</literal>å ãä¸ä¸ªHornetQæå¡å¨å¯ä»¥æé¶ä¸ªæå¤ä¸ªé群è¿æ¥ã + ä¸é¢æ¯ä¸ä¸ªå ¸åçä¾åï¼</para> + <programlisting> +<cluster-connections> + <cluster-connection name="my-cluster"> + <address>jms</address> + <retry-interval>500</retry-interval> + <use-duplicate-detection>true</use-duplicate-detection> + <forward-when-no-consumers>false</forward-when-no-consumers> + <max-hops>1</max-hops> + <discovery-group-ref discovery-group-name="my-discovery-group"/> + </cluster-connection> +</cluster-connections> + </programlisting> + <para>ä¸é¢ç»åºäºé群è¿æ¥çææå¯é ç½®åæ°ãå¨å®é åºç¨ä¸æäºä½ å¯ä»¥ä½¿ç¨é»è®¤å¼ï¼ä¸å¿ å ¨é¨ç»åºã</para> + <itemizedlist> + <listitem> + <para><literal>address</literal>ãæ¯ä¸ªé群è¿æ¥åªæå¡äºåéå°ä»¥è¿ä¸ªåæ°çå¼ä¸ºå¼å§ç + å°åçæ¶æ¯ã</para> + <para>æ¬ä¾ä¸çé群è¿æ¥åªå¯¹åå¾ä»¥<literal>jms</literal>为å¼å§çå°åçæ¶æ¯è¿è¡è´è½½åè¡¡ç + å¤çãè¿ä¸ªé群è¿æ¥å®é ä¸è½å¤å¤çææJMSéååè¯é¢ç订é ä¸çæ¶æ¯ï¼è¿æ¯å½ä¸ºææJMSçéå + æ订é é½æ å°å°å æ ¸ä¸ä»¥âjmsâå¼å¤´çéåã</para> + <para>è¿ä¸ªå°åå¯ä»¥ä¸ºä»»ä½å¼ï¼èä¸å¯ä»¥é ç½®å¤ä¸ªé群è¿æ¥ï¼æ¯ä¸ªè¿æ¥çå°åå¼å¯ä»¥ä¸åãè¿æ ·HornetQ + å¯ä»¥åæ¶å¯¹ä¸åå°ååæ¶è¿è¡æ¶æ¯çè´è½½åè¡¡ãæçå°åçè³å¯è½å¨å ¶å®é群çèç¹ä¸ãè¿ä¹å°±æè°ç + ä¸ä¸ªHornetQæå¡å¨å¯ä»¥åæ¶åä¸å°å¤ä¸ªé群ä¸ã</para> + <para>è¦æ³¨æå«é æå¤ä¸ªé群è¿æ¥çå°åäºç¸éå¤ãæ¯å¦ï¼å°åâeuropeâåâeurope.newsâå°±äºç¸éå¤ï¼ + å°±ä¼é æåä¸ä¸ªæ¶æ¯ä¼è¢«å¤ä¸ªé群è¿æ¥è¿è¡åé ï¼è¿æ ·æå¯è½åçéå¤ä¼ éã</para> + <para>æ¬åæ°æ¯å¿ é¡»æå®çã</para> + </listitem> + <listitem> + <para><literal>retry-interval</literal>ãå¦åæè¿°ï¼ä¸ä¸ªé群è¿æ¥å®é ä¸å¨å é¨æ¯ç¨æ¡¥å°ä¸¤ + 个èç¹è¿æ¥èµ·æ¥ãå¦æé群è¿æ¥å·²ç»å建ä½æ¯ç®çèç¹è¿æªå¯å¨ï¼ææ£å¨éå¯ï¼è¿æ¶é群è¿æ¥å°±ä¼ä¸æ + éè¯ä¸è¿ä¸ªèç¹çè¿æ¥ï¼ç´å°èç¹å¯å¨å®æ¯è¿æ¥æå为æ¢ã</para> + <para>è¿ä¸ªåæ°å³å®äºä¸¤æ¬¡éè¯ä¹é´çæ¶é´é´éï¼åä½æ¯æ¯«ç§ãå®ä¸æ¡¥çåæ°<literal>retry-interval</literal> + çå«ä¹ç¸åï¼åè§<xref linkend="core-bridges" />ï¼ã</para> + <para>è¿ä¸ªåæ°æ¯å¯éçï¼é»è®¤å¼æ¯<literal>500</literal>毫ç§ã</para> + </listitem> + <listitem> + <para><literal>use-duplicate-detection</literal>ãé群è¿æ¥ä½¿ç¨æ¡¥æ¥è¿æ¥åèç¹ï¼èæ¡¥å¯ä»¥ + éè¿é ç½®åæ¯ä¸ªè½¬åçæ¶æ¯æ·»å ä¸ä¸ªéå¤idçå±æ§ãå¦æç®çèç¹å´©æºå¹¶éå¯ï¼æ¶æ¯å¯ä»¥è¢«éæ°åéã + éå¤æ£æµçåè½å°±æ¯å¨è¿ç§æ åµä¸å°éå¤åéçæ¶æ¯è¿è¡è¿æ»¤å¹¶ä¸¢å¼ã</para> + <para>è¿ä¸ªåæ°ä¸æ¡¥çåæ°<literal + >use-duplicate-detection</literal>ç¸åãå ³äºéå¤æ£æµçæ´å¤ä¿¡æ¯ï¼è¯·åè§ + <xref linkend="duplicate-detection"/>ã</para> + <para>è¿åæ°æ¯å¯éçï¼é»è®¤å¼æ¯<literal>true</literal>ã</para> + </listitem> + <listitem> + <para><literal>forward-when-no-consumers</literal>ãè¿ä¸ªåæ°å³å®äºæ¯å¦å没æåéæ¥æ¶è + çèç¹åé æ¶æ¯ãå³ä¸ç®¡æ没æåéçæ¥æ¶è ï¼æ¶æ¯å¨ææçèç¹é´è½®æµåé ã</para> + <para>å¦æè¿ä¸ªåæ°è®¾ä¸º<literal>true</literal>ï¼åæ¶æ¯å°±ä¼è½®æµå¨æ¯ä¸ªèç¹é´åé ï¼ä¸ç®¡æ¯å¦ + èç¹ä¸æ没æç¸åºçæ¥æ¶è ï¼æè ææ¥æ¶è ä½æ¯å ·æä¸å¹é çéæ©å¨ï¼ã注æï¼å¦æå ¶å®èç¹ä¸æ²¡æ + ä¸æ¬èç¹ååçéåï¼HornetQä¸ä¼å°æ¶æ¯è½¬åå°é£äºèç¹ä¸å»ï¼ä¸åæ¬åæ°çéå¶ã</para> + <para>å¦æåæ°è®¾ä¸º<literal>false</literal>ï¼ HornetQä¸å°æ¶æ¯è½¬åå°é群ä¸é£äºæçéåæ¥æ¶è + çèç¹ä¸ãå¦ææ¥æ¶è æéæ©å¨ï¼åè³å°æä¸ä¸ªéæ©å¨ä¸æ转åçæ¶æ¯å¹é æå¯ï¼å¦åä¸è½¬åã</para> + <para>æ¬åæ°æ¯å¯éçï¼é»è®¤å¼æ¯<literal>false</literal>ã</para> + </listitem> + <listitem> + <para><literal>max-hops</literal>ãå½ä¸ä¸ªé群è¿æ¥å¨ç¡®å®è¿è¡æ¶æ¯è´è½½åè¡¡çèç¹ç»æ¶ï¼è¿äº + èç¹ä¸ä¸å®æ¯ä¸æ¬èç¹ç´æ¥ç¸è¿çèç¹ãHornetQå¯ä»¥éè¿å ¶å®HornetQèç¹ä½ä¸ºä¸ä»åé£äºéç´æ¥ç¸ + è¿çèç¹è½¬åæ¶æ¯ã</para> + <para>è¿æ ·å¯ä»¥ä½¿HornetQç»ææ´å å¤æçææç»æ并ä¸ä»å¯æä¾æ¶æ¯çè´è½½åè¡¡ãå¨æ¬ç« çåé¢æ们è¿è¦ä½ + è¿ä¸æ¥ç讨论ã</para> + <para>æ¬åæ°æ¯å¯éåæ°ï¼å®çé»è®¤å¼æ¯ <literal>1</literal>ï¼è¡¨ç¤ºæ¶æ¯åªåç´æ¥ç¸è¿çèç¹è¿è¡è´è½½åè¡¡ã</para> + </listitem> + <listitem> + <para><literal>discovery-group-ref</literal>ãè¿ä¸ªåæ°å³å®äºä½¿ç¨åªä¸ªåç°ç»æ¥è·å¾é群æå¡å¨çå表ã + é群è¿æ¥ä¸å表ä¸çæå¡å¨å»ºç«è¿æ¥ã</para> + </listitem> + </itemizedlist> + </section> + <section id="clusters.clusteruser"> + <title>é群ç¨æ·çå®å ¨ä¿¡æ¯</title> + + <para>å½é群ä¸ä¸¤ä¸ªèç¹å»ºç«è¿æ¥æ¶ï¼HornetQ使ç¨ä¸ä¸ªé群ç¨æ·åé群å¯ç ãå®ä»¬å®ä¹å¨ + <literal>hornetq-configuration.xml</literal>æ件ä¸ï¼</para> + <programlisting> + <cluster-user>HORNETQ.CLUSTER.ADMIN.USER</cluster-user> + <cluster-password>CHANGE ME!!</cluster-password> + </programlisting> + <warning><para>强ç建议å¨å®é åºç¨ä¸ä¸è¦ä½¿ç¨é»è®¤çå¼ï¼å¦åä»»æè¿ç¨å®¢æ·ç«¯ä¼ä½¿ç¨è¿äºé»è®¤å¼è¿æ¥å°æå¡å¨ä¸ãå½ä½¿ç¨é»è®¤å¼æ¶ï¼ + HornetQä¼æ£æµå°å¹¶å¨æ¯æ¬¡å¯å¨çæ¶åç»åºè¦åã</para></warning> + </section> + </section> + <section id="clusters.client.loadbalancing"> + <title>客æ·ç«¯è´è½½åè¡¡</title> + <para>HornetQç客æ·ç«¯è´è½½å衡使åä¸ä¸ªä¼è¯å·¥åæ¯æ¬¡å建ä¸ä¸ªä¼è¯æ¶ï¼é½è¿æ¥å°é群ä¸åçèç¹ä¸ãè¿æ ·å¯ä»¥ä½¿æçæä¼è¯ + åååå¸å¨é群çå个èç¹ä¸ï¼èä¸ä¼âæ¥æ¤âå°æä¸ä¸ªèç¹ä¸ã</para> + <para>客æ·ç«¯è´è½½åè¡¡ççç¥æ¯å¯é ç½®çãHornetQæä¾ä¸¤ç§ç°æçè´è½½åè¡¡çç¥ãä½ ä¹å¯ä»¥å®ç°èªå·±ççç¥ã</para> + <para>两ç§ç°æççç¥æ¯ï¼</para> + <itemizedlist> + <listitem> + <para>è½®æµçç¥ï¼Round Robinï¼ãè¿ä¸ªçç¥æ¯å éæºéæ©ä¸ä¸ªèç¹ä½ä¸ºç¬¬ä¸ä¸ªèç¹ï¼ç¶åä¾æ¬¡éæ©å个èç¹ã</para> + <para>ä¾å¦ä¸ä¸ªé¡ºåºå¯è½æ¯ B, C, D, A, B, C, D, A, Bï¼å¦ä¸ä¸ªä¹å¯è½æ¯ D, + A, B, C, Dï¼A, B, C, D, A æè C, D, A, B, C, D, A, B, C, D, Aççã</para> + </listitem> + <listitem> + <para>éæºçç¥ãæ¯æ¬¡é½æ¯éæºéæ©ä¸ä¸ªèç¹æ¥å»ºç«ä¼è¯ã</para> + </listitem> + </itemizedlist> + <para>ä½ å¯ä»¥å®ç°èªå·±ççç¥ãåªéè¦å®ç°æ¥å£<literal + >org.hornetq.api.core.client.loadbalance.ConnectionLoadBalancingPolicy</literal>å³å¯ã</para> + <para>æ ¹æ®ä½ 使ç¨çæ¯JMSè¿æ¯æ ¸å¿æ¥å£ï¼æå®è´è½½åè¡¡çæ¹æ³æ¯ææä¸åçãå¦æä½ ä¸æå®çç¥ï¼é»è®¤ççç¥æ¯<literal + >org.hornetq.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy</literal>.</para> + <para>å¦æ使ç¨çæ¯JMSï¼å¹¶ä¸JMSè¿æ¥å·¥å注åå°JNDIï¼åä½ éè¦å¨<literal>hornetq-jms.xml</literal>æ件ä¸å®ä¹çç¥ï¼å¦ï¼ + <programlisting> +<connection-factory name="ConnectionFactory"> + <discovery-group-ref discovery-group-name="my-discovery-group"/> + <entries> + <entry name="ConnectionFactory"/> + </entries> + <connection-load-balancing-policy-class-name> + org.hornetq.api.core.client.loadbalance.RandomConnectionLoadBalancingPolicy + </connection-load-balancing-policy-class-name> +</connection-factory> + </programlisting>ä¸é¢çé ç½®å°é¨ç½²ä¸ä¸ªè¿æ¥å·¥åï¼å®çè¿æ¥è´è½½åè¡¡çç¥æ¯éæºçç¥ã</para> + <para>å¦æ使ç¨JMSï¼ä½æ¯ä½ å¨å®¢æ·ç«¯æ¯ç´æ¥å建è¿æ¥å·¥åçå®ä¾ï¼é£ä¹ä½ éè¦ç¨ç¸åºçæ¹æ³å¨<literal + >HornetQConnectionFactory</literal>ä¸ç´æ¥è®¾ç½®ï¼ + <programlisting> +ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(...); +jmsConnectionFactory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy"); + </programlisting></para> + <para>å¦æä½ ä½¿ç¨æ ¸å¿æ¥å£çè¯ï¼ä½ è¦ç´æ¥å¨<literal>ClientSessionFactory</literal>ä¸è®¾ç½®çç¥ï¼ + <programlisting> +ClientSessionFactory factory = HornetQClient.createClientSessionFactory(...); +factory.setLoadBalancingPolicyClassName("com.acme.MyLoadBalancingPolicy"); + </programlisting></para> + <para>è¿æ¥å·¥åè¿è¡è´è½½åè¡¡çæå¡å¨ç»å¯ä»¥æ两ç§æ¹æ³æ¥ç¡®å®ï¼</para> + <itemizedlist> + <listitem> + <para>æ¾å¼æå®æå¡å¨</para> + </listitem> + <listitem> + <para>使ç¨åç°ç»åè½</para> + </listitem> + </itemizedlist> + </section> + <section> + <title>æ¾å¼æå®é群æå¡å¨</title> + <para>æçç½ç»å¹¶ä¸å¼æ¾UDPï¼æ以就ä¸è½ä½¿ç¨æå¡å¨åç°åè½æ¥è·åæå¡å¨å表ã</para> + <para>å¨è¿ç§æ åµä¸ï¼å¯ä»¥æ¾å¼å°å¨æ¯ä¸ªèç¹æ客æ·ç«¯æå®æå¡å¨çå表ãä¸é¢ä»ç»å¦ä½åï¼</para> + <section> + <title>å¨å®¢æ·ç«¯æå®æå¡å¨å表</title> + <para>æ ¹æ®ä½¿ç¨çæ¯JMSè¿æ¯æ ¸å¿æ¥å£ï¼æç¨çæ¹æ³ä¹ä¸åã</para> + <section> + <title>使ç¨JMSæ¶æå®æå¡å¨å表</title> + <para>å¦æ使ç¨JMSï¼å¹¶ä¸JMSè¿æ¥å·¥åæ¯æ³¨åå°JNDIçè¯ï¼ä½ éè¦å¨æå¡å¨ç«¯çé ç½®æ件 + <literal>hornetq-jms.xml</literal>ä¸æ¥æå®ï¼å¦ä¸é¢çä¾åï¼</para> + <programlisting><connection-factory name="ConnectionFactory"> + <connectors> + <connector-ref connector-name="my-connector1" + backup-connector-name="my-backup-connector1"/> + <connector-ref connector-name="my-connector2" + backup-connector-name="my-backup-connector2"/> + <connector-ref connector-name="my-connector3" + backup-connector-name="my-backup-connector3"/> + </connectors> + <entries> + <entry name="ConnectionFactory"/> + </entries> +</connection-factory></programlisting> + <para>å ¶ä¸ç<literal>connection-factory</literal>å å¯ä»¥å å«é¶æå¤ä¸ª + <literal>connector-ref</literal>ãæ¯ä¸ª<literal>connector-ref</literal> + é½æ¥æ<literal>connector-name</literal>å±æ§åä¸ä¸ªå¯éç<literal + >backup-connector-name</literal>å±æ§ã<literal + >connector-name</literal> å±æ§æåçæ¯ä¸ä¸ªå¨<literal>hornetq-configuration.xml</literal> + æ件ä¸å®ä¹çè¿æ¥å¨ãè<literal>backup-connector-name</literal>å±æ§ä¹æ¯æåå¨ + <literal>hornetq-configuration.xml</literal>æ件ä¸å®ä¹çä¸ä¸ªè¿æ¥å¨ã + æå ³è¿æ¥å¨æ´å¤çä¿¡æ¯åè§<xref linkend="configuring-transports" />ã</para> + <para>è¿æ¥å·¥åè¿æ ·å°±ä¿åæä¸ç»[è¿æ¥å¨, å¤ä»½è¿æ¥å¨]对ï¼ç¨äºå®¢æ·ç«¯å¨å建è¿æ¥æ¶çè´è½½åè¡¡ã</para> + <para>å¦æä½ ä½¿ç¨JMSï¼ä½ä¸ä½¿ç¨JNDIï¼ä½ å¯ä»¥ç´æ¥å建<literal>HornetQConnectionFactory</literal> + çå®ä¾ï¼ç¶åç¨ç¸åºçæ¹æ³æ¥è®¾å®è¿æ¥å¨å¯¹å表ï¼å¦ä¸ä¾ï¼<programlisting>List<Pair<TransportConfiguration, TransportConfiguration>> serverList = + new ArrayList<Pair<TransportConfiguration, TransportConfiguration>>(); + +serverList.add(new Pair<TransportConfiguration, + TransportConfiguration>(liveTC0, backupTC0)); +serverList.add(new Pair<TransportConfiguration, + TransportConfiguration>(liveTC1, backupTC1)); +serverList.add(new Pair<TransportConfiguration, + TransportConfiguration>(liveTC2, backupTC2)); + +ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(serverList); + +Connection jmsConnection1 = jmsConnectionFactory.createConnection(); + +Connection jmsConnection2 = jmsConnectionFactory.createConnection();</programlisting></para> + <para>ä¸é¢ç代ç ä¸æ们å建äºä¸ç»<literal>TransportConfiguration</literal>对象ãæ¯ä¸ª + <literal>TransportConfiguration</literal>对象å æ¬äºå¦ä½è¿æ¥æ个ç¹å®æå¡å¨çä¿¡æ¯ã</para> + <para>ç¶åï¼ä½¿ç¨è¿ä¸ªæå¡å¨å表å建äºä¸ä¸ª<literal>HornetQConnectionFactory</literal>å®ä¾ã + è¿æ ·éè¿è¿ä¸ªå·¥åå建çè¿æ¥å°±å¯ä»¥ä½¿ç¨è¿ä¸ªå表ï¼ç±æç¨ç客æ·è¿æ¥è´è½½åè¡¡çç¥æ¥è¿è¡è¿æ¥çè´è½½åè¡¡ã</para> + </section> + <section> + <title>使ç¨æ ¸å¿æ¥å£æå®æå¡å¨å表</title> + <para>å¦æ使ç¨æ ¸å¿æ¥å£ï¼ä½ å¯ä»¥ç´æ¥å¨<literal>ClientSessionFactory</literal>å®ä¾ä¸è®¾ç½®æå¡å¨å表ã + å¦ä¸ä¾ï¼</para> + <programlisting>List<Pair<TransportConfiguration, TransportConfiguration>> serverList = + new ArrayList<Pair<TransportConfiguration, TransportConfiguration>>(); + +serverList.add(new Pair<TransportConfiguration, + TransportConfiguration>(liveTC0, backupTC0)); +serverList.add(new Pair<TransportConfiguration, + TransportConfiguration>(liveTC1, backupTC1)); +serverList.add(new Pair<TransportConfiguration, + TransportConfiguration>(liveTC2, backupTC2)); + +ClientSessionFactory factory = HornetQClient.createClientSessionFactory(serverList); + +ClientSession sesison1 = factory.createClientSession(...); + +ClientSession session2 = factory.createClientSession(...);</programlisting> + <para>å¨ä¸é¢ç代ç ä¸æ们å建äºä¸ç»<literal>ClientSessionFactoryImpl</literal>对象ãæ¯ä¸ª + <literal>TransportConfiguration</literal>对象å æ¬äºå¦ä½è¿æ¥æ个ç¹å®æå¡å¨çä¿¡æ¯ã + æå ³ä¿¡æ¯è¯·åè§<xref linkend="configuring-transports" />ã</para> + <para>ç¶åï¼ä½¿ç¨è¿ä¸ªæå¡å¨å表å建äºä¸ä¸ª<literal>HornetQConnectionFactory</literal>å®ä¾ã + è¿æ ·éè¿è¿ä¸ªå·¥åå建çä¼è¯å°±å¯ä»¥ä½¿ç¨è¿ä¸ªå表ï¼ç±æç¨ç客æ·è¿æ¥è´è½½åè¡¡çç¥æ¥è¿è¡è¿æ¥çè´è½½åè¡¡ã</para> + </section> + </section> + <section id="clusters.static.servers"> + <title>æå®æå¡å¨å表以ç»æé群</title> + <para>ä¸é¢æ们èèä¸ä¸ªå¯¹ç§°é群çä¾åï¼æ们é ç½®äºæ¯ä¸ªé群è¿æ¥ï¼ä½æ¯ä¸ä½¿ç¨åç°åè½æ¥è·å¾æå¡å¨ä¿¡æ¯ãæ们 + éç¨é ç½®çæ¹æ³æ¥æ¾å¼æå®é群çæææåã</para> + <para>ä¸é¢å°±æ¯ä¸ä¸ªé群è¿æ¥çé ç½®ï¼</para> + <programlisting><cluster-connections> + <cluster-connection name="my-explicit-cluster"> + <address>jms</address> + <connector-ref connector-name="my-connector1" + backup-connector-name="my-backup-connector1"/> + <connector-ref connector-name="my-connector2" + backup-connector-name="my-backup-connector2"/> + <connector-ref connector-name="my-connector3" + backup-connector-name="my-backup-connector3"/> + </cluster-connection> +</cluster-connections></programlisting> + <para><literal>cluster-connection</literal>ä¸å¯ä»¥å æ¬é¶æå¤ä¸ª<literal>connector-ref</literal>, + æ¯ä¸ª<literal>connector-ref</literal>é½æä¸ä¸ª<literal>connector-name</literal>å±æ§å + ä¸ä¸ªå¯éç<literal>backup-connector-name</literal>å±æ§ã<literal + >connector-name</literal>å±æ§æåä¸ä¸ªå¨<literal + >hornetq-configuration.xml</literal>æ件ä¸å®ä¹çä¸ä¸ªè¿æ¥å¨ï¼å®æ¯ä¸»è¿æ¥å¨ãå¯éç + <literal>backup-connector-name</literal>æåçä¹æ¯å¨ + <literal>hornetq-configuration.xml</literal>æ件ä¸å®ä¹çä¸ä¸ªè¿æ¥å¨ã + æå ³è¿æ¥å¨ç详ç»ä¿¡æ¯åè§<xref linkend="configuring-transports" />ã</para> + <note> + <para>ç±äºHornetQ 2.0.0çéå¶ï¼ä½¿ç¨éæèç¹å表çé群ä¸æ¯æ失æå¤æ´ï¼failoverï¼ãè¦æ³æ¯æ失æå¤æ´ï¼ + å°±å¿ é¡»ä½¿ç¨åç°ç»ã</para> + </note> + </section> + </section> + <section id="clusters.message-redistribution"> + <title>æ¶æ¯ååé </title> + <para>é群çå¦ä¸ä¸ªéè¦åè½æ¯æ¶æ¯çååé ãåé¢æ们ç¥éå¨æå¡å¨ç«¯å¯ä»¥å¯¹æ¶æ¯å¤§é群èç¹é´è¿è¡è½®æµæ¹å¼çè´è½½åè¡¡ãå¦æ + <literal>forward-when-no-consumers</literal>åæ°ä¸ºfalseï¼æ¶æ¯å°ä¸ä¼è½¬åå°é£äºæ²¡æç¸åºæ¥æ¶è çèç¹ä¸ã + è¿æ ·å¯ä»¥ææé¿å äºæ¶æ¯è¢«éå°ä¸ä¸ªä¸å¯è½è¢«æ¥æ¶çèç¹ä¸ãä½ä»ç¶æä¸ä¸ªé®é¢æ æ³è§£å³ï¼å°±æ¯å¦æå¨æ¶æ¯åå°ä¸ä¸ªèç¹åï¼ + å®çæ¥æ¶è è¢«å ³éï¼é£ä¹è¿äºæ¶æ¯ä»ç¶ä¸è½è¢«æ¥æ¶äºï¼é æäºä¸ç§æ¶æ¯<emphasis>å®ä¹</emphasis>æ å½¢ã + è¿ç§æ åµä¸å¦ä½å¤çï¼</para> + <para>è¿éå°±éè¦æ¶æ¯ååé åè½ãéè¿é ç½®ï¼HornetQå¯ä»¥å°æ²¡ææ¥æ¶è çéåä¸çæ¶æ¯<emphasis>å次åé </emphasis> + å°ææ¥æ¶è çèç¹ä¸å»ã</para> + <para>éè¿é ç½®ï¼æ¶æ¯å¯ä»¥å¨éåæåä¸ä¸ªæ¥æ¶è å ³éæ¶ç«å³è¿è¡ï¼ä¹å¯ä»¥é ç½®æçå¾ ä¸æ®µæ¶é´åè¿è¡ãé»è®¤æ¶æ¯ååé åè½æ¯ + å ³éçã</para> + <para>æ¶æ¯ååé åè½å¯ä»¥åºäºå°åè¿è¡é ç½®ï¼å³å¨å°å设置ä¸æå®ååé ç延æ¶ãå ³äºå°å设置çæ´å¤ä¿¡æ¯ï¼è¯·åè§ + <xref linkend="queue-attributes" />ã</para> + <para>ä¸é¢æ¯ä»<literal>hornetq-configuration.xml</literal>æ件ä¸æåçæ¶æ¯ååé çé ç½®ï¼</para> + <programlisting><address-settings> + <address-setting match="jms.#"> + <redistribution-delay>0</redistribution-delay> + </address-setting> + </address-settings></programlisting> + <para>ä¸é¢<literal>address-settings</literal>ä¸è®¾ç½®ç<literal + >redistribution-delay</literal>å¼ä¸º<literal>0</literal>ãå®éç¨äºææ以âjmsâå¼å¤´ç + å°åãç±äºææJMSéåä¸è¯é¢è®¢é é½ç»å®å°ä»¥âjmsâ为å¼å¤´çå°åï¼æ以ä¸è¿°é ç½®çç«å³æ¹å¼ï¼æ²¡æ延è¿ï¼æ¶æ¯ + ååé éç¨äºææçJMSéååè¯é¢è®¢é ã</para> + <para><literal>match</literal>å±æ§å¯ä»¥æ¯ç²¾ç¡®å¹é ï¼ä¹å¯ä»¥ä½¿ç¨éé 符ãéé 符è¦ç¬¦åHornetQçéé 符 + è¯æ³ï¼å¨<xref linkend="wildcard-syntax" + />ä¸æè¿°ï¼ã</para> + <para><literal>redistribution-delay</literal>å®ä¹äºéåæåä¸ä¸ªæ¥æ¶è å ³éåå¨è¿è¡æ¶æ¯ååé åæçå¾ ç + æ¶é´ï¼åä½æ¯«ç§ãå¦æå ¶å¼æ¯0ï¼è¡¨ç¤ºç«å³è¿è¡æ¶æ¯ååé ã<literal>-1</literal>表示ä¸ä¼è¿è¡æ¶æ¯ååé ã + é»è®¤å¼æ¯<literal>-1</literal>ã</para> + <para>é常为æ¶æ¯åé å®ä¹ä¸ä¸ªå»¶è¿æ¯æå®é æä¹çãå¾å¤æ¶åå½ä¸ä¸ªæ¥æ¶è è¢«å ³éæ¶ï¼å¾å¿«å°±ä¼æä¸ä¸ªæ°çæ¥æ¶è 被å建ã + å¨è¿ç§æ åµä¸å ä¸å»¶è¿å¯ä»¥ä½¿æ¶æ¯ç»§ç»å¨æ¬å°è¿è¡æ¥æ¶ï¼èä¸ä¼å°æ¶æ¯è½¬åå°å«å¤ã</para> + </section> + <section> + <title>é群ææç»æ</title> + <para>HornetQé群å¯ä»¥æå¤ç§ææç»æãæ们æ¥ç两个æ常è§çç»æã</para> + <section id="symmetric-cluster"> + <title>对称å¼é群</title> + <para>对称å¼é群å¯è½æ¯æ常è§çé群æ¹å¼äºãå¦æä½ æ¥è§¦è¿JBossåºç¨æå¡å¨çé群ï¼ä½ 就对è¿ç§æ¹å¼å¾çæã</para> + <para>å¨ä¸ä¸ªå¯¹ç§°é群ä¸ï¼æ¯ä¸ä¸ªèç¹é½ä¸é群ä¸å ¶å®ä»»ä¸èç¹ç¸è¿ãæ¢å¥è¯è¯´ï¼é群ä¸ä»»æ两个èç¹çè¿æ¥é½ + åªæä¸è·³ï¼hopï¼ã</para> + <para>è¦ç»æä¸ä¸ªå¯¹ç§°å¼çé群ï¼æ¯ä¸ªèç¹å¨å®ä¹é群è¿æ¥æ¶è¦å°å±æ§<literal>max-hops</literal> + 设为<literal>1</literal>ãé常é群è¿æ¥å°ä½¿ç¨æå¡å¨åç°çåè½æ¥è·å¾é群ä¸å ¶å®æå¡å¨çè¿æ¥ + ä¿¡æ¯ãå½ç¶å¨UDPä¸å¯ç¨çæ¶åï¼ä¹å¯ä»¥éè¿æ¾å¼æ¹å¼ä¸ºé群è¿æ¥æå®æå¡å¨ã</para> + <para>å¨å¯¹ç§°é群ä¸ï¼æ¯ä¸ªæå¡å¨é½ç¥éé群ä¸å ¶å®æå¡å¨ä¸çææéåä¿¡æ¯ï¼ä»¥åå®ä»¬çæ¥æ¶è ä¿¡æ¯ãå©ç¨è¿äº + ä¿¡æ¯å®å¯ä»¥å³å®å¦ä½è¿è¡æ¶æ¯çè´è½½åè¡¡åæ¶æ¯ååé ã</para> + </section> + <section> + <title>é¾å¼é群</title> + <para>å¨é¾å¼é群ä¸ï¼å¹¶ä¸æ¯æ¯ä¸ªèç¹é½ä¸å ¶å®ä»»ä½èç¹ç´æ¥ç¸è¿ï¼èæ¯ç±ä¸¤ä¸ªèç¹ç»æ头åå°¾ï¼å ¶ä½èç¹å¨ä¸é´è¿æ¥ + æ为ä¸ä¸ªé¾çç»æã</para> + <para>æ¯å¦æä¸ä¸ªèç¹AãBåCãèç¹Aå¨ä¸ä¸ªç½ç»ä¸ï¼å®æ许å¤æ¶æ¯çåéè åå®åé订åæ¶æ¯ãç±äºå ¬å¸çæ¿çï¼è®¢å + çæ¥æ¶è éè¦å¨å¦ä¸ä¸ªç½ç»ä¸æ¥æ¶æ¶æ¯ï¼å¹¶ä¸è¿ä¸ªç½ç»éè¦ç»è¿å ¶å®ç¬¬ä¸ä¸ªç½ç»æå¯ä»¥è®¿é®ãè¿ç§æ åµä¸æ们å°èç¹ + Bé¨ç½²å°ç¬¬ä¸ä¸ªç½ç»ä¸ï¼ä½ä¸ºèç¹Aä¸èç¹Cçä¸é´èç¹å°ä¸¤ä¸ªèç¹è¿æ¥èµ·æ¥ãå½æ¶æ¯å°è¾¾èç¹Aæ¶ï¼è¢«è½¬åå°èç¹Bï¼ + ç¶åå被转åå°èç¹Cä¸ï¼è¿æ ·æ¶æ¯å°±è¢«Cä¸çæ¥æ¶è ææ¥æ¶ãèç¹Aä¸éè¦ç´æ¥ä¸èç¹Cè¿æ¥ï¼ä½æ¯ææä¸ä¸ªèç¹ä»ç¶ + ç»æäºä¸ä¸ªé群ã</para> + <para>è¦æ³ç»æä¸ä¸ªè¿æ ·çé群ï¼èç¹Açé群è¿æ¥è¦æåèç¹Bï¼èç¹Bçé群è¿æ¥è¦æåCãæ¬ä¾æ们åªæ³ç»æä¸ä¸ªåå + çé¾å¼é群ï¼å³æ们åªå°æ¶æ¯æèç¹A->B->Cçæ¹åæµå¨ï¼èä¸è¦å C->B->Aæ¹åæµå¨ã</para> + <para>对äºè¿ç§é群ææï¼æ们éè¦å°<literal>max-hops</literal>设为<literal + >2</literal>. è¿ä¸ªå¼å¯ä»¥ä½¿èç¹Cä¸éåçä¿¡æ¯ä¼ éå°èç¹Bï¼åä¼ éå°èç¹Aãå æ¤èç¹Aå°±ç¥éæ¶æ¯å°è¾¾æ¶å³å° + å ¶è½¬åç»èç¹Bã尽管èç¹Bå¯è½æ²¡ææ¥æ¶è ï¼å¯å®ç¥éåç»è¿ä¸è·³å°±å¯ä»¥å°æ¶æ¯è½¬å°èç¹Cï¼é£éå°±ææ¥æ¶è äºã</para> + </section> + </section> +</chapter>