http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/configuring-transports.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/configuring-transports.xml b/docs/user-manual/zh/configuring-transports.xml new file mode 100644 index 0000000..123051a --- /dev/null +++ b/docs/user-manual/zh/configuring-transports.xml @@ -0,0 +1,376 @@ +<?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="configuring-transports"> + <title>ä¼ è¾å±çé ç½®</title> + <para>HornetQçä¼ è¾å±æ¯âå¯ææçâãéè¿çµæ´»çé ç½®åä¸å¥æå¡æä¾æ¥å£ï¼SPIï¼ï¼HornetQå¯ä»¥å¾å®¹æå°æ´æ¢å ¶ä¼ è¾å±ã</para> + <para>å¨æ¬ç« ä¸æ们å°å¯¹HornetQçä¼ è¾ç¸å ³çæ¦å¿µä½åºè§£éï¼å¹¶è¯´æå®çé ç½®æ¹æ³ã</para> + <section id="configuring-transports.acceptors"> + <title>æ¥æ¶å¨ï¼Acceptorï¼</title> + <para>æ¥æ¶å¨ï¼<emphasis>acceptor</emphasis>ï¼æ¯ HornetQ çä¼ è¾å±ä¸æ为éè¦çæ¦å¿µä¹ä¸ãé¦å + ä»ç»ä¸ä¸å¨æ件<literal>hornetq-configuration.xml</literal>ä¸æ¯ææ ·å®ä¹ä¸ä¸ªæ¥æ¶å¨çï¼</para> + <programlisting> +<acceptors> + <acceptor name="netty"> + <factory-class> +org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory + </factory-class> + <param key="port" value="5446"/> + </acceptor> +</acceptors> + </programlisting> + <para>æææ¥æ¶å¨é½å¨ <literal>acceptors</literal>åå ï¼elementï¼å å®ä¹ãå¨<literal>acceptors</literal> + å å¯ä»¥æé¶ä¸ªæå¤ä¸ªæ¥æ¶å¨çå®ä¹ãæ¯ä¸ªæå¡å¨ææ¥æçæ¥æ¶å¨çæ°éæ¯æ²¡æéå¶çã</para> + <para>æ¯ä¸ªæ¥æ¶å¨é½è¦å®ä¹å ¶ä¸HornetQæå¡å¨è¿æ¥çæ¹å¼ã</para> + <para>以ä¸çä¾åä¸æ们å®ä¹äºä¸ä¸ª<ulink + url="http://jboss.org/netty">Netty</ulink>æ¥æ¶å¨ãå®å¨ç«¯å£<literal>5446</literal>çå¬è¿æ¥è¯·æ±ã</para> + <para>å¨<literal>acceptor</literal>åå å æä¸ä¸ªååå <literal>factory-class</literal>ãè¿ä¸ªåå æ¯ç¨æ¥ + å®ä¹å建è¿æ¥å¨çå·¥åç±»ãä¸ä¸ªè¿æ¥å¨å·¥åç±»å¿ é¡»è¦å®ç°<literal>AcceptorFactory</literal>æ¥å£ãä¸ä¾ä¸æ们å®ä¹ + çè¿æ¥å¨å·¥åæ¯ç±»NettyAcceptorFactory使ç¨Nettyæ¥å»ºç«è¿æ¥ãæ个è¿ä¸ªç±»å®ä¹ï¼HornetQå°±ç¥éäºç¨ä»ä¹ä¼ è¾æ¥å»ºç«è¿æ¥äºã</para> + <para>å¨<literal>acceptor</literal>ä¸è¿å¯ä»¥é ç½®é¶æå¤ä¸ªåæ°<literal>param</literal>ãå¨æ¯ä¸ª<literal>param</literal> + ä¸å®ä¹çæ¯é®-å¼å¯¹ï¼key-valueï¼ãè¿äºåæ°ç¨æ¥é ç½®æä¸ªä¼ è¾å®ç°ãä¸åä¼ è¾æä¸åçé ç½®åæ°ã</para> + <para>åIPå°åã端å£å·çé½æ¯ä¼ è¾é ç½®åæ°çä¾åã</para> + </section> + <section id="configuring-transports.connectors"> + <title>è¿æ¥å¨ï¼Connectorsï¼</title> + <para>æ¥æ¶å¨å®ä¹çæ¯å¦ä½å¨æå¡å¨ç«¯æ¥æ¶è¿æ¥ï¼èè¿æ¥å¨åæ¯å®ä¹å®¢æ·ç«¯å¦ä½è¿æ¥å°æå¡å¨ã</para> + <para>以ä¸æ¯<literal>hornetq-configuration.xml</literal>æ件ä¸ä¸ä¸ªè¿æ¥å¨é ç½®çä¾åã</para> + <programlisting> +<connectors> + <connector name="netty"> + <factory-class> + org.hornetq.core.remoting.impl.netty.NettyConnectorFactory + </factory-class> + <param key="port" value="5446"/> + </connector> +</connectors> + </programlisting> + <para>è¿æ¥å¨çé ç½®å¨<literal>connectors</literal>åå ä¸ãå¯ä»¥å®ä¹ä¸ä¸ªæå¤ä¸ªè¿æ¥å¨ãæ¯ä¸ªæå¡å¨é ç½®çè¿æ¥å¨ + æ°éæ¯æ²¡æéå¶çã</para> + <para>ä½ å¯è½æ³¨æå°äºï¼æ¢ç¶è¿æ¥å¨æ¯å®ä¹<emphasis>客æ·ç«¯</emphasis>å¦ä½è¿æ¥æå¡å¨çï¼é£ä¹ä¸ºä»ä¹è¦å®ä¹å¨ + <emphasis>æå¡å¨</emphasis>端å¢ï¼åå å¦ä¸ï¼</para> + <itemizedlist> + <listitem> + <para>æå¡å¨ææ¶ä¹éè¦å为客æ·ç«¯å»è¿æ¥å ¶å®çæå¡å¨ï¼æ¯å¦å½ä¸ä¸ªæå¡å¨éè¿æ¡¥è¿æ¥å°å¦ä¸ä¸ªæå¡å¨ï¼æè æ¯é群 + ä¸æå¡å¨ä¹é´çäºç¸éè¿ ãå¨è¿ç§æ åµä¸æå¡å¨å°±è¦ç¥éå¦ä½ä¸å¦ä¸å°æå¡å¨å»ºç«è¿æ¥ãå æ¤éè¦å¨ + <emphasis>connectors</emphasis>ä¸å®ä¹è¿æ¥å¨ã</para> + </listitem> + <listitem> + <para>å¦æä½ ä½¿ç¨JMSæå¡ï¼éè¦å建è¿æ¥å·¥åçå®ä¾å¹¶ç»å®å°JNDIãå¨HornetQå建 + <literal>HornetQConnectionFactory</literal>æ¶éè¦è¿æ¥å¨çå¿ è¦ä¿¡æ¯ï¼ä»¥ä¾¿è¿ä¸ªè¿æ¥å·¥å + è½ç¥éå®å¦ä½ä¸HornetQæå¡å¨ç¸è¿æ¥ã</para> + <para>è¿ä¸ä¿¡æ¯è¢«å®ä¹å¨é ç½®æ件<literal + >hornetq-jms.xml</literal>ä¸ç<literal>connector-ref</literal>åå ä¸ãä¸é¢è¿æ®µé ç½® + å°±æ¯ä»è¯¥é ç½®æ件ä¸æåçç¸å ³é¨åï¼å®å±ç¤ºäºJMSçè¿æ¥å·¥åæ¯å¦ä½å¼ç¨å®ä¹å¨é ç½®æ件<literal + >hornetq-configuration.xml</literal>ä¸çè¿æ¥å¨çï¼</para> + <programlisting> +<connection-factory name="ConnectionFactory"> + <connectors> + <connector-ref connector-name="netty"/> + </connectors> + <entries> + <entry name="ConnectionFactory"/> + <entry name="XAConnectionFactory"/> + </entries> +</connection-factory> + </programlisting> + </listitem> + </itemizedlist> + </section> + <section id="configuring-transports.client.side"> + <title>å¨å®¢æ·ç«¯ç´æ¥é ç½®ä¼ è¾å±</title> + <para>ææ ·é ç½®ä¸ä¸ªå æ ¸<literal>ClientSessionFactory</literal>以让å®ç¥éå¦ä½è¿æ¥æå¡å¨çä¿¡æ¯å¢ï¼</para> + <para>å¨ç´æ¥é ç½®å æ ¸<literal>ClientSessionFactory</literal>çæ¶åï¼å¯ä»¥é´æ¥å°ä½¿ç¨è¿æ¥å¨ãå½ç¶å¨è¿ç§æ åµ + ä¸å¨æå¡å¨ç«¯å®ä¹è¿æ¥å¨æ¯æ²¡ææä¹çãæ们éè¿å°å¿ è¦åæ°ä¼ ç»<literal>ClientSessionFactory</literal>ç + æ¹æ³æ¥åè¯ä½¿ç¨ä»ä¹æ ·çè¿æ¥å¨å·¥åã</para> + <para>å¨ä¸é¢çä¾åä¸ï¼æ们å建äºä¸ä¸ª<literal>ClientSessionFactory</literal>ï¼å®å¯ä»¥ç´æ¥è¿æ¥å°æ们å åå® + ä¹çæ¥æ¶å¨ä¸ãå®ä½¿ç¨çæ¯æ åçNetty TCPä¼ è¾å±ï¼è¿æ¥ä¸»æºæ¯localhostï¼é»è®¤ï¼ï¼ç«¯å£5446ï¼</para> + <programlisting> +Map<String, Object> connectionParams = new HashMap<String, Object>(); + +connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.PORT_PROP_NAME, + 5446); + +TransportConfiguration transportConfiguration = + new TransportConfiguration( + "org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", + connectionParams); + +ClientSessionFactory sessionFactory = HornetQClient.createClientSessionFactory(transportConfiguration); + +ClientSession session = sessionFactory.createSession(...); + +etc + </programlisting> + <para>å¦æå¨å®¢æ·ç«¯ç´æ¥ä½¿ç¨JMSçè¿æ¥å·¥åçè¯ï¼ä¹å¯ä»¥ç¨ç±»ä¼¼çæ¹æ³èä¸éè¦å¨æå¡å¨ç«¯å®ä¹è¿æ¥å¨æå¨ + <literal>hornetq-jms.xml</literal>é ç½®æ件ä¸å建è¿æ¥å·¥åï¼</para> + <programlisting> +Map<String, Object> connectionParams = new HashMap<String, Object>(); + +connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.PORT_PROP_NAME, 5446); + +TransportConfiguration transportConfiguration = + new TransportConfiguration( + "org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", + connectionParams); + +ConnectionFactory connectionFactory = HornetQJMSClient.createConnectionFactory(transportConfiguration); + +Connection jmsConnection = connectionFactory.createConnection(); + +etc + </programlisting> + </section> + <section> + <title>é ç½® Netty ä¼ è¾å±</title> + <para>HornetQå½å使ç¨<ulink url="http://www.jboss.org/netty/" + >Netty</ulink>ä½ä¸ºå ¶é»è®¤çè¿æ¥å±ãNettyæ¯ä¸ä¸ªé«æ§è½çåºå±ç½ç»åº.</para> + <para>Nettyä¼ è¾çé ç½®æå ç§ä¸åçæ¹æ³ãå®å¯ä»¥ä½¿ç¨ä¼ ç»çJava IOï¼é»å¡æ¹å¼ï¼ãNIOï¼éé»å¡ï¼æç´æ¥ä½¿ç¨ + TCP socketåSSLãæè 使ç¨HTTPæHTTPSåè®®ãåæ¶è¿å¯è½ä½¿ç¨servletè¿è¡ä¼ è¾ã</para> + <para>éç¨Nettyåºè¯¥è½æ»¡è¶³ç»å¤§é¨åçä¼ è¾è¦æ±ã</para> + <section> + <title>é ç½® Netty TCP</title> + <para>Netty TCP æ¯ç®åçéå å¯çåºäºTCP socketçä¼ è¾ãå®å¯ä»¥ä½¿ç¨é»å¡å¼çJava IOæéé»å¡å¼çJava NIOã + æ们建议å¨æå¡å¨ç«¯éç¨éé»å¡å¼çNIO以è·å¾è¯å¥½ç并åå¤çè½åãå½å¹¶åè½å并ä¸æ¯å¾éè¦æ¶ï¼å¯ä»¥ä½¿ç¨é»å¡å¼ + çæ¹å¼ä»¥å¢å ååºçé度ã</para> + <para>å¦æä½ çåºç¨æ¯è¿è¡å¨ä¸ä¿¡ä»»çç½ç»ä¸ï¼ä½ åºè¯¥éæ©ä½¿ç¨SSLæHTTPSã</para> + <para>Netty TCPçææè¿æ¥é½æ¯ä»å®¢æ·ç«¯åèµ·çãæå¡å¨ç«¯ä¸å客æ·ç«¯åèµ·ä»»ä½è¿æ¥ãå¨æé²ç«å¢çç¯å¢ä¸ï¼è¿ç§æ¹å¼ + æ¯æ¯è¾éåçãå 为é²ç«å¢åªå 许åæ¹åçè¿æ¥ã</para> + <para>å¨<literal>org.hornetq.core.remoting.impl.netty.TransportConstants</literal>ç±»ä¸å®ä¹äºæ + æçé ç½®åæ°çå称ï¼keyï¼ãå®ä»¬å½ä¸ç»å¤§å¤å¨æ¢ç¨äºé ç½®æ¥æ¶å¨ä¹ç¨äºé ç½®è¿æ¥å¨ï¼æä¸äºåªéç¨äºæ¥æ¶å¨ã + ä¸é¢ååºçåæ°ç¨ä»¥é ç½®ä¸ä¸ªç®åçNetty TCPï¼</para> + <itemizedlist> + <listitem> + <para><literal>use-nio</literal>ãå¦æ设为<literal>true</literal>å使ç¨éé»å¡çJava + NIOãå¦æ<literal>false</literal>å使ç¨ä¼ ç»çé»å¡æ¹å¼çJava IOã</para> + <para>æ们建议使ç¨Java NIOå¤ç并è¡è¿æ¥ãå 为Java NIOä¸æ¯ä¸ºæ¯ä¸ä¸ªè¿æ¥åé ä¸ä¸ªçº¿ç¨ï¼æ以å®è¦æ¯ä¼ ç»çé»å¡å¼ + Java IOå ·ææ´å¼ºç并åè¿æ¥çå¤çè½åãå¦æä½ ä¸éè¦å¤ç并åè¿æ¥ï¼é£ä¹ä½¿ç¨æ§çé»å¡å¼çIOæ§è½ä¼å¥½ä¸äºãè¿ä¸ªå + æ°çé»è®¤å¼å¨æå¡å¨ç«¯æ¯<literal>false</literal>ï¼å¨å®¢æ·ç«¯æ¯<literal>false</literal>ã + </para> + </listitem> + <listitem> + <para><literal>host</literal>ã主æºåæIPå°åã对äºæ¥æ¶å¨æ¥è¯´ï¼å®æ¯æå¡å¨æ¥æ¶è¿æ¥çå°åã + 对äºè¿æ¥å¨ç«¯ï¼å®æ¯å®¢æ·ç«¯è¿æ¥çç®æ å°åãé»è®¤å¼æ¯<literal>localhost</literal>ã + å¨é ç½®æ¥æ¶å¨æ¶å¯ä»¥æå®å¤ä¸ªä¸»æºåæIPå°åï¼ä¸é´ç¨éå·éå¼ãå¦ææå®ç主æºæ¯<code>0.0.0.0</code>ï¼ + åæ¥æ¶å¨å°ä»ä¸»æºä¸ææçç½ç»æ¥å£ä¸æ¥åè¿æ¥è¯·æ±ãè¿æ¥å¨ä¸å 许æå®å¤ä¸ªä¸»æºå°åï¼å®åªè½ä¸ä¸ä¸ª + å°å建ç«è¿æ¥ã</para> + <note> + <para>ä¸å®ä¸è¦å¿è®°æå®ä¸ä¸ªä¸»æºåæIPå°åï¼ä¸ä¸ªæå¡å¨è¦æ³æ¥åæ¥èªå ¶å®èç¹çè¿æ¥å°±å¿ éæä¸ä¸ª + 主æºåæIPå°åæ¥ç»å®åçå¬å¤é¨çè¿æ¥è¯·æ±ãé»è®¤ç主æºålocalhostæ¯ä¸è½æ¥åå¤é¨ç + è¿æ¥è¯·æ±çï¼</para> + </note> + </listitem> + <listitem> + <para><literal>port</literal>ãè¿æ¥ç端å£ãç¨äºé ç½®è¿æ¥å¨ææ¥æ¶å¨ãè¿æ¥å¨ç¨æ¤ç«¯å£æ¥å»ºç« + è¿æ¥ãæ¥æ¶å¨å¨äºç«¯å£ä¸çå¬è¿æ¥è¯·æ±ãé»è®¤å¼æ¯<literal>5445</literal>ã</para> + </listitem> + <listitem> + <para><literal>tcp-no-delay</literal>ãå°å®è®¾ä¸º<literal>true</literal>å°±ä¼ä½¿ç¨ + <ulink url="http://en.wikipedia.org/wiki/Nagle's_algorithm">Nagle + ç®æ³</ulink>.é»è®¤å¼æ¯<literal>true</literal>ã</para> + </listitem> + <listitem> + <para><literal>tcp-send-buffer-size</literal>ãè¿ä¸ªåæ°æå®äºTCPçåéç¼å²å¤§å°ï¼åä½æ¯åèã + é»è®¤å¼æ¯<literal>32768</literal>åè(32KiB)ã</para> + <para>è¿ä¸ªåæ°è¦æ ¹æ®ä½ çç½ç»ç带宽ä¸æ¶å»¶çæ åµèè°æ´ã<ulink url="http://www-didc.lbl.gov/TCP-tuning/"> + è¿ä¸ªé¾æ¥</ulink>对æ¤æå¾å¥½ç论述ã</para> + <para>ç®è¨ä¹ï¼TCPçåéï¼æ¥æ¶ç¼å²ç大å°å¯ä»¥ç¨ä¸é¢å ¬å¼æ¥è®¡ç®ï¼</para> + <programlisting> + ç¼å²å¤§å° = 带宽 * RTT + </programlisting> + <para>å ¶ä¸å¸¦å®½çåä½æ¯ <emphasis>æ¯ç§åèæ°</emphasis>ï¼RTTï¼ç½ç»å¾è¿ç¨æ¶é´ï¼çåä½æ¯ç§ã + 使ç¨<literal>ping</literal>å·¥å ·å¯ä»¥æ¹ä¾¿å°æµéåºRTTã</para> + <para>对äºå¿«éç½ç»å¯ä»¥éå½å 大ç¼å²ç大å°ã</para> + </listitem> + <listitem> + <para><literal>tcp-receive-buffer-size</literal>ãè¿ä¸ªåæ°æå®äºTCPæ¥æ¶ç¼å²ç大å°ï¼åä½æ¯åèã + é»è®¤å¼æ¯<literal>32768</literal>åè(32KiB)ã</para> + </listitem> + <listitem> + <para><literal>batch-delay</literal>ãHornetQå¯ä»¥éè¿é 置该åæ°ï¼å¨æ°æ®å åå ¥ä¼ è¾å±ä¹åæä¸ä¸ª + æ大延æ¶ï¼æ¯«ç§ï¼ï¼è¾¾å°æ¹éåå ¥çç®çãè¿æ ·å¯ä»¥æé«å°æ¶æ¯çåéæçãä½è¿æ ·åä¼å¢å å个æ¶æ¯çå¹³ååé + 延è¿ãé»è®¤å¼ä¸º<literal>0</literal>毫ç§ã</para> + </listitem> + <listitem> + <para><literal>direct-deliver</literal>ãæ¶æ¯å°è¾¾æå¡å¨åï¼é»è®¤æ¯ç±ä¸ä¸ªä¸åç线ç¨æ¥å°æ¶æ¯ä¼ é + å°æ¥æ¶è ãè¿æ ·å¯ä»¥ä½¿æå¡çååéåå¯æ©å±æ§è¾¾å°æä½³ï¼ç¹å«æ¯å¨å¤æ ¸çç³»ç»ä¸æææ´ä¸ºææ¾ãä½æ¯çº¿ç¨åæ¢ + ä¼å¸¦æ¥ä¸äºä¼ éç延è¿ãå¦æä½ å¸æ延è¿æå°ï¼å¹¶ä¸å¨æååéçè¯ï¼å¯ä»¥å°åæ°<literal + >direct-deliver</literal>设为trueãé»è®¤å¼æ¯<literal>true</literal>ãå¦æä½ æ´å¸ææ + è¾å¤§çååéçè¯ï¼å°å®è®¾ä¸º<literal>false</literal>ã</para> + </listitem> + <listitem> + <para><literal>nio-remoting-threads</literal>ãå¦æ使ç¨NIOï¼é»è®¤æ åµä¸HornetQä¼ä½¿ç¨ç³»ç»ä¸å¤ç + å¨å æ ¸ï¼æè¶ çº¿ç¨ï¼æ°éä¸åç线ç¨æ¥å¤çæ¥æ¶çæ°æ®å ãå æ ¸çæ°éæ¯éè¿è°ç¨<literal + >Runtime.getRuntime().availableProcessors()</literal>æ¥å¾å°çãå¦æä½ æ³æ¹åè¿ä¸ªæ°éï¼ + ä½ å¯ä»¥è®¾å®æ¬åæ°ãé»è®¤çå¼æ¯<literal>-1</literal>ï¼è¡¨ç¤ºçº¿ç¨æ°ä¸º<literal + >Runtime.getRuntime().availableProcessors()</literal> * 3ã</para> + </listitem> + </itemizedlist> + </section> + <section> + <title>é ç½®Netty SSL</title> + <para>Netty SSLçé ç½®ä¸Netty TCPç¸ä¼¼ãå®éç¨äºå®å ¨å¥æ¥åå±ï¼SSLï¼æ¥æä¾å å¯çTCPè¿æ¥ã</para> + <para>æ们æä¾äºä¸ä¸ªNetty SSLçä¾åæ¥æ¼ç¤ºå ¶é ç½®ååºç¨ã</para> + <para>Netty SSLæ¥æNetty TCPä¸æ ·çåæ°ï¼å¦å¤è¿æä¸åçéå åæ°ï¼</para> + <itemizedlist> + <listitem> + <para><literal>ssl-enabled</literal>ãå¿ é¡»è®¾ä¸º<literal>true</literal>以使ç¨SSLã</para> + </listitem> + <listitem> + <para><literal>key-store-path</literal>ãåæ¾SSLå¯é¥çè·¯å¾ï¼key store)ãè¿æ¯åæ¾å®¢æ·ç«¯è¯ä¹¦çå°æ¹ã</para> + </listitem> + <listitem> + <para><literal>key-store-password</literal>ãç¨äºè®¿é®key storeçå¯ç ã</para> + </listitem> + <listitem> + <para><literal>trust-store-path</literal>ãæå¡å¨ç«¯åæ¾å¯ä¿¡ä»»å®¢æ·è¯ä¹¦çè·¯å¾ã</para> + </listitem> + <listitem> + <para><literal>trust-store-password</literal>ãç¨äºè®¿é®å¯ä¿¡ä»»å®¢æ·è¯ä¹¦ï¼trust store)çå¯ç ã</para> + </listitem> + </itemizedlist> + </section> + <section> + <title>é ç½®Netty HTTP</title> + <para>Netty HTTP éè¿HTTPééä¼ éæ°æ®å ãå¨æäºç¨æ·ç¯å¢ä¸é²ç«å¢åªå 许æHTTPéä¿¡ï¼è¿æ¶éç¨Netty HTTPä½ä¸ºHornetQ + çä¼ è¾å±å°±è½è§£å³é®é¢ã</para> + <para>æ们æä¾äºä¸ä¸ªNetty HTTPçä¾åæ¥æ¼ç¤ºå ¶é ç½®ååºç¨ã</para> + <para>Netty HTTPå ·æåNetty TCPåæ ·çé ç½®åæ°ï¼å¦å¤å®è¿æ以ä¸åæ°ï¼</para> + <itemizedlist> + <listitem> + <para><literal>http-enabled</literal>ãå¦æè¦ä½¿ç¨HTTPï¼è¿ä¸ªåæ°å¿ 须设为<literal>true</literal>ã</para> + </listitem> + <listitem> + <para><literal>http-client-idle-time</literal>ã客æ·ç«¯ç©ºé²æ¶é´ãå¦æ客æ·ç«¯ç空é²æ¶é´è¶ è¿ + è¿ä¸ªå¼ï¼Nettyå°±ä¼åéä¸ä¸ªç©ºçHTTP请æ±ä»¥ä¿æè¿æ¥ä¸è¢«å ³éã</para> + </listitem> + <listitem> + <para><literal>http-client-idle-scan-period</literal>ãæ«æ空é²å®¢æ·ç«¯çé´éæ¶é´ãåä½æ¯æ¯«ç§ã</para> + </listitem> + <listitem> + <para><literal>http-response-time</literal>ãæå¡å¨ç«¯å客æ·ç«¯åé空çhttpååºåçæ大çå¾ æ¶é´ã</para> + </listitem> + <listitem> + <para><literal>http-server-scan-period</literal>ãæå¡å¨æ«æéè¦ååºç客æ·ç«¯çæ¶é´é´éãåä½æ¯æ¯«ç§ã</para> + </listitem> + <listitem> + <para><literal>http-requires-session-id</literal>ãå¦æ设为trueï¼å®¢æ·ç«¯å¨ç¬¬ä¸æ¬¡è¯·æ±åå°çå¾ + æ¥æ¶ä¸ä¸ªä¼è¯IDãhttp è¿æ¥å¨ç¨å®æ¥è¿æ¥servletæ¥æ¶å¨ï¼ä¸å»ºè®®è¿æ ·ä½¿ç¨ï¼ã</para> + </listitem> + </itemizedlist> + </section> + <section> + <title>é ç½®Netty Servlet</title> + <para>HornetQå¯ä»¥ä½¿ç¨Netty servletæ¥ä¼ è¾æ¶æ¯ã使ç¨servletå¯ä»¥å°HornetQçæ°æ®éè¿HTTPä¼ éå°ä¸ä¸ª + è¿è¡çservletï¼åç±servlet转åç»HornetQæå¡å¨ã</para> + <para>servletä¸HTTPçä¸åä¹å¤å¨äºï¼å½ç¨HTTPä¼ è¾æ¶ï¼HornetQå¦åä¸ä¸ªwebæå¡å¨ï¼å®çå¬å¨æ个端å£ä¸çHTTP + 请æ±å¹¶è¿åååºãæ¯å¦80端å£æ8080端å£ãèå½ä½¿ç¨servletæ¶ï¼HornetQçä¼ è¾æ°æ®æ¯éè¿è¿è¡å¨æä¸servletå®¹å¨ + ä¸çä¸ä¸ªç¹å®çservletæ¥è½¬åçãèè¿ä¸ªsevlet容å¨ä¸åæ¶è¿å¯è½è¿è¡å ¶ä»çåºç¨ï¼å¦webæå¡ãå½ä¸ä¸ªå ¬å¸æå¤ä¸ªåºç¨ + ä½åªå 许ä¸ä¸ªhttp端å£å¯ä»¥è®¿é®æ¶ï¼servletä¼ è¾å¯ä»¥å¾å¥½ç解å³HornetQçä¼ è¾é®é¢ã</para> + <para>请åè§HornetQææä¾çservletä¾åæ¥äºè§£è¯¦ç»çé ç½®æ¹æ³ã</para> + <para>è¦å¨HornetQä¸ä½¿ç¨Netty servletä¼ è¾æ¹å¼ï¼éè¦ä»¥ä¸æ¥éª¤ï¼</para> + <itemizedlist> + <listitem> + <para>é¨ç½²servletãä¸é¢æ¯ä¸ä¸ªweb.xmlä¾åï¼</para> + <programlisting><?xml version="1.0" encoding="UTF-8"?> +<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" + version="2.4"> + <servlet> + <servlet-name>HornetQServlet</servlet-name> + <servlet-class>org.jboss.netty.channel.socket.http.HttpTunnelingServlet</servlet-class> + <init-param> + <param-name>endpoint</param-name> + <param-value>local:org.hornetq</param-value> + </init-param> + <load-on-startup>1</load-on-startup> + </servlet> + + <servlet-mapping> + <servlet-name>HornetQServlet</servlet-name> + <url-pattern>/HornetQServlet</url-pattern> + </servlet-mapping> +</web-app> + +</programlisting> + </listitem> + <listitem> + <para>æ们è¿éè¦å¨æå¡å¨ç«¯å ä¸ä¸ä¸ªç¹æ®çNetty invm æ¥æ¶å¨ã</para> + <para>ä¸é¢æ¯ä»<literal>hornetq-configuration.xml</literal>é ç½®æ件ä¸æåçå®ä¹æ¥æ¶å¨çé ç½®é¨åï¼</para> + <programlisting> +<acceptors> + + <acceptor name="netty-invm"> + <factory-class> + org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory + </factory-class> + <param key="use-invm" value="true"/> + <param key="host" value="org.hornetq"/> + </acceptor> + +</acceptors> + </programlisting> + </listitem> + <listitem> + <para>æåæ们éè¦å¨å®¢æ·ç«¯é ç½®è¿æ¥å¨ï¼ä¹æ¯å¨<literal>hornetq-configuration.xml</literal>æ件ä¸æ¥åãå¦ä¸æ示ï¼</para> + <programlisting><connectors> + + <connector name="netty-servlet"> + <factory-class> + org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory + </factory-class> + <param key="host" value="localhost"/> + <param key="port" value="8080"/> + <param key="use-servlet" value="true"/> + <param key="servlet-path" value="/messaging/HornetQServlet"/> + </connector> + + </connectors></programlisting> + </listitem> + </itemizedlist> + <para>ä¸é¢ååºäºåå§ååæ°ä»¥åå®ä»¬çç¨éï¼</para> + <itemizedlist> + <listitem> + <para>endpoint - Nettyæ¥æ¶å¨çååãservletå°åå®è½¬åæ°æ®å ãå®ä¸<literal + >host</literal>åæ°çå¼æ¯å¯¹åºçã</para> + </listitem> + </itemizedlist> + <para>å¨<literal>web.xml</literal>ä¸å®ä¹çservletçURLå½¢å¼ä¸å¨è¿æ¥å¨é ç½®æ件ä¸å®ä¹ç + <literal>servlet-path</literal>å¼åºè¯¥ç¸å¹é ã</para> + <para>servletå¯ä»¥ä¸SSLä¸èµ·ä½¿ç¨ãåªéè¦å¨è¿æ¥å¨é ç½®ä¸å ä¸ä¸é¢çé ç½®å³å¯ï¼<programlisting> <connector name="netty-servlet"> + <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> + <param key="host" value="localhost"/> + <param key="port" value="8443"/> + <param key="use-servlet" value="true"/> + <param key="servlet-path" value="/messaging/HornetQServlet"/> + <param key="ssl-enabled" value="true"/> + <param key="key-store-path" value="path to a keystoree"/> + <param key="key-store-password" value="keystore password"/> + </connector> +</programlisting></para> + <para>å¦å¤ä½ è¿éè¦ä¸ºæå¡å¨æå®ä¸ä¸ªKeyStoreãæå¼<literal>server/default/deploy/jbossweb.sar</literal> + ä¸ç<literal>server.xml</literal>æ件ï¼æç §ä¸é¢çå 容ç¼è¾å ¶ä¸çSSLï¼TLSè¿æ¥å¨é ç½®ï¼<programlisting><Connector protocol="HTTP/1.1" SSLEnabled="true" + port="8443" address="${jboss.bind.address}" + scheme="https" secure="true" clientAuth="false" + keystoreFile="path to a keystore" + keystorePass="keystore password" sslProtocol = "TLS" /> + +</programlisting>SSLéè¦keystoreå访é®å¯ç ãåè§servlet sslä¾å以äºè§£æ´å¤çæå ³ä¿¡æ¯ã</para> + </section> + </section> +</chapter>
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/connection-ttl.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/connection-ttl.xml b/docs/user-manual/zh/connection-ttl.xml new file mode 100644 index 0000000..c9ff36f --- /dev/null +++ b/docs/user-manual/zh/connection-ttl.xml @@ -0,0 +1,139 @@ +<?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="connection-ttl"> + <title>失æè¿æ¥çæ£æµ</title> + <para>æ¬ç« å°è®¨è®ºè¿æ¥ççåæ¶é´ï¼TTLï¼ä»¥åHornetQå¦ä½å¤çåºç°æ éç客æ·ç«¯æè å¼å¸¸éåºç客æ·ç«¯ï¼å³å®¢æ·ç«¯å¨ + éåºæ¶æ²¡æåççå ³éç¸å ³èµæºï¼ã</para> + <section id="dead.connections"> + <title>æå¡å¨ç«¯å¯¹å¤±æè¿æ¥çæ¸ é¤</title> + <para>å½å®¢æ·ç«¯çåºç¨ç¨åºéåºæ¶ï¼åºè¯¥å ³éæ使ç¨çèµæºãå¨<literal>finally</literal>è¿è¡èµæºçå ³é + æ¯ä¸ä¸ªå¾å¥½çæ¹æ³ã</para> + <para>ä¸é¢çä¾åä¸ï¼ä¸ä¸ªHornet客æ·ç«¯å¨finallyä¸å ³éäºå®çä¼è¯ï¼sessionï¼åä¼è¯å·¥åï¼session factoryï¼ï¼</para> + <programlisting> +ClientSessionFactory sf = null; +ClientSession session = null; + +try +{ + sf = HornetQClient.createClientSessionFactory(...); + + session = sf.createSession(...); + + ... do some stuff with the session... +} +finally +{ + if (session != null) + { + session.close(); + } + + if (sf != null) + { + sf.close(); + } +} + </programlisting> + <para>ä¸é¢çä¾åç»åºäºä¸ä¸ªJMS客æ·ç«¯æ¯å¦ä½éå½å ³éç¸å ³èµæºçï¼</para> + <programlisting> +Connection jmsConnection = null; + +try +{ + ConnectionFactory jmsConnectionFactory = HornetQJMSClient.createConnectionFactory(...); + + jmsConnection = jmsConnectionFactory.createConnection(); + + ... do some stuff with the connection... +} +finally +{ + if (connection != null) + { + connection.close(); + } +} + </programlisting> + <para>ç¶èææ¶åèµæºå¨å®¢æ·ç«¯å¾ä¸å°åççå ³éãæç客æ·ç«¯åºç¨å¨ç»ææ¶å¿è®°äºå ³éèµæºï¼æç客æ·ç«¯ææ¶åçæ éå¯¼è´ + ç¨åºçªç¶ä¸æï¼ç¸å ³èµæºä¹æ²¡ææ¥å¾åå ³éï¼</para> + <para>å¦æä¸è¿°æ åµåçäºï¼é£ä¹è¿äºèµæºå°±ä¼çå¨æå¡å¨ç«¯èä¸ä¼è¢«æ¸ çãè¿å°±ä¼é æèµæºæ³æ¼ç°è±¡å¹¶æçµå¯¼è´æå¡å¨å å + 溢åºæå ¶å®èµæºç溢åºé误ã</para> + <para>å æ¤å¨æå¡å¨ç«¯è¦ææç§æºå¶æ¥é¿å èµæºçæ³æ¼ãä¹å°±æ¯å¯¹æ æèµæºè¿è¡åæ¶ãå¨å¤æä»ä¹æ¯æ æèµæºæ¶ï¼HornetQ + èèå°äºå®¢æ·ç«¯éæ°è¿æ¥çæ åµãå°±æ¯å½ä¸ä¸ªè¿æ¥ç±äºç½ç»ä¸´æ¶ä¸æååæ¢å¤æ£å¸¸æ¶ï¼å®¢æ·ç«¯æå¯è½éè¿ä¸æéè¯ + æåå°è¿æ¥å°æå¡å¨ç«¯ãå¦ææå¡å¨ç«¯è¿æ©æ¸ é¤äºç¸å ³çè¿æ¥èµæºï¼å客æ·ç«¯å°±å¯è½éè¯å¤±è´¥ã</para> + <para>HornetQçèµæºåæ¶æ¯å®å ¨å¯é ç½®çãæ¯ä¸ª <literal + >ClientSessionFactory</literal> æä¸ä¸ª<emphasis>è¿æ¥ TTL</emphasis>çåæ°ã + è¿ä¸ªåæ°çæä¹æ¯å½å®¢æ·ç«¯çä¸ä¸ªè¿æ¥æ²¡æä»»ä½æ°å°è¾¾æå¡å¨æ¶ï¼æå¡å¨å 许è¿ä¸ªè¿æ¥ææçæé¿æ¶é´ã客æ·ç«¯éè¿å® + æ¶åæå¡å¨ç«¯åéâpingâæ°æ®å æ¥ç»´æè¿æ¥çææï¼ä»¥å 被æå¡å¨å ³æãå¦ææå¡å¨å¨TTLæå®çæ¶é´å 没ææ¶å°ä»»ä½ + æ°æ®å ï¼å认为该è¿æ¥æ æï¼ç»§èå ³éä¸è¯¥è¿æ¥ç¸å ³çææçä¼è¯ï¼sessionï¼ã</para> + <para>å¦æ使ç¨JMSï¼<literal>HornetQConnectionFactory</literal>ç<literal>ConnectionTTL</literal> + å±æ§æ¯ç¨æ¥å®ä¹è¿æ¥çåæ´»æ¶é´çãå¦æä½ å°JMSè¿æ¥å·¥åé¨ç½²å°JNDIä¸ï¼ååºä½¿ç¨é ç½®æ件ä¸ç<literal + >connection-ttl</literal>åæ°æ¥å®ä¹è¿æ¥çTTLã</para> + <para>é»è®¤çè¿æ¥TTLå¼æ¯<literal>60000</literal>毫ç§ï¼å³ä¸åéã <literal>ConnectionTTL</literal> + 设为<literal>-1</literal>表示æå¡å¨æ°¸è¿ä¸æ£æµè¶ æ¶çè¿æ¥ã</para> + <para>å¦æä½ ä¸æ³è®©å®¢æ·ç«¯æ¥è§å®è¿æ¥åæ´»æ¶é´ï¼TTLï¼ï¼ä½ å¯ä»¥å¨æå¡å¨ç«¯çé ç½®æ件ä¸å®ä¹ + <literal>connection-ttl-override</literal>å±æ§ãå®çé»è®¤å¼æ¯<literal>-1</literal>ï¼è¡¨ç¤º + æå¡å¨ç«¯è¯¥å±æ§æ æï¼å³å®¢æ·ç«¯å¯ä»¥å®ä¹èªå·±çè¿æ¥TTLï¼ã</para> + <section> + <title>å ³é没æ被æåå ³éçæ ¸å¿ä¼è¯æJMSè¿æ¥</title> + <para>å¦åæè¿°ï¼å¨ä½¿ç¨å®æ¯åå¨<literal>finally</literal>ä¸å°ææçæ ¸å¿ä¼è¯æJMSè¿æ¥å ³éæ¯ååéè¦çã</para> + <para>å¦æä½ æ²¡æè¿æ ·åï¼HornetQä¼å¨æå¾åæ¶æ¶è¿è¡æ£æµå¹¶ä¼å¨æ¥å¿ä¸æå°ç±»ä¼¼ä»¥ä¸çè¦åï¼å¦ææ¯JMSåå¨è¦åä¸ + æ¯ç¸åºçJMSè¿æ¥ï¼ï¼</para> + <programlisting> + +[Finalizer] 20:14:43,244 WARNING [org.hornetq.core.client.impl.DelegatingSession] I'm closin +g a ClientSession you left open. Please make sure you close all ClientSessions explicitly before let +ting them go out of scope! +[Finalizer] 20:14:43,244 WARNING [org.hornetq.core.client.impl.DelegatingSession] The sessi +on you didn't close was created here: +java.lang.Exception +at org.hornetq.core.client.impl.DelegatingSession.<init>(DelegatingSession.java:83) +at org.acme.yourproject.YourClass (YourClass.java:666) + + </programlisting> + <para>HornetQç¶åå°æªå ³éçè¿æ¥ï¼ä¼è¯å ³éã</para> + <para>注æå¨æ¥å¿çè¦åä¸è¿ç»åºäºå建JMSè¿æ¥ï¼å®¢æ·ç«¯ä¼è¯çå ·ä½è¡å·ï¼ä»¥ä¾¿åç¡®å°ç¡®å®åºéçå°æ¹ã</para> + </section> + </section> + <section> + <title>客æ·ç«¯çæ éæ£æµ</title> + <para>åé¢è®²è¿°äºå®¢æ·ç«¯å¦ä½åæå¡å¨åéping以åæå¡å¨ç«¯å¦ä½æ¸ ç失æçè¿æ¥ãåépingè¿æå¦å¤ä¸ä¸ªç®çï¼å°±æ¯è½ + 让客æ·ç«¯æ£æµç½ç»ææå¡å¨æ¯å¦åºç°æ éã</para> + <para>ä»å®¢æ·ç«¯çè§åº¦æ¥çï¼åªè¦å®¢æ·ç«¯è½ä»ä¸ä¸ªè¿æ¥ä¸ææ¥æ¶æå¡å¨çæ°æ®ï¼é£ä¹è¿ä¸ªè¿æ¥å°±è¢«è®¤ä¸ºæ¯ä¸ä¸ªææçè¿æ¥ã</para> + <para>å¦æå¨å±æ§<literal>client-failure-check-period</literal>æå®ä¹çæ¶é´å ï¼åä½æ¯«ç§ï¼å®¢æ·ç«¯æ²¡æ + æ¶å°ä»»ä½æ°æ®ï¼å®¢æ·ç«¯å°±è®¤ä¸ºè¿ä»¬è¿æ¥åçäºæ éãæ ¹æ®ä¸åçé ç½®ï¼å®¢æ·ç«¯å¨è¿ç§æ åµä¸è¦ä¹è¿è¡failoverï¼è¦ä¹ + è°ç¨<literal>FailureListener</literal>çæ¥å£ï¼æè æ¯JMSç<literal>ExceptionListener</literal>ï¼ã</para> + <para>å¦æ使ç¨JMSï¼è¿ä¸ªåæ°æ¯<literal>HornetQConnectionFactory</literal>ç<literal>ClientFailureCheckPeriod</literal>ã + å¦æä½ åJNDIé¨ç½²JMSè¿æ¥å·¥åï¼é£ä¹ç¸åºçåæ°å¨<literal>hornetq-jms.xml</literal>é ç½®æ件ä¸ï¼åæ°å + 为<literal>client-failure-check-period</literal>ã</para> + <para>è¿ä¸ªåæ°çé»è®¤å¼æ¯<literal>30000</literal>毫ç§ï¼å³ååéã<literal>-1</literal>表示客æ·ç«¯ä¸æ£æ¥ + è¿æ¥çæææ§ãå³ä¸è®ºæ¯å¦ææ°æ®æ¥èªæå¡å¨ï¼è¿æ¥é½ä¸ç´ææãè¿ä¸åæ°é常è¦æ¯æå¡å¨ç«¯çè¿æ¥TTLå°è®¸å¤ï¼ä»¥ä½¿ + 客æ·ç«¯å¨åºç°çæè¿æ¥æ éçæ åµä¸å¯ä»¥ä¸æå¡å¨æåå°éæ°è¿æ¥ã</para> + </section> + <section id="connection-ttl.async-connection-execution"> + <title>é ç½®å¼æ¥è¿æ¥ä»»å¡æ§è¡</title> + <para>é»è®¤æ åµä¸ï¼æå¡å¨æ¥æ¶å°çæ°æ®å 被è¿ç¨æ¨¡åç线ç¨å¤çã</para> + <para>为äºé¿å è¿ç¨æ¨¡åç线ç¨è¢«é¿æ¶é´å ç¨ï¼æ°æ®å å¯ä»¥è½¬ç»å¦å¤çä¸ä¸ªçº¿ç¨æ± æ¥å¤çãè¦æ³¨æè¿æ ·åçå¢å äºä¸äºæ¶é´å»¶è¿ã + å æ¤å¦ææ°æ®å å¤çèæ¶å¾å°ï¼è¿æ¯ç±è¿ç¨æ¨¡å线ç¨æ¥å¤çè¾å¥½ã + + è¦é ç½®è¿æ ·çå¼æ¥è¿æ¥å¾è¡ä»»å¡ï¼å°<literal>hornetq-configuration.xml</literal>æ件ä¸ç + <literal>async-connection-execution-enabled</literal> åæ°è®¾ä¸º<literal>true</literal> + ï¼é»è®¤å¼æ¯ <literal>true</literal>ï¼ã</para> + </section> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/core-bridges.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/core-bridges.xml b/docs/user-manual/zh/core-bridges.xml new file mode 100644 index 0000000..5adc9e2 --- /dev/null +++ b/docs/user-manual/zh/core-bridges.xml @@ -0,0 +1,179 @@ +<?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="core-bridges"> + <title>æ ¸å¿æ¡¥</title> + <para>æ¡¥çåè½æ¯ä»ä¸ä¸ªæºéåä¸æ¥æ¶æ¶æ¯ï¼åå°æ¶æ¯è½¬åå°ç®çå°åãé常è¿ä¸ªç®çå°åå¨å¦å¤ä¸ä¸ªHornetQæå¡å¨ä¸ã</para> + <para>æºä¸ç®çä¸éè¦å¨åä¸ä¸ªé群ä¸ãæ以桥å¾éåå°æ¶æ¯ä»ä¸ä¸ªé群ä¸å¯é å°è½¬åå°å¦ä¸ä¸ªé群ãæ¯å¦éè¿ä¸ä¸ªWANï¼æ + internetï¼çè¿æ¥ä¸ç¨³å®çç½ç»ã</para> + <para>æ¡¥æå¤çæ éçè½åãå¦æç®çæå¡å¨çè¿æ¥å¤±è´¥ï¼åç½ç»æ éï¼ï¼æ¡¥ä¼éè¯ä¸ç®çæå¡å¨çè¿æ¥ï¼ç´æ¥è¿æ¥æå + 为æ¢ãå½è¿æ¥æååï¼æ¡¥å继ç»è¿è¡å·¥ä½ã</para> + <para>æ»ä¹ï¼æ¡¥æ¯å¯é è¿æ¥ä¸¤ä¸ªHornetQæå¡å¨çä¸ç§æ段ã使ç¨æ ¸å¿æ¡¥æ¶æºåç®çæå¡å¨å¿ é¡»é½æ¯HornetQæå¡å¨ã</para> + <para>æ¡¥å¯ä»¥éè¿é ç½®æä¾<emphasis>ä¸æ¬¡ä¸åªæä¸æ¬¡</emphasis>çä¼ éä¿è¯ãå ¶éç¨çæ¹æ³æ¯éå¤æ£æµï¼è¯¦ç» + æè¿°å¨<xref linkend="duplicate-detection"/>ï¼ã</para> + <note> + <para>æ ¸å¿æ¡¥çåè½ä¸JMSæ¡¥çåè½ç¸ä¼¼ï¼ä½æ¯ä¸è½å°å®ä»¬æ··æ·ï¼</para> + <para>æ ¸å¿æ¡¥ç¨æ¥è¿æ¥ä¸¤ä¸ªHornetQèç¹ï¼å®ä¸ä½¿ç¨JMSæ¥å£ãJMS桥使ç¨çæ¯JMSæ¥å£ï¼å®è¿æ¥çæ¯ä»»ä½ä¸¤ä¸ªç¬¦å + JMS 1.1è§èçæå¡å¨ãå æ¤ï¼JMSæ¡¥å¯ä»¥å°ä¸¤ä¸ªä¸åçJMSæå¡å¨è¿æ¥èµ·æ¥ãä»æ§è½è§åº¦èèï¼æ ¸å¿æ¡¥ç±äºéç¨ + éå¤æ£æµæ¥å®ç°<emphasis>ä¸æ¬¡ä¸åªä¸æ¬¡</emphasis>çä¼ éä¿è¯ï¼å¯ä»¥æä¾æ´é«çæ§è½ã + JMSæ¡¥åéè¦ä½¿ç¨XAè¿ç§å¤æçæºå¶æ¥æä¾åæ ·çä¼ éä¿è¯ï¼å äºæ§è½è¦æ¯æ ¸å¿æ¡¥ä½ã</para> + </note> + <section> + <title>æ¡¥çé ç½®</title> + <para>æ¡¥çé ç½®å¨<literal>hornetq-configuration.xml</literal>æ件ä¸ã让æ们å çä¸ä¸ªé ç½®çä¾å + ï¼å®å®é ä¸åºèªbridgeä¾åï¼ï¼</para> + <programlisting> +<bridge name="my-bridge"> + <queue-name>jms.queue.sausage-factory</queue-name> + <forwarding-address>jms.queue.mincing-machine</forwarding-address> + <filter-string="name='aardvark'"/> + <transformer-class-name> + org.hornetq.jms.example.HatColourChangeTransformer + </transformer-class-name> + <retry-interval>1000</retry-interval> + <retry-interval-multiplier>1.0</retry-interval-multiplier> + <reconnect-attempts>-1</reconnect-attempts> + <failover-on-server-shutdown>false</failover-on-server-shutdown> + <use-duplicate-detection>true</use-duplicate-detection> + <confirmation-window-size>10000000</confirmation-window-size> + <connector-ref connector-name="remote-connector" + backup-connector-name="backup-remote-connector"/> + <user>foouser</user> + <password>foopassword</password> +</bridge> + </programlisting> + <para>å¨ä¸é¢çé ç½®ä¸å æ¬äºæ¡¥çææåæ°ãå¨å®é åºç¨ä¸å¯è½å ¶ä¸å¾å¤çåæ°å¯ä»¥ä½¿ç¨é»è®¤å¼ï¼ä¸éè¦å¨é ç½®ä¸ + æå®ã</para> + <para>ä¸é¢æ们对æ¯ä¸ªåæ°åå«è¯´æï¼</para> + <itemizedlist> + <listitem> + <para><literal>name</literal>åæ°ãæææ¡¥é½å¿ é¡»æä¸ä¸ªå¯ä¸çååã</para> + </listitem> + <listitem> + <para><literal>queue-name</literal>ãæ¬å°éåçååãæ¡¥ä»æ¬å°éåä¸æ¥æ¶æ¶æ¯ã + è¿æ¯ä¸ä¸ªå¿ è¦çåæ°ã</para> + <para>è¿ä¸ªéåå¨æ¡¥çå¯å¨ä¹åå¿ é¡»å·²ç»åå¨ã</para> + <note> + <para>å¦æ使ç¨JMSï¼JMSçé ç½®æ件<literal + >hornetq-jms.xml</literal>å¨æ ¸å¿é ç½®æ件<literal> + hornetq-configuration.xml</literal>ä¹åè£ è½½ãæ以å¦æä½ çæ¡¥è¦ä»JMS + éåæ¥æ¶æ¶æ¯ï¼å°±éè¦ä¿è¯JMSéååæ¶è¦ä½ä¸ºæ ¸å¿éåé¨ç½²ãå ·ä½æ¹æ³å¯ä»¥åè§ + bridgeä¾åã</para> + </note> + </listitem> + <listitem> + <para><literal>forwarding-address</literal>ãç®çæå¡å¨ä¸çå°åãæ¶æ¯å°è¢«è½¬åå°è¿ä¸ªå°åã + å¦æ没ææå®è¿ä¸ªè½¬åå°åï¼æ¶æ¯çåå§å°åå°ä¼ä¿çã</para> + </listitem> + <listitem> + <para><literal>filter-string</literal>ãä¸ä¸ªå¯éçè¿æ»¤å¨è¡¨è¾¾å¼ãå®è¡¨ç¤ºåªæè¿æ»¤å¨è¡¨è¾¾å¼éæ© + çæ¶æ¯æ被转åãè¿æ»¤å¨è¡¨è¾¾å¼çè¯æ³åè§ <xref linkend="filter-expressions" + />ã</para> + </listitem> + <listitem> + <para><literal>transformer-class-name</literal>ãå¯éç转æ¢å¨ç±»åãè¿æ¯ä¸ä¸ªç¨æ·å®ä¹ç + ç±»ï¼å®éè¦å®ç°æ¥å£<literal>org.hornetq.core.server.cluster.Transformer</literal> + ã</para> + <para>å¦ææå®äºè¿ä¸ªç±»ï¼æ¯å½ä¸ä¸ªæ¶æ¯è¢«è½¬åä¹åï¼å®ç<literal>transform()</literal>æ¹æ³ + å°±ä¼è¢«è°ç¨ãç¨æ·å©ç¨è¿ä¸ªæºä¼å¯ä»¥å¯¹æ¶æ¯æ¬èº«ææ¶æ¯å¤´ä¿¡æ¯è¿è¡ä¿®æ¹ã</para> + </listitem> + <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>reconnect-attempts</literal>ãå¯éåæ°ãå®è¡¨ç¤ºè¦è¿è¡å¤å°éè¯åææ¾å¼ + 并éåºã<literal>-1</literal>表示è¿è¡æ é次éè¯ãé»è®¤å¼æ¯<literal>ï¼1</literal>ã</para> + </listitem> + <listitem> + <para><literal>failover-on-server-shutdown</literal>ãå¯éåæ°ãå®æå®äºå½ç®çæå¡å¨æ£å¸¸ + éåºæ¶æ¡¥æ¯å¦å°è¯å¤±æå¤æ´ï¼failoverï¼å°å¤ä»½æå¡å¨ï¼å¦æé ç½®äºçè¯ï¼ä¸ã</para> + <para>æ¡¥çè¿æ¥å¨å¯ä»¥é ç½®ä¸ä¸ªä¸»æå¡å¨åä¸ä¸ªå¤ä»½æå¡å¨ãå¦æé ç½®äºå¤ä»½æå¡å¨ï¼å¹¶ä¸è¿ä¸ªåæ°æ¯ + <literal>true</literal>æ¶ï¼å¨ä¸»æå¡å¨æ£å¸¸éåºæ¶ï¼æ¡¥ä¼èªå¨å°è¿æ¥å°å¤ä»½æå¡å¨ä¸ç»§ç»å·¥ä½ã + å¦ææ¡¥çè¿æ¥å¨æ²¡æé ç½®å¤ä»½æå¡å¨ï¼åè¿ä¸ªåæ°ä¸èµ·ä½ç¨ã</para> + <para>ä½ çæ¡¥é ç½®äºå¤ä»½æå¡å¨åï¼ææ¶ä½ éè¦ä¸´æ¶å°ä¸»æå¡å¨å ³éè¿è¡ä¸äºç»´æ¤ï¼æ¤æ¶å¹¶ä¸å¸ææ¡¥è¿æ¥å°å¤ä»½æå¡ + å¨ä¸ã使ç¨è¯¥åæ°å°±å¯ä»¥è¾¾å°è¿ä¸ªç®çã</para> + <para>è¿ä¸ªåæ°çé»è®¤å¼æ¯<literal>false</literal>ã</para> + </listitem> + <listitem> + <para><literal>use-duplicate-detection</literal>ãå¯éåæ°ãå®æ§å¶æ¡¥æ¯å¦å¨è½¬åçæ¶æ¯ä¸èªå¨ + æ·»å ä¸ä¸ªéå¤IDçå±æ§ã</para> + <para>æ·»å è¿æ ·ä¸ä¸ªå±æ§å¯ä»¥ä½¿ç®çæå¡å¨å¯¹æ¥èªæºæå¡å¨çæ¶æ¯è¿è¡éå¤æ£æµãå½åºç°è¿æ¥æ éææå¡å¨å´©æºæ¶ï¼ + æ¡¥å¨æ¢å¤æ¶å°éæ°è½¬åé£äºæ²¡æ被éç¥çæ¶æ¯ãè¿å¨ç®çæå¡å¨ç«¯æå¯è½é æéå¤åéã使ç¨éå¤æ£æµåè½ï¼å¯ + 以å°éå¤åéçæ¶æ¯è¿æ»¤æã</para> + <para>使ç¨è¿ä¸ªåè½ï¼æå¡å¨å°±å¯ä»¥ä¿è¯ <emphasis>ä¸æ¬¡å¹¶ä¸åªæä¸æ¬¡</emphasis>çä¼ éï¼èä¸éè¦ä½¿ç¨ + éé级çæ¹æ³ï¼å¦XAï¼åè§ <xref + linkend="duplicate-detection"/>ï¼ã</para> + <para>é»è®¤çå¼æ¯<literal>true</literal>.</para> + </listitem> + <listitem> + <para><literal>confirmation-window-size</literal>ãè¿ä¸ªå¯éåæ°å³å®äºåç®çæå¡å¨è½¬åæ¶æ¯æ¶ + æ使ç¨ç确认çªå£ç大å°ã详ç»çæè¿°å¨<xref linkend="client-reconnection"/>ã</para> + <para> + <warning>å½æ¡¥ä»ä¸ä¸ªè®¾ç½®äºmax-size-bytesåæ°çéåæ¥æ¶å¹¶è½¬åæ¶æ¯æ¶ï¼ä¸ä¸ªéè¦çäºæ å°±æ¯è¦å° + confirmation-window-sizeçå¼è®¾ç½®ä¸ºå°äºçäº + <literal>max-size-bytes</literal>çå¼ï¼ä»¥é¿å é ææ¶æ¯æµçåæ¢ã</warning> + </para> + </listitem> + <listitem> + <para><literal>connector-ref</literal>ãè¿æ¯ä¸ä¸ªå¿ éçåæ°ãå®æå®äºæ¡¥ç¨æ¥è¿æ¥ç®çæå¡å¨ç + <emphasis>è¿æ¥å¨</emphasis>ã</para> + <para><emphasis>connector</emphasis>å å«äºæç¨çä¼ è¾ï¼TCP, SSL, HTTPçï¼ï¼ä»¥åæå¡å¨è¿æ¥åæ° + ï¼å¦ä¸»æºåï¼ç«¯å£çï¼ãå ³äºè¿æ¥å¨ç详ç»ä¿¡æ¯è¯·åè§ï¼<xref linkend="configuring-transports"/>ï¼ã</para> + <para><literal>connector-ref</literal>æ两个åæ°ï¼</para> + <itemizedlist> + <listitem> + <para><literal>connector-name</literal>ãè¿ä¸ªæçæ¯æ ¸å¿é ç½®æ件<literal + >hornetq-configuration.xml</literal>ä¸å®ä¹çè¿æ¥å¨çååãæ¡¥ä½¿ç¨ + è¿ä¸ªè¿æ¥å¨å建ä¸ç®çæå¡å¨çè¿æ¥ãè¿ä¸ªåæ°æ¯å¿ éæå®çã</para> + </listitem> + <listitem> + <para><literal>backup-connector-name</literal>ãè¿ä¸ªå¯éåæ°åæ ·æå®ä¸ä¸ªå¨æ ¸å¿ + é ç½®æ件<literal>hornetq-configuration.xml</literal>ä¸å®ä¹çè¿æ¥å¨ååã + å½ç®çæå¡å¨åºç°æ éæ¶ï¼æè æ£å¸¸éåºä½æ¯åæ°<literal + >failover-on-server-shutdown</literal>çå¼è®¾ä¸º<literal + >true</literal>æ¶ï¼æ¡¥ä½¿ç¨è¿ä¸ªåæ°æå®çè¿æ¥å¨éè¿å¤±æå¤æ´ï¼failoverï¼è¿æ¥ + å°å¤ç¨çæå¡å¨ã</para> + </listitem> + </itemizedlist> + </listitem> + <listitem> + <para><literal>user</literal>ãè¿ä¸ªå¯éåæ°æå®äºæ¡¥å¨å建ä¸è¿ç¨æå¡å¨è¿æ¥æ¶æç¨çç¨æ·åãå¦æ + 没ææå®ç¨æ·åï¼å¨é ç½®æ件<literal>hornetq-configuration.xml</literal>ä¸ + <literal>cluster-user</literal>æå®ä¹çé»è®¤é群ç¨æ·åå°è¢«ä½¿ç¨ã </para> + </listitem> + <listitem> + <para><literal>password</literal>ãè¿ä¸ªå¯éçåæ°ç»åºçæ¯æ¡¥å建ä¸è¿ç¨æå¡å¨è¿æ¥æ使ç¨çå¯ç ã + å¦æ没ææå®å¯ç ï¼å¨é ç½®æ件<literal>hornetq-configuration.xml</literal>ä¸ + <literal>cluster-password</literal>æå®ä¹çé»è®¤é群å¯ç å°è¢«ä½¿ç¨ã</para> + </listitem> + </itemizedlist> + </section> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/diagrams/architecture-diagrams.odg ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/diagrams/architecture-diagrams.odg b/docs/user-manual/zh/diagrams/architecture-diagrams.odg new file mode 100644 index 0000000..33d99cf Binary files /dev/null and b/docs/user-manual/zh/diagrams/architecture-diagrams.odg differ http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/diagrams/ha-replicated-store.odg ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/diagrams/ha-replicated-store.odg b/docs/user-manual/zh/diagrams/ha-replicated-store.odg new file mode 100644 index 0000000..495c672 Binary files /dev/null and b/docs/user-manual/zh/diagrams/ha-replicated-store.odg differ http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/diagrams/ha-shared-store.odg ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/diagrams/ha-shared-store.odg b/docs/user-manual/zh/diagrams/ha-shared-store.odg new file mode 100644 index 0000000..3b97692 Binary files /dev/null and b/docs/user-manual/zh/diagrams/ha-shared-store.odg differ http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/diverts.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/diverts.xml b/docs/user-manual/zh/diverts.xml new file mode 100644 index 0000000..fe51e6b --- /dev/null +++ b/docs/user-manual/zh/diverts.xml @@ -0,0 +1,86 @@ +<?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="diverts"> + <title>æ¶æ¯ç转åï¼divert)ä¸åæµ</title> + <para>å¨HornetQä¸å¯ä»¥é ç½®ä¸äºç§°ä¸ºè½¬åå¨ï¼<emphasis>diverts</emphasis>ï¼ç对象ã</para> + <para>转åå¨å¯ä»¥å°è·¯ç±å°ä¸ä¸ªå°åçæ¶æ¯éæå°è½¬åå°å ¶å®çå°åå»ï¼ä¸éè¦å®¢æ·ç«¯çåä¸ã</para> + <para>转åå¨å¯ä»¥æ¯<emphasis>å¯ä¸ï¼exclusiveï¼</emphasis>çï¼å³æ¶æ¯åªè½¬åå°æ°çå°åï¼ä¸åå°å + æ¥çå°åï¼ä¹å¯ä»¥æ¯<emphasis>ä¸å¯ä¸ï¼non-exclusiveï¼</emphasis>çï¼å³æ¶æ¯å¨åå¾åæå°åç + åæ¶ï¼å®çä¸ä¸ª<emphasis>æ·è´</emphasis>被åå¾æ°çå°åãä¸å¯ä¸ç转åå¨å¯ä»¥å¨åºç¨ä¸å°æ¶æ¯è¿è¡ + <emphasis>åæµï¼splittingï¼</emphasis>ãæ¯å¦å¨ä¸ä¸ªè®¢åç³»ç»ä¸å®å¯ä»¥ç¨äºçè§åå¾è®¢åéåä¸ + çæ¯ä¸ªè®¢åæ¶æ¯ã</para> + <para>转åå¨è¿å¯ä»¥å¸¦ä¸ä¸ªå¯éçæ¶æ¯éæ©å¨ãåªæ被éæ©å¨éæ©çæ¶æ¯æä¼è¢«è½¬åã</para> + <para>转åå¨è¿å¯ä»¥å¸¦æä¸ä¸ª<literal>转æ¢å¨ï¼Transformerï¼</literal>ãå®å¯ä»¥å°æ¶æ¯è¿è¡è½¬æ¢ã</para> + <para>转åå¨åªå¨åä¸ä¸ªæå¡å¨ä¸çå°åé´è¿è¡è½¬åãå¦æè¦åå¦å¤æå¡å¨ä¸çå°åè¿è¡è½¬åï¼å¯ä»¥éç¨è½¬åå¨ä¸æ¡¥é å + æ¥å®ç°ãå å°æ¶æ¯éè¿è½¬åå¨è½¬åå°ä¸ä¸ªåå¨ä¸è½¬åçéåä¸ï¼åç±ä¸ä¸ªæ¡¥å°è¿ä¸ªéåçæ¶æ¯è½¬åå°è¿ç¨æå¡å¨çç®ç + å°åä¸ã</para> + <para>ç±è½¬åå¨ä¸æ¡¥è¿è¡é åå¯ä»¥ç»æå¤æçè·¯ç±ç³»ç»ãå¨æå¡å¨ä¸ç±ä¸ç»è½¬åå¨å¯ä»¥å½¢æä¸ä¸ªæ¶æ¯è·¯ç±è¡¨ãå¦æå ä¸æ¡¥ï¼å°± + å¯ä»¥è¿ä¸æ¥å½¢æä¸ä¸ªåå¸å¼çå¯é çæ¶æ¯è·¯ç±ç½ã</para> + <para>转åå¨çé ç½®å¨<literal>hornetq-configuration.xml</literal>ä¸å®ä¹ãå¯ä»¥é ç½®é¶ä¸ªæå¤ä¸ªè½¬åå¨ã</para> + <para>åè§è½¬åå¨çä¾å<xref linkend="divert-example" />ï¼å®å±ç¤ºäºå¦ä½é ç½®ä¸ä½¿ç¨è½¬åå¨ã</para> + <para>让æ们çä¸äºè½¬åå¨çé ç½®ä¾åï¼</para> + <section> + <title>å¯ä¸å¼è½¬åå¨</title> + <para>ä¸é¢æ¯ä¸ä¸ªå¯ä¸å¼è½¬åå¨çä¾åãå®å°ææ符åæ¡ä»¶çæ¶æ¯è½¬åå°æ°çå°åï¼èæ§çå°åå°ä¸è½å¾å°è¿äºæ¶æ¯ã</para> + <para>以ä¸é ç½®æ¥èªäºdivertä¾åï¼</para> + <programlisting> +<divert name="prices-divert"> + <address>jms.topic.priceUpdates</address> + <forwarding-address>jms.queue.priceForwarding</forwarding-address> + <filter string="office='New York'"/> + <transformer-class-name> + org.hornetq.jms.example.AddForwardingTimeTransformer + </transformer-class-name> + <exclusive>true</exclusive> +</divert> + </programlisting> + <para>å¨è¿éæ们å®ä¹äºä¸ç¸å为â<literal>prices-divert</literal>âç转åå¨ï¼å®å°åå¾ + â<literal>jms.topic.priceUpdates</literal>âï¼å¯¹åºJMSè¯é¢<literal + >priceUpdates</literal>ï¼çæ¶æ¯è½¬åå¦ä¸ä¸ªæ¬å°å°åâ<literal + >jms.queue.priceForwarding</literal>âï¼å¯¹åºJMSéå + <literal>priceForwarding</literal>ï¼ã</para> + <para>æ们è¿é ç½®äºä¸ç¸æ¶æ¯è¿æ»¤å¨ãåªæ<literal>office</literal>å±æ§å¼ä¸º<literal>New York</literal> + çæ¶æ¯æ被转åå°æ°å°åï¼å ¶å®æ¶æ¯å继ç»åå¾åå°åãå¦æ没æå®ä¹è¿æ»¤å¨ï¼æææ¶æ¯å°è¢«è½¬åã</para> + <para>æ¬ä¾ä¸è¿é ç½®äºä¸ä¸ªè½¬æ¢å¨çç±»ãå½æ¯è½¬åä¸ä¸ªæ¶æ¯æ¶ï¼è¯¥è½¬æ¢å¨å°±è¢«æ§è¡ä¸æ¬¡ã转æ¢å¨å¯ä»¥å¯¹æ¶æ¯å¨è½¬ååè¿è¡ + æ´æ¹ãè¿éç转æ¢å¨åªæ¯å¨æ¶æ¯ä¸å å ¥äºä¸ä¸ªè®°å½è½¬åæ¶é´çæ¶æ¯å¤´ã</para> + <para>æ¬ä¾ä¸æ¶æ¯è¢«è½¬åå°ä¸ä¸ªâåè´®ä¸è½¬åæ¯âéåï¼ç¶åéè¿ä¸ä¸ªæ¡¥å°æ¶æ¯è½¬åå°å¦ä¸ä¸ªHornetQæå¡å¨ä¸ã</para> + </section> + <section> + <title>ä¸å¯ä¸è½¬åå¨</title> + <para>ä¸é¢æ们æ¥çä¸ä¸ªä¸å¯ä¸ç转åå¨ãä¸å¯ä¸è½¬åå¨å°æ¶æ¯ç<emphasis>æ·è´</emphasis>转åå°æ°çå°åä¸ï¼ + åæ¶æ¯å继ç»åå¾åæå°åã</para> + <para>å æ¤ä¸å¯ä¸è½¬åå¨å¯ä»¥å°æ¶æ¯è¿è¡åæµï¼splittingï¼ã</para> + <para>ä¸å¯ä¸è½¬åå¨çé ç½®ä¸å¯ä¸è½¬åå¨çé ç½®ä¸ä¸æ ·çï¼ä¹å¯ä»¥å¸¦ä¸ä¸ªå¯éçè¿æ»¤å¨å转æ¢å¨ãä¸é¢çé ç½®ä¹æ¯åºèª + divertä¾åï¼</para> + <programlisting> +<divert name="order-divert"> + <address>jms.queue.orders</address> + <forwarding-address>jms.topic.spyTopic</forwarding-address> + <exclusive>false</exclusive> +</divert> + </programlisting> + <para>The above divert example takes a copy of every message sent to the address '<literal + >jms.queue.orders</literal>' (Which corresponds to a JMS Queue called '<literal + >orders</literal>') and sends it to a local address called '<literal + >jms.topic.SpyTopic</literal>' (which corresponds to a JMS Topic called '<literal + >SpyTopic</literal>').</para> + </section> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/duplicate-detection.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/duplicate-detection.xml b/docs/user-manual/zh/duplicate-detection.xml new file mode 100644 index 0000000..de675ac --- /dev/null +++ b/docs/user-manual/zh/duplicate-detection.xml @@ -0,0 +1,120 @@ +<?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="duplicate-detection"> + <title>éå¤æ¶æ¯æ£æµ</title> + <para>HornetQå ·æ强大çèªå¨æ£æµéå¤æ¶æ¯çåè½ãåºç¨å±æ éå®ç°å¤æçéå¤æ£æµãæ¬ç« 解éäºä»ä¹æ¯éå¤æ£æµï¼å® + å¨HornetQä¸å¦ä½å·¥ä½çï¼ä»¥åå¦ä½è¿è¡é ç½®ã</para> + <para>å½å®¢æ·ç«¯åæå¡å¨ç«¯åéæ¶æ¯æ¶ï¼æè ä»ä¸ä¸ªæå¡å¨åå¦ä¸ä¸ªæå¡å¨ä¼ éæ¶æ¯æ¶ï¼å¦ææ¶æ¯åéåç®æ æå¡å¨æè + è¿æ¥åºç°æ éï¼å¯¼è´åéä¸æ¹æ²¡ææ¶å°åéæåç确认信æ¯ï¼åéæ¹å æ¤å°±æ æ³ç¡®å®æ¶æ¯æ¯å¦å·²ç»æååéå°äºç®æ å° + åã</para> + <para>å¦æä¸è¿°çæ éåçå¨æ¶æ¯è¢«æåæ¥æ¶å¹¶å¤çåï¼ä½æ¯å¨ååéæ¹è¿ååè½ç¡®è®¤ä¿¡æ¯ä¹åï¼é£ä¹æ¶æ¯å®é ä¸å¯ä»¥å°è¾¾ + å ¶ç®çå°åï¼å¦ææ éåçå¨æ¶æ¯çæ¥æ¶åå¤çè¿ç¨ä¸ï¼åæ¶æ¯ä¸ä¼å°è¾¾å ¶ç®çå°åãä»åéæ¹çè§åº¦çï¼å®æ æ³åºå + è¿ä¸¤ç§æ åµã</para> + <para>å½æå¡å¨æ¢å¤åï¼å®¢æ·ç«¯é¢ä¸´çå°é¾çéæ©ãå®ç¥éæå¡å¨åºäºæ éï¼ä½æ¯ä¸ç¥éåååéçæ¶æ¯æ¯å¦æåå°è¾¾ç®ç + å°åãå¦æå®éæ°åéè¿ä¸ªæ¶æ¯ï¼å°±æå¯è½é ææ¶æ¯çéå¤ãå¦æè¿ä¸ªæ¶æ¯æ¯ä¸ä¸ªè®¢åçè¯ï¼éå¤åéæ¶æ¯å°±ä¼äº§ç两 + 个ç¸åç订åï¼è¿å½ç¶ä¸æ¯æå¸æççµæã</para> + <para>å°æ¶æ¯çåéæ¾å°ä¸ä¸ªäºå¡ä¸ä¹ä¸è½è§£å³è¿ä¸ªé®é¢ãå¦æå¨äºå¡æ交çè¿ç¨ä¸åçæ éï¼åæ ·ä¸è½ç¡®å®è¿ä¸ªäºå¡æ¯å¦æ交 + æåï¼</para> + <para>为äºè§£å³è¿ä¸ªé®é¢ï¼HornetQæä¾äºèªå¨æ¶æ¯éå¤æ£æµåè½ã</para> + <section> + <title>å¨æ¶æ¯åéä¸åºç¨éå¤æ£æµ</title> + <para>å¨æ¶æ¯åéä¸å¯ç¨éå¤æ£æµåè½ååç®åï¼ä½ åªéå°æ¶æ¯çä¸ä¸ªç¹æ®å±æ§è®¾ç½®ä¸ä¸ªå¯ä¸å¼ãä½ å¯ä»¥ç¨ä»»ææ¹æ³æ¥ + 计ç®è¿ä¸ªå¼ï¼ä½æ¯è¦ä¿è¯å®çå¯ä¸æ§ãå½ç®æ æå¡å¨æ¥æ¶å°è¿ä¸ªæ¶æ¯æ¶ï¼å®ä¼æ£æ¥è¿ä¸ªå±æ§æ¯å¦è¢«è®¾ç½®ï¼å¦æ设置äºï¼ + å°±æ£æ¥å åç¼åä¸æ¯å¦å·²ç»æ¥æ¶å°äºç¸åå¼çæ¶æ¯ãå¦æåç°å·²ç»æ¥æ¶è¿å ·æç¸åå±æ§å¼çæ¶æ¯ï¼å®å°å¿½ç¥è¿ä¸ªæ¶æ¯ã</para> + <note> + <para>å¨èç¹ä¹é´çæ¶æ¯ä¼ é使ç¨éå¤æ¶æ¯æ£æµå¯ä»¥ä¿è¯<emphasis>ä¸æ¬¡ä¸åªä¸æ¬¡</emphasis>çä¼ éï¼åä½¿ç¨ + XAäºå¡æ¥æ¶æ¶æ¯çææä¸æ ·ï¼ä½æ¯æ¯XAæ¶èçèµæºè¦å°ï¼å¹¶ä¸æ´å®¹æã</para> + </note> + <para>å¦ææ¯å¨ä¸ä¸ªäºå¡ä¸åéæ¶æ¯ï¼ååªéè¦è®¾ç½®å ¶ä¸ä¸ä¸ªæ¶æ¯çå±æ§å¼ãå¨æå¡å¨ç«¯å¦ææå¡å¨æ£æµå°ä¸ä¸ªäºå¡ä¸æä¸ä¸ª + æ¶æ¯éå¤ï¼åä¼å¿½ç¥æ´ä¸ªäºå¡ã</para> + <para>è¿ä¸ªå±æ§çå称ç±<literal + >org.hornetq.api.core.HDR_DUPLICATE_DETECTION_ID</literal>å®ä¹ï¼å³ï¼ + <literal>_HQ_DUPL_ID</literal>ã</para> + <para>该å±æ§çå¼å¯ä»¥æ¯<literal>byte[]</literal>ç±»åæ<literal + >SimpleString</literal>ç±»åï¼æ ¸å¿æ¥å£ï¼ãå¦æ使ç¨JMSï¼å®å¿ é¡»æ¯<literal>String</literal> + ç±»åãå®çå¼ä¸å®æ¯å¯ä¸çãä¸ä¸ªç®åçæ¹æ³æ¯ä½¿ç¨UUIDã</para> + <para>ä¸é¢æ¯ä¸ä¸ªä½¿ç¨æ ¸å¿æ¥å£è®¾ç½®è¿ä¸ªå±æ§çä¾åï¼</para> + <programlisting> +... + +ClientMessage message = session.createMessage(true); + +SimpleString myUniqueID = "This is my unique id"; // Could use a UUID for this + +message.setStringProperty(HDR_DUPLICATE_DETECTION_ID, myUniqueID); + +... + </programlisting> + <para>ä¸é¢åæ¯ä¸ä¸ªä½¿ç¨JMSçä¾åï¼</para> + <programlisting> +... + +Message jmsMessage = session.createMessage(); + +String myUniqueID = "This is my unique id"; // Could use a UUID for this + +message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID); + +... + </programlisting> + </section> + <section id="duplicate.id.cache"> + <title>é ç½®éå¤IDç¼å</title> + <para>æå¡å¨ç¼åä¸ä¿åæ¥æ¶å°çæ¶æ¯ç<literal + >org.hornetq.core.message.impl.HDR_DUPLICATE_DETECTION_ID</literal>å±æ§å¼ãæ¯ä¸ªå°åæ + åç¬çç¼åã</para> + <para>ç¼åç大å°æ¯åºå®çï¼å¾ªç¯ä½¿ç¨ãå¦æç¼åçæ大å¯ä»¥åæ¾<literal + >n</literal>æ¡è®°å½ï¼é£ä¹<literal>n + 1</literal>æ¡è®°å½å°ä¼è¦çç¼åä¸ç第<literal>0</literal> + æ¡è®°å½ã</para> + <para>ç¼åçæ大容éå¨æ件<literal>hornetq-configuration.xml</literal>ä¸é ç½®ï¼åæ°æ¯<literal + >id-cache-size</literal>ãé»è®¤å¼æ¯<literal>2000</literal>æ¡è®°å½ã</para> + <para>å¨æ件<literal>hornetq-configuration.xml</literal>ä¸è¿å¯ä»¥é ç½®å°ç¼åæä¹ åå°ç£çãç¸åºçåæ° + æ¯<literal>persist-id-cache</literal>ãå¦æ设为<literal>true</literal>ï¼åæ¯å å ¥ä¸ä¸ªidå°±å° + å®åæ¶ä¿åå°ç£çä¸ãé»è®¤å¼æ¯<literal>true</literal>ã</para> + <note> + <para>注æå¨è®¾ç½®ç¼å大å°æ¶ï¼ä¸å®è¦ä¿è¯ç¼åè½ä¿åè¶³å¤ æ°éçè®°å½ï¼å½æ¶æ¯è¢«éæ°åéæ¶ï¼ä¹ååéçIDä¸è¢« + è¦çæã</para> + </note> + </section> + <section> + <title>æ¡¥ä¸éå¤æ£æµ</title> + <para>æ ¸å¿æ¡¥å¯ä»¥éè¿é ç½®å¨å°æ¶æ¯ååç®çæå¡å¨ä¹åèªå¨åæ¶æ¯ä¸æ·»å å¯ä¸çidï¼å¦ææ¶æ¯ä¸è¿æ²¡æçè¯ï¼ãè¿æ · + å¦æç®çæå¡å¨åçæ éï¼æ ¸å¿æ¡¥å¨éæ°åéæ¶æ¯æ¶ï¼ç®çæå¡å¨å°±å¯ä»¥èªå¨æ£æµéå¤çæ¶æ¯ï¼åç°éå¤æ¶æ¯å³ä¸¢å¼ã</para> + <para>è¦é ç½®æ ¸å¿æ¡¥çèªå¨æ·»å idçåè½ï¼éè¦å¨<literal>hornetq-configuration.xml</literal>ä¸æ¡¥çé ç½® + éå°<parameter>use-duplicate-detection</parameter>åæ°è®¾ä¸º<literal>true</literal>ã</para> + <para>è¿ä¸ªåæ°çé»è®¤å¼æ¯<literal>true</literal>ã</para> + <para>å ³äºæ ¸å¿æ¡¥çé ç½®å使ç¨ï¼åè§<xref linkend="core-bridges" />ã</para> + </section> + <section> + <title>éå¤æ£æµä¸é群è¿æ¥</title> + <para>é群è¿æ¥å é¨ä½¿ç¨æ ¸å¿æ¡¥å¨èç¹é´å¯é å°ç§»å¨æ¶æ¯ï¼å æ¤å®ä»¬çæ ¸å¿æ¡¥ä¹å¯ä»¥é ç½®èªå¨æ·»å idçåè½ã</para> + <para>é ç½®çæ¹æ³æ¯å¨<literal>hornetq-configuration.xml</literal>æ件ä¸å°é群è¿æ¥ç + <parameter>use-duplicate-detection</parameter>åæ°è®¾ä¸º<literal>true</literal>ã</para> + <para>è¿ä¸ªåæ°çé»è®¤å¼æ¯<literal>true</literal>ã</para> + <para>æå ³é群è¿æ¥é ç½®çæ´å¤ä¿¡æ¯ï¼è¯·åè§<xref linkend="clusters"/>ã</para> + </section> + <section> + <title>å页转åä¸éå¤æ£æµ</title> + <para>HornetQå¨å°æ¶æ¯è¿è¡å页转åä¸ä¹ä½¿ç¨äºéå¤æ£æµãå½å页转åæ¶æ¯è¢«ä»ç£çä¸è¯»åå°å åæ¶ï¼å¦ææå¡å¨åçæ éï¼ + éå¤æ£æµå¯ä»¥é¿å å¨è¿ä¸è¿ç¨ä¸ææ¶æ¯è¢«éå¤è¯»å ¥ï¼å³é¿å äºæ¶æ¯çéå¤ä¼ éã</para> + <para>å ³äºå页转åçé 置信æ¯è¯·åè§<xref linkend="paging" />ã</para> + </section> +</chapter> http://git-wip-us.apache.org/repos/asf/activemq-6/blob/8ecd255f/docs/user-manual/zh/embedding-hornetq.xml ---------------------------------------------------------------------- diff --git a/docs/user-manual/zh/embedding-hornetq.xml b/docs/user-manual/zh/embedding-hornetq.xml new file mode 100644 index 0000000..1569b01 --- /dev/null +++ b/docs/user-manual/zh/embedding-hornetq.xml @@ -0,0 +1,178 @@ +<?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="embedding-hornetq"> + <title>åµå ¥å¼HornetQ</title> + <para>HornetQæ¯ç±ç®åä¼ ç»Java对象ï¼POJOï¼å®ç°ï¼å æ¤å®å¯ä»¥å¨ä»»ä½ä¾èµæ³¨å ¥çæ¡æ¶ä¸è¿è¡ï¼æ¯å¦JBoss + Microcontainerï¼SprintæGoogle Guiceãå¦å¤å¦æä½ çåºç¨ç¨åºå é¨éè¦æ¶æ¯åè½ï¼ä½ å¯ä»¥å¨ç¨åºä¸ + <emphasis>ç´æ¥å®ä¾å</emphasis>HornetQç客æ·ç«¯ææå¡å¨ç«¯ãæ们称ä¹ä¸º<emphasis>åµå ¥å¼</emphasis> + HornetQã</para> + <para>æäºåºç¨éè¦é«æ§è½ãäºå¡æ§åæä¹ åçæ¶æ¯æå¡ï¼ä½æ¯åä¸å¸æèªå·±å»è´¹æ¶è´¹åå®ç°å®ãäºæ¯åµå ¥å¼HornetQå°± + æ为äºä¸ä¸ªå¾éå½çéæ©ã</para> + <para>è¦ä½¿ç¨åµå ¥å¼HornetQåªéè¦å 个ç®åçæ¥éª¤ãé¦å åå§åé 置对象ï¼ååå§åæå¡å¨å¹¶å¯å¨å®ï¼å¨ä½ çèææº + ä¸å°±è¿è¡è¶æ¥äºä¸ä¸ªHornetQæå¡å¨ãå°±æ¯è¿ä¹ç®åã</para> + <section> + <title>POJOçåå§å</title> + <para>æç §ä»¥ä¸æ¥éª¤å»åï¼</para> + <para>å建é 置对象ï¼ï¼è¿ä¸ªå¯¹è±¡å è£ äºHornetQçé 置信æ¯ãå¦æä½ æ³ä½¿ç¨é ç½®æ件ï¼å使ç¨<literal + >FileConfigurationImpl</literal>ã</para> + <programlisting>import org.hornetq.core.config.Configuration; +import org.hornetq.core.config.impl.FileConfiguration; + +... + + +Configuration config = new FileConfiguration(); +config.setConfigurationUrl(urlToYourconfigfile); +config.start();</programlisting> + <para>å¦æä¸éè¦é ç½®æ件ï¼å¯ä»¥ç¨<literal>ConfigurationImpl</literal>ï¼åªè¦å°å ¶ä¸çåç§é ç½®åæ°è®¾ç½®å¥½ + å³å¯ãå¦æ·»å éå½çæ¥æ¶å¨ã</para> + <para><literal>ConfigurationImpl</literal>ç¨æ¥é ç½®æ¥æ¶å¨ãå主è¦é ç½®æ件ç¸ä¼¼ï¼åªéè¦æ·»å + <literal>NettyAcceptorFactory</literal>å³å¯ã</para> + <programlisting>import org.hornetq.core.config.Configuration; +import org.hornetq.core.config.impl.ConfigurationImpl; + +... + +Configuration config = new ConfigurationImpl(); +HashSet<TransportConfiguration> transports = new HashSet<TransportConfiguration>(); + +transports.add(new TransportConfiguration(NettyAcceptorFactory.class.getName())); +transports.add(new TransportConfiguration(InVMAcceptorFactory.class.getName())); + +config.setAcceptorConfigurations(transports);</programlisting> + <para>æ¥çå°±éè¦åå§å并å¯å¨HornetQæå¡ã<literal + >org.hornetq.api.core.server.HornetQ</literal>ç±»æä¸äºéææ¹æ³å¯ç¨æ¥å建HornetQæå¡å¨ã</para> + <programlisting>import org.hornetq.api.core.server.HornetQ; +import org.hornetq.core.server.HornetQServer; + +... + +HornetQServer server = HornetQ.newHornetQServer(config); + +server.start();</programlisting> + <para>ä½ è¿å¯ä»¥ç´æ¥å®ä¾å<literal>HornetQServerImpl</literal>ï¼</para> + <programlisting>HornetQServer server = + new HornetQServerImpl(config); +server.start();</programlisting> + </section> + <section> + <title>使ç¨ä¾èµæ³¨å ¥æ¡æ¶</title> + <para>ä½ è¿å¯ä»¥ä½¿ç¨ä¸ä¸ªä¾èµæ³¨å ¥æ¡æ¶æ¥å¯å¨HornetQï¼æ¯å¦<trademark>JBoss + Microcontainer</trademark>æ<trademark>Springæ¡æ¶</trademark>ã</para> + <para>HornetQç¬ç«æå¡å¨ä½¿ç¨çæ¯JBoss Microcontainerä½ä¸ºå ¶æ¡æ¶ãå¨HornetQçåå¸ä¸å æ¬ç<literal + >HornetQBootstrapServer</literal>å<literal>hornetq-beans.xml</literal>æä»¶å ±åå®ç°äº + å¨JBoss Microcontainerä¸å¯¹HornetQæå¡å¨çå¼å¯¼ã</para> + <para>è¦ä½¿ç¨JBoss Microcontainerï¼éè¦å¨xmlæ件ä¸å£°æ<literal>HornetQServer</literal> + å<literal>Configuration</literal>对象ãå¦å¤è¿å¯ä»¥æ³¨å ¥ä¸ä¸ªå®å ¨ç®¡çå¨åä¸ä¸ªMBeanæå¡å¨ãä½æ¯è¿äº + æ³¨å ¥æ¯å¯éçã</para> + <para>ä¸é¢æ¯ä¸ä¸ªåºæ¬çJBoss MicrocontainerçXML Beanç声æï¼</para> + <programlisting><?xml version="1.0" encoding="UTF-8"?> + +<deployment xmlns="urn:jboss:bean-deployer:2.0"> + + <!-- The core configuration --> + <bean name="Configuration" + class="org.hornetq.core.config.impl.FileConfiguration"> + </bean> + + <!-- The core server --> + <bean name="HornetQServer" + class="org.hornetq.core.server.impl.HornetQServerImpl"> + <constructor> + <parameter> + <inject bean="Configuration"/> + </parameter> + </constructor> + </bean> + </deployment></programlisting> + <para><literal>HornetQBootstrapServer</literal>å®ç°äºJBoss Microcontainerçç®åå°è£ ã</para> + <programlisting>HornetQBootstrapServer bootStrap = + new HornetQBootstrapServer(new String[] {"hornetq-beans.xml"}); + bootStrap.run();</programlisting> + </section> + <section> + <title>è¿æ¥åµå ¥å¼HornetQ</title> + <para>åµå ¥å¼HornetQçè¿æ¥åæ®éçè¿æ¥ä¸æ ·è¦å建è¿æ¥å·¥åï¼</para> + <section> + <title>æ ¸å¿æ¥å£</title> + <para>使ç¨æ ¸å¿æ¥å£ï¼éè¦å建ä¸ä¸ª<literal>ClientSessionFactory</literal>ç¶åæ£å¸¸å»ºç«è¿æ¥ã</para> + <programlisting>ClientSessionFactory nettyFactory = HornetQClient.createClientSessionFactory( + new TransportConfiguration( + InVMConnectorFactory.class.getName())); + +ClientSession session = factory.createSession(); + +session.createQueue("example", "example", true); + +ClientProducer producer = session.createProducer("example"); + +ClientMessage message = session.createMessage(true); + +message.getBody().writeString("Hello"); + +producer.send(message); + +session.start(); + +ClientConsumer consumer = session.createConsumer("example"); + +ClientMessage msgReceived = consumer.receive(); + +System.out.println("message = " + msgReceived.getBody().readString()); + +session.close();</programlisting> + </section> + <section> + <title>JMSæ¥å£</title> + <para>使ç¨JMSæ¥å£è¿æ¥åµå ¥HornetQåæ ·ç®åãåªéè¦ç´æ¥å®ä¾å + <literal>ConnectionFactory</literal>å³å¯ãå¦ä¸é¢ä¾åæ示ï¼</para> + <programlisting>ConnectionFactory cf = + HornetQJMSClient.createConnectionFactory( + new TransportConfiguration(InVMConnectorFactory.class.getName())); + +Connection conn = cf.createConnection(); + +conn.start(); + +Session sess = conn.createSession(true, Session.SESSION_TRANSACTED); + +MessageProducer prod = sess.createProducer(queue); + +TextMessage msg = sess.createTextMessage("Hello!"); + +prod.send(msg); + +sess.commit(); + +MessageConsumer consumer = sess.createConsumer(queue); + +TextMessage txtmsg = (TextMessage)consumer.receive(); + +System.out.println("Msg = " + txtmsg.getText()); + +sess.commit(); + +conn.close();</programlisting> + </section> + </section> + <section> + <title>JMSåµå ¥å¼HornetQçä¾å</title> + <para>æå ³å¦ä½è®¾ç½®ä¸è¿è¡JMSåµå ¥å¼HornetQçä¾å请åè§<xref linkend="examples.embedded"/>ã</para> + </section> +</chapter>