Author: gaohoward
Date: 2010-05-08 07:07:45 -0400 (Sat, 08 May 2010)
New Revision: 9210
Modified:
branches/HnetQ_323_cn/docs/user-manual/zh/client-classpath.xml
branches/HnetQ_323_cn/docs/user-manual/zh/client-reconnection.xml
branches/HnetQ_323_cn/docs/user-manual/zh/clusters.xml
branches/HnetQ_323_cn/docs/user-manual/zh/configuring-transports.xml
branches/HnetQ_323_cn/docs/user-manual/zh/examples.xml
branches/HnetQ_323_cn/docs/user-manual/zh/flow-control.xml
branches/HnetQ_323_cn/docs/user-manual/zh/ha.xml
branches/HnetQ_323_cn/docs/user-manual/zh/interoperability.xml
branches/HnetQ_323_cn/docs/user-manual/zh/management.xml
Log:
sync doc
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/client-classpath.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/client-classpath.xml 2010-05-08 09:04:14 UTC
(rev 9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/client-classpath.xml 2010-05-08 11:07:45 UTC
(rev 9210)
@@ -27,7 +27,7 @@
<section>
<title>使用HornetQ内核的客户端</title>
<para>如果客户端只使用HornetQ内核(非JMS客户端),需要将 <literal
- >hornetq-core-client.jar</literal>、
<literal>hornetq-transports.jar</literal> 和
+ >hornetq-core-client.jar</literal>和
<literal>netty.jar</literal> 放到classpath中。</para>
</section>
<section>
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/client-reconnection.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/client-reconnection.xml 2010-05-08 09:04:14
UTC (rev 9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/client-reconnection.xml 2010-05-08 11:07:45
UTC (rev 9210)
@@ -38,9 +38,9 @@
confirmation-window-size</literal>项。如果你并不将JMS连接工厂注册到JNDI,则你需要在
<literal>HornetQConnectionFactory</literal>上使用相应的方法直接设置该参数。</para>
<para>如果使用核心服务,你可以直接在<literal>ClientSessionFactory</literal>实例上直接设置该参数。</para>
- <para>参数的单位是字节,默认值是<literal>1MiB</literal>。</para>
+ <para>参数的单位是字节。</para>
<para>如果该参数是值设为<literal>-1</literal>,则关闭缓存,即关闭了重新恢复功能,迫使进行重新连接。默认
- 值是<literal>-1</literal>。</para>
+ 值是<literal>-1</literal>(表示没有自动恢复)。</para>
</section>
<section>
<title>会话重新连接</title>
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/clusters.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/clusters.xml 2010-05-08 09:04:14 UTC (rev
9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/clusters.xml 2010-05-08 11:07:45 UTC (rev
9210)
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
-
<!-- =============================================================================
-->
<!-- Copyright © 2009 Red Hat, Inc. and others.
-->
<!--
-->
@@ -17,7 +16,6 @@
<!-- 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>
@@ -65,10 +63,11 @@
<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>1000</broadcast-period>
+ <broadcast-period>2000</broadcast-period>
<connector-ref connector-name="netty-connector"
backup-connector="backup-connector"/>
</broadcast-group>
@@ -86,7 +85,8 @@
</listitem>
<listitem>
<para><literal>local-bind-port</literal>。这个参数指定了套接字的本地绑定端口。通常情况下
-
可以使用其默认值<literal>-1</literal>,表示使用随机的端口。</para>
+ 可以使用其默认值<literal>-1</literal>,表示使用随机的端口。这个参数总是和
+
<literal>local-bind-address</literal>一起定义。</para>
</listitem>
<listitem>
<para><literal>group-address</literal>。这个参数指定的是广播地址。它是一个D类的IP地址,
@@ -131,6 +131,7 @@
在<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>
@@ -142,6 +143,10 @@
<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>
@@ -188,10 +193,10 @@
Connection jmsConnection2 =
jmsConnectionFactory.createConnection();</programlisting></para>
<para><literal>refresh-timeout</literal>参数可以直接在连接工厂上使用
<literal>setDiscoveryRefreshTimeout()</literal>方法设置。</literal></para>
-
<para>连接工厂还有一个方法<literal>setInitialWaitTimeout()</literal>。它可以设置连接工厂的
+
<para>连接工厂还有一个方法<literal>setDiscoveryInitialWaitTimeout()</literal>。它可以设置连接工厂的
初始等待时间。当一个连接工厂被创建后立即进行用于创建连接的话,连接工厂可能没有足够的时间来接收各
个服务器发出的广播信息,也就无法建立完整的服务器列表。有了这个参数,连接工厂会在首次创建连接时
-
等待一定的时间,以接收广播。默认值是<literal>2000</literal>毫秒。</para>
+
等待一定的时间,以接收广播。默认值是<literal>10000</literal>毫秒。</para>
</section>
<section>
<title>使用核心API的客户端的配置</title>
@@ -208,10 +213,10 @@
</para>
<para>方法<literal>setDiscoveryRefreshTimeout()</literal>可以用来直接设置参数
<literal>refresh-timeout</literal>。</para>
-
<para>会话工厂还有一个方法<literal>setInitialWaitTimeout()</literal>。它可以设置会话工厂的
+
<para>会话工厂还有一个方法<literal>setDiscoveryInitialWaitTimeout()</literal>。它可以设置会话工厂的
初始等待时间。当一个会话工厂被创建后立即进行用于创建连接的话,该会话工厂可能没有足够的时间来接收各
个服务器发出的广播信息,也就无法建立完整的服务器列表。有了这个参数,会话工厂会在首次创建连接时
-
等待一定的时间,以接收广播。默认值是<literal>2000</literal>毫秒。</para>
+
等待一定的时间,以接收广播。默认值是<literal>10000</literal>毫秒。</para>
</section>
</section>
</section>
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/configuring-transports.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/configuring-transports.xml 2010-05-08
09:04:14 UTC (rev 9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/configuring-transports.xml 2010-05-08
11:07:45 UTC (rev 9210)
@@ -28,7 +28,7 @@
<acceptors>
<acceptor name="netty">
<factory-class>
-org.hornetq.integration.transports.netty.NettyAcceptorFactory
+org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory
</factory-class>
<param key="port" value="5446"/>
</acceptor>
@@ -46,7 +46,7 @@
中定义的是键-值对(key-value)。这些参数用来配置某个传输实现。不同传输有不同的配置参数。</para>
<para>像IP地址、端口号等都是传输配置参数的例子。</para>
</section>
- <section id="understanding.connectors">
+ <section id="configuring-transports.connectors">
<title>连接器(Connectors)</title>
<para>接收器定义的是如何在服务器端接收连接,而连接器则是定义客户端如何连接到服务器。</para>
<para>以下是<literal>hornetq-configuration.xml</literal>文件中一个连接器配置的例子。</para>
@@ -54,7 +54,7 @@
<connectors>
<connector name="netty">
<factory-class>
- org.hornetq.integration.transports.netty.NettyConnectorFactory
+ org.hornetq.core.remoting.impl.netty.NettyConnectorFactory
</factory-class>
<param key="port" value="5446"/>
</connector>
@@ -103,12 +103,12 @@
<programlisting>
Map<String, Object> connectionParams = new HashMap<String,
Object>();
-connectionParams.put(org.hornetq.integration.transports.netty.TransportConstants.PORT_PROP_NAME,
+connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.PORT_PROP_NAME,
5446);
TransportConfiguration transportConfiguration =
new TransportConfiguration(
- "org.hornetq.integration.transports.netty.NettyConnectorFactory",
+ "org.hornetq.core.remoting.impl.netty.NettyConnectorFactory",
connectionParams);
ClientSessionFactory sessionFactory =
HornetQClient.createClientSessionFactory(transportConfiguration);
@@ -122,11 +122,11 @@
<programlisting>
Map<String, Object> connectionParams = new HashMap<String,
Object>();
-connectionParams.put(org.hornetq.integration.transports.netty.TransportConstants.PORT_PROP_NAME,
5446);
+connectionParams.put(org.hornetq.core.remoting.impl.netty.TransportConstants.PORT_PROP_NAME,
5446);
TransportConfiguration transportConfiguration =
new TransportConfiguration(
- "org.hornetq.integration.transports.netty.NettyConnectorFactory",
+ "org.hornetq.core.remoting.impl.netty.NettyConnectorFactory",
connectionParams);
ConnectionFactory connectionFactory =
HornetQJMSClient.createConnectionFactory(transportConfiguration);
@@ -151,7 +151,7 @@
<para>如果你的应用是运行在不信任的网络上,你应该选择使用SSL或HTTPS。</para>
<para>Netty TCP的所有连接都是从客户端发起的。服务器端不向客户端发起任何连接。在有防火墙的环境中,这种方式
是比较适合的。因为防火墙只允许单方向的连接。</para>
-
<para>在<literal>org.hornetq.integration.transports.netty.TransportConstants</literal>类中定义了所
+
<para>在<literal>org.hornetq.core.remoting.impl.netty.TransportConstants</literal>类中定义了所
有的配置参数的名称(key)。它们既用于配置接收器以用于配置连接器。下面列出的参数用以配置一个简单的Netty
TCP:</para>
<itemizedlist>
<listitem>
@@ -296,7 +296,7 @@
<acceptor name="netty-invm">
<factory-class>
- org.hornetq.integration.transports.netty.NettyAcceptorFactory
+ org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory
</factory-class>
<param key="use-invm" value="true"/>
<param key="host" value="org.hornetq"/>
@@ -311,7 +311,7 @@
<connector name="netty-servlet">
<factory-class>
- org.hornetq.integration.transports.netty.NettyConnectorFactory
+ org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory
</factory-class>
<param key="host" value="localhost"/>
<param key="port" value="8080"/>
@@ -332,7 +332,7 @@
<para>在<literal>web.xml</literal>中定义的servlet的URL形式与在连接器配置文件中定义的
<literal>servlet-path</literal>值应该相匹配。</para>
<para>servlet可以与SSL一起使用。只需要在连接器配置中加上下面的配置即可:<programlisting>
<connector name="netty-servlet">
-
<factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory</factory-class>
+
<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"/>
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/examples.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/examples.xml 2010-05-08 09:04:14 UTC (rev
9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/examples.xml 2010-05-08 11:07:45 UTC (rev
9210)
@@ -313,6 +313,11 @@
<para><literal>stomp</literal>例子展示了如何配置HornetQ来发送与接收Stomp消息。</para>
</section>
<section>
+ <title>Stomp与Web Sockets</title>
+
<para><literal>stomp-websockets</literal>例子给出了如何配置一个HornetQ服务器直接从Web浏览器
+ 中(需要支持Web Socket)发送和接收Stomp消息。</para>
+ </section>
+ <section>
<title>对称型集群</title>
<para><literal>symmetric-cluster</literal>例子展示如何设置一个HornetQ的对称型集群。</para>
<para>HornetQ的集群配置是非常灵活的。你可以根据需要设置不同的集群结构。最常用的就是对称型的集群了。这是在应用
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/flow-control.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/flow-control.xml 2010-05-08 09:04:14 UTC
(rev 9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/flow-control.xml 2010-05-08 11:07:45 UTC
(rev 9210)
@@ -197,14 +197,14 @@
<address-settings>
<address-setting match="jms.queue.exampleQueue">
<max-size-bytes>100000</max-size-bytes>
- <address-full-policy>DROP</address-full-policy>
+ <address-full-policy>BLOCK</address-full-policy>
</address-setting>
</address-settings></programlisting>
<para>上面的例子将JMS队列"exampleQueue"的最大内存值设为
100000 字节并且阻塞发送者以防止消息量超过这个值。</para>
- <para>注意必须设置
<literal>DROP</literal>的策略才能打开限定发送者窗口控制。</para>
+ <para>注意必须设置
<literal>BLOCK</literal>的策略才能打开限定发送者窗口控制。</para>
<para>请注意默认的<literal>address-full-policy</literal> 是
-
<literal>PAGE</literal>。请参阅分页转存(paging)的相关章节作进一步的了解。</para>
+ <literal>PAGE</literal>。请参阅分页转存(<xref
linkend="paging" />)的相关章节作进一步的了解。</para>
</section>
</section>
<section>
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/ha.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/ha.xml 2010-05-08 09:04:14 UTC (rev 9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/ha.xml 2010-05-08 11:07:45 UTC (rev 9210)
@@ -60,7 +60,7 @@
<!-- 这个连接器用于连接备份服务喝咖啡 -->
<!-- 备份服务器在主机"192.168.0.11"上,端口"5445" -->
<connector name="backup-connector">
-
<factory-class>org.hornetq.integration.transports.netty.NettyConnectorFactory</factory-class>
+
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="192.168.0.11"/>
<param key="port" value="5445"/>
</connector>
@@ -74,7 +74,7 @@
<acceptors>
<acceptor name="acceptor">
-
<factory-class>org.hornetq.integration.transports.netty.NettyAcceptorFactory</factory-class>
+
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="192.168.0.11"/>
<param key="port" value="5445"/>
</acceptor>
@@ -118,6 +118,10 @@
<programlisting>
<shared-store>true<shared-store>
</programlisting>
+ <para>此外,备份服务器必须显式地指定:</para>
+ <programlisting>
+ <backup>true</backup>
+ </programlisting>
<para>另外,需要将主服务器和备份服务器的日志文件位置指向<emphasis>同一个共享位置</emphasis>。
(参见<xref
linkend="configuring.message.journal"/>)</para>
<para>如果客户端使用JMS自动失效备援,主服务器除了要配置一个连接器以连接到备份服务器外,还要在
@@ -166,7 +170,7 @@
<para>有时你需要在主服务器正常关机的情况下仍然进行失效备援。如果使用JMS,你需要将<literal
HornetQConnectionFactory</literal>的<literal
FailoverOnServerShutdown</literal>属性设为true,或者是在<literal
-
>hornetq-jms.xml</literal>文件中进行相应的配置。如果使用的是核心接口,可以在创建
+
>hornetq-jms.xml</literal>(参数为failover-on-server-shutdown)文件中进行相应的配置。如果使用的是核心接口,可以在创建
<literal>ClientSessionFactoryImpl</literal>实例时将上述同名属性设置为true。
这个属性的默认值是false。这表示如果主服务器是正常关机,<emphasis>客户端将不会进行失效备援</emphasis>。</para>
<para>
@@ -178,6 +182,14 @@
设为true。</para>
</note>
</para>
+ <para>默认情况下至少创建了一个与主服务器的连接后失效备援才会发生。换句话说,如果客户端每一次创建与
+ 主服务器的连接失败,它会根据参数reconnection-attempts的设置进行连接重试,而不是进行失效备援。
+ 如果重试次数超过的该参数的值,则连接失败。</para>
+ <para>在有些情况下,你可能希望在初始连接失败和情况下自动连接到备份服务器,那么你可以直接在
+ <literal>ClientSessionFactoryImpl</literal>或<literal
+
>HornetQConnectionFactory</literal>上设置<literal>FailoverOnInitialConnection</literal>
+ 参数,或者在配置文件中设置<literal
+
>failover-on-initial-connection</literal>。默认的值是<literal>false</literal>。</para>
<para>有关事务性及非事务性JMS会话的自动失效备援的例子,请参见
<xref
linkend="examples.transaction-failover"/>及<xref
linkend="examples.non-transaction-failover"/>。</para>
@@ -222,7 +234,8 @@
javax.jms.TransactionRolledBackException</literal>异常(如果是JMS),或者是一
个<literal>HornetQException</literal>的异常,错误代码为<literal
HornetQException.TRANSACTION_ROLLED_BACK</literal>(如果是核心接口)。</para>
-
<para>客户端需要自行处理这些异常,进行必要的回滚处理。用户可以通过同一个会话重试该事务操作。</para>
+ <para>客户端需要自行处理这些异常,进行必要的回滚处理。注意这里不需要人工将会话进行回滚-此时它已经
+ 被回滚了。用户可以通过同一个会话重试该事务操作。</para>
<para>HornetQ发布包中包括了一个完整的例子来展示如何处理这种情况。参见
<xref
linkend="examples.transaction-failover"/></para>
<para>如果是在提交过程中发生了失效备援,服务器将这个阻塞调用解除。这种情况下客户端很难确定在事故发生
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/interoperability.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/interoperability.xml 2010-05-08 09:04:14 UTC
(rev 9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/interoperability.xml 2010-05-08 11:07:45 UTC
(rev 9210)
@@ -30,8 +30,7 @@
其中的<literal>protocol</literal>参数值应设为<literal>stomp</literal>:</para>
<programlisting>
<acceptor name="stomp-acceptor">
- <factory-class>org.hornetq.integration.transports.netty.NettyAcceptorFactory</factory-class>
- <param key="protocol" value="stomp"/>
+ <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> <param
key="protocol" value="stomp"/>
<param key="port" value="61613"/>
</acceptor>
</programlisting>
@@ -43,20 +42,6 @@
属性,它将被忽略)。</para>
</section>
</section>
- <section id="stompconnect">
- <title>StompConnect</title>
- <para><ulink
url="http://stomp.codehaus.org/StompConnect">StompConnect<...
- 它可以将Stomp协议转换为标准的JMS接口调用。因此,通过StompConnect的作用HornetQ可以作为一个Stomp代理,
- 与任何一个Stomp客户端通迅。这些客户端可以由C、C++、C#及.net等语言实现。</para>
- <para>要运行StompConnect首先要启动HornetQ服务以及JNDI服务。</para>
-
<para>Stomp需要<literal>jndi.properties</literal>文件要在classpath中。该文件
- 应有如下类似的内容:</para>
-
<programlisting>java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
-java.naming.provider.url=jnp://localhost:1099
-java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces</programlisting>
- <para>要确保该文件与StompConnect的jar包以及HornetQ的jar文件都在classpath中。最后,运行
- <literal>java
org.codehaus.stomp.jms.Main</literal>。</para>
- </section>
<section>
<title>Stomp目标与HornetQ的地址和队列的映射</title>
<para>Stomp客户端在消息发送和订阅中使用的是<emphasis>目标(destination)</emphasis>。目标名称是简单的字符串,对应的是服务
@@ -98,24 +83,53 @@
</section>
<section>
- <title>使用Stomp通过JMS发送和接收Stomp消息</title>
-
<para>如果要通过JMS目标来传送Stomp消息,可以使用<literal>BytesMessage</literal>将Stomp的消息封装后进行传送。</para>
-
<para>如果Stomp消息中含有UTF-8字符串,则可以用以下代码将其读入到JMS的BytesMessage:</para>
- <programlisting>
-BytesMessage message = (BytesMessage)consumer.receive();
-byte[] data = new byte[1024];
-int size = message.readBytes(data);
-String text = new String(data, 0, size, "UTF-8");
- </programlisting>
- <para>相反地,要将一个UTF-8字符串的消息发给Stomp客户端,可以作用以下代码:</para>
- <programlisting>
-String text = ...
-BytesMessage message = session.createBytesMessage();
-message.writeBytes(text.getBytes("UTF-8"));
-producer.send(message);
- </programlisting>
+ <title>使用JMS或核心接口发送和接收Stomp消息</title>
+
<para>Stomp基本上是一个基于文本的协议。为了使用更简单,我们的Stomp实现通过检查<literal>content-length</literal>的值
+ 来决定如何将一个Stomp消息映射成一个JMS消息或核心消息。
+ </para>
+
<para>如果在Stomp消息中有<literal>content-length</literal>头,它将被映射为一个JMS的
+
<emphasis>TextMessage</emphasis>,或者是一个核心消息,其消息体的缓存是一个SimpleString。</para>
+
<para>如果Stomp消息中没有<literal>content-length</literal>,则它被映射为一个JMS的
+
<emphasis>BytesMessage</emphasis>,或者是一个核心消息,其消息体缓存中是一个字节数组byte[]。</para>
+ <para>从一个JMS消息或核心消息映射为Stomp消息时遵从同样的逻辑。一个Stomp客户端可以通过检查
+
<literal>content-length</literal>来决定消息体的类型(UTF-8字符串或字节)。</para>
</section>
</section>
+ <section id="stomp.websockets">
+ <title>通过Web Sockets使用Stomp</title>
+ <para>HornetQ还支持通过<ulink
url="http://dev.w3.org/html5/websockets/">Web
Sockets</ulink>使用Stomp。任何支持
+ Web Socket的浏览器中可以利用HornetQ来发送和接收Stomp消息。</para>
+
<para>要使用些功能,必须配置一个<literal>NettyAcceptor</literal>,并设置<literal>protocol</literal>
+ 的值为<literal>stomp_ws</literal>:</para>
+ <programlisting>
+<acceptor name="stomp-ws-acceptor">
+ <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
+ <param key="protocol" value="stomp_ws"/>
+ <param key="port" value="61614"/>
+</acceptor>
+ </programlisting>
+
<para>使用上面配置,HornetQ在URL路径<literal>/stomp</literal>下端口<literal>61614</literal>接收Stomp连接。
+
浏览器然后就可以连接到<literal>ws://<server>:61614/stomp</literal>,使用Web
Socket来发送和接收
+ Stomp消息了。</para>
+ <para>为了简化客户端的开发,在<ulink
url="http://github.com/jmesnil/stomp-websocket">GitHub</u...
+ 上提供了一个JavaScript库(参见<ulink
url="http://jmesnil.net/stomp-websocket/doc/">文档</ulink&g...
+
<para><literal>stomp-websockets</literal>例子给出一如何配置HornetQ服务器以使浏览器和Java应用程序通过一个JMS话题
+ 进行消息的传递。</para>
+ </section>
+ <section id="stompconnect">
+ <title>StompConnect</title>
+ <para><ulink
url="http://stomp.codehaus.org/StompConnect">StompConnect<...
+ 它可以将Stomp协议转换为标准的JMS接口调用。因此,通过StompConnect的作用HornetQ可以作为一个Stomp代理,
+ 与任何一个Stomp客户端通迅。这些客户端可以由C、C++、C#及.net等语言实现。</para>
+ <para>要运行StompConnect首先要启动HornetQ服务以及JNDI服务。</para>
+
<para>Stomp需要<literal>jndi.properties</literal>文件要在classpath中。该文件
+ 应有如下类似的内容:</para>
+
<programlisting>java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
+java.naming.provider.url=jnp://localhost:1099
+java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces</programlisting>
+ <para>要确保该文件与StompConnect的jar包以及HornetQ的jar文件都在classpath中。最后,运行
+ <literal>java
org.codehaus.stomp.jms.Main</literal>。</para>
+ </section>
</section>
<section>
<title>REST</title>
Modified: branches/HnetQ_323_cn/docs/user-manual/zh/management.xml
===================================================================
--- branches/HnetQ_323_cn/docs/user-manual/zh/management.xml 2010-05-08 09:04:14 UTC (rev
9209)
+++ branches/HnetQ_323_cn/docs/user-manual/zh/management.xml 2010-05-08 11:07:45 UTC (rev
9210)
@@ -429,8 +429,10 @@
<jmx-management-enabled>false</jmx-management-enabled>
</programlisting>
<para>如果JMX功能是打开的,则使用<literal>jconsole</literal>可以管理本地的HornetQ。
- 出于安全考虑,默认情况下JMX远程连接是关闭的。参见<ulink
url="http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html...
+ <note>
+ <para>出于安全考虑,默认情况下JMX远程连接是关闭的。参见<ulink
url="http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html...
Java管理指南</ulink>来配置服务器的远程管理(系统变量必须在<literal>run.sh</literal>或<literal>run.bat</literal>中定义)。</para>
+ </note>
<para>HornetQ默认使用JMX域名"org.hornetq"。如果要用一个MBeanServer管理多个HornetQ服务器,可以将每个HornetQ
服务器配置成不同的JMX域。方法就是在<literal>hornetq-configuration.xml</literal>文件中设置<literal>jmx-domain</literal>:</para>
<programlisting>
@@ -638,13 +640,16 @@
<section>
<title>JMS消息通知</title>
<para>HornetQ还可以通过JMS消息的方式发送通知。</para>
- <para>这种方式与核心消息通知相似,但是有一个重要的不同:JMS消息需要一个JMS的目标(通常是一个Topic):</para>
+ <para>这种方式与核心消息通知相似,但是有一个重要的不同:JMS消息需要一个JMS的目标(通常是一个Topic)。</para>
+
<para>要通过一个JMS目标来接收管理通知,必须将服务器的管理通知地址修改为以<literal>jms.queue</literal>开头(如果是一个
+ JMS队列)或者<literal>jms.topic</literal>(如果是一个话题):</para>
<programlisting>
- Topic notificationsTopic =
HornetQJMSClient.createHornetQTopic("hornetq.notifications",
"hornetq.notifications");
+ <!-- 通知将从JMS话题 "notificationsTopic"上接收 -->
+
<management-notification-address>jms.topic.notificationsTopic</management-notification-address>
</programlisting>
<para>这个通知话题一旦被创建,就可以接收消息了(或者使用<literal>MessageListener</literal>):</para>
<programlisting>
- Topic notificationsTopic =
HornetQJMSClient.createHornetQTopic("hornetq.notifications",
"hornetq.notifications");
+ Topic notificationsTopic =
HornetQJMSClient.createTopic("notificationsTopic");
Session session = ...
MessageConsumer notificationConsumer = session.createConsumer(notificationsTopic);
@@ -751,4 +756,47 @@
<para>参见<xref
linkend="examples.message-counters"/>。这个例子使用消息计数器来获得一个JMS队列的相关数据。</para>
</section>
</section>
+ <section>
+ <title>通过JBoss应用服务器的Admin Console来管理HornetQ的资源</title>
+ <para>通过JBoss应用服务器的Admin Console可以创建与配置HornetQ的各种资源。</para>
+ <para>Admin Console允许你创建各种目标(JMS话题与队列)和JMS的连接工厂。</para>
+ <para>登录admin console后你在左边的树中会看到JMS Manager节点。所有HornetQ的资源都属于这个节点。在它的下面有JMS
Queues、
+ Topics以及Connection Factories。分别点击它们将会看到相应的资源。下面将解释如何创建并配置它们。</para>
+ <section>
+ <title>JMS队列</title>
+ <para>要创建一个新的JMS队列,点击JMS Queues将列出当前的队列。在右边的窗口中有一个“add a new
resource“按钮,点击这个按钮
+ 并选择默认(JMS 队列)模板。点击“continue“。填入相应的队列名称与JNDI名称。其它的参数值都给出了合理的默认值,通常情况下
+ 不用改动它们。在底部可以配置安全角色,如果你不提供将使用默认的配置。当这个队列成功创建后这些配置将会显示出来。除了队列的名字
+ 和JNDI名字外,其它参数都可以在contiguration标签页下进行修改。下面就对它们分别解释。</para>
+ <para>点击 configuration后你将看到如下显示:</para>
+ <para>
+ <graphic fileref="images/console1.png"
align="center"/>
+ </para>
+ <para>name和JNDI name是不能改变的。如果你想改变它们,必须重新创建队列。其它选项是关于地址设置与安全设置。
+The default address settings are picked up from the servers configuration, if you change
any of these
+ settings or create a queue via the console a new Address Settings enrty will be
added. For a full explanation on
+ Address Settings see <xref
linkend="queue-attributes.address-settings"/></para>
+ <para>To delete a queue simply click on the delete button beside the queue
name in the main JMS Queues screen.
+ This will also delete any address settings or security settings previously
created for the queues address</para>
+ <para>The last part of the configuration options are security roles. If
non are provided on creation then the
+ servers default security settings will be shown. If these are changed or
updated then new securty settings are
+ created for the address of this queue. For more information on securuty setting
see <xref linkend="security"/> </para>
+ <para>It is also possible via the metrics tab to view statistics for this
queue. This will show statistics such
+ as message count, consumer count etc.</para>
+ <para>Operations can be performed on a queue via the control tab. This
will allow you to start and stop the queue,
+ list,move,expire and delete messages from the queue and other useful operations.
To invoke an operation click on
+ the button for the operation you want, this will take you to a screen where you
can parameters for the opertion can be set.
+ Once set clicking the ok button will invoke the operation, results appear at the
bottom of the screen.</para>
+ </section>
+ <section>
+ <title>JMS Topics</title>
+ <para>Creating and configuring JMS Topics is almost identical to creating
queues. The only difference is that the
+ configuration will be applied to the queue representing a
subscription.</para>
+ </section>
+ <section>
+ <title>JMS Connection Factories</title>
+ <para>The format for creating connection factories is the same as for JMS
Queues and topics apart frm the configuration
+ being different. For as list of all the connection factory settings see the
configuration index </para>
+ </section>
+ </section>
</chapter>