使用HornetQ服务 本章将介绍如何使用HornetQ服务。 其中的内容包括服务器的位置,如何启动和停止HornetQ服务器。本章还将解释HornetQ的目录结构,其中的文件及其用途。 本章中所提到的HornetQ服务器是指HornetQ默认配置的独立服务器,包含JMS服务和JNDI服务。 对于运行于JBoss应用服务器中的HornetQ,其基本结构是一样的,只是有一些小的差别。
服务的启动和停止 在HornetQ的安装目录下bin子目录中包含有一个unit/linux脚本run.sh和对应的Windows批处理文件run.bat。 如果你是在Unix/Linux环境,在bin目录下运行./run.sh 如果是在Windows环境,则在bin目录下运行 run.bat 这个脚本文件会设置classpath以及各种JVM参数,并启动JBoss Microcontainer。JBoss Microcontainer是一个轻量级的容器。 它被用来部署HornetQ的POJO对象。 要停止服务,运行其中的相应脚本:在Unix/Linux环境下,运行 stop.sh。 在Windows环境,运行 run.bat 注意HornetQ需要在Java 6及以上版本才能正常运行。 启动和停止脚本在默认条件下读取config/stand-alone/non-clustered目录下的配置文件。 如果要指向其他目录,可以在命令行实现,例如: ./run.sh ../config/stand-alone/clustered。 这一方法同样适用于Windows批处理文件。
服务器端JVM参数的设置 在启动脚本run.shrun.bat中设置了一些JVM参数, 这些参数主要是调整Java 6的运行环境及拉圾回收的策略。我们建议采用并行拉圾回收的方法。 这种方法可以将拉圾回收所造成的延时进行平均分配,有效减少由于拉圾回收引起的长时间暂停的情况。 默认条件下HornetQ需要最大1GB的内存空间。通过-Xms-Xmx可以调整Java程序内存的使用。 你可以向启动脚本中添加其它的参数或修改已有的参数,已满足你的需要。
服务器端的classpath HornetQ在其classpath中寻找配置文件。 classpath被定义在run.shrun.bat脚本中。在HornetQ的发布中,启动脚本将非集群的配置文件目录加进了classpath中。该目录包括了一组配置文件,可以让HornetQ以基本的非集群方式运行。它的具体位置是在HornetQ发布根目录下 config/stand-along/non-clustered/ 子目录。 在HornetQ的发布包中包括了一组标准的配置目录,它们是: 非集群方式的独立服务器配置 集群方式的独立服务器配置 非集群方式运行于JBoss应用服务器 集群方式运行于JBoss应用服务器 当然你可以创建自己定义的配置文件目录。要注意的是将你的目录加到classpath中以便HornetQ能正确找到并加载。
Library Path 如果要在Linux上使用异步IO的日志(Asynchronous IO Journal), 你需要在java选项中指定java.library.pathrun.sh脚本可以自动完成这一步。 如果没有指定java.library.path,JVM将使用LD_LIBRARY_PATH环境变量。
系统变量 HornetQ命令行可以接受系统变量来配置日志(logging)。有关logging配置的具体信息参见
配置文件 配置文件的路径定义在 run.shrun.bat 脚本中的classpath里。该路径下可以包含以下文件: hornetq-beans.xml (如果是运行在JBoss应用服务器内,则为 hornetq-jboss-beans.xml)。这是JBoss Microcontainer的bean配置文件。其中定义了HornetQ的 各种bean,以及它们之间的依赖关系。HornetQ的bean都是一些POJO。是JBoss Microcontainer保证了这些bean的正确装载和运行。 hornetq-configuration.xml。这个是HornetQ的主要的配置文件。 其中的所有参数在中给出了解释. 在 也有更多的相关信息。 hornetq-queues.xml。这个文件里包含了预定义的queue以及它们的配置,包括安全设置。 这是一个可选的文件,里面所有的内容都可以放在 hornetq-configuration.xml文件中。 在默认的配置文件目录下并没有这个文件。HornetQ之所以提供这个文件是为了用户便于管理他们的queue。在classpath中 允许包含多个 hornetq-queues.xml 文件。所有的这些文件都会被加载。 hornetq-users.xml。用户信息文件。HornetQ本身实现了一个基本的 安全管理器(security manager),它从这个文件内读取用户的安全信息,如用户名,密码和角色。 想了解更多关于安全的信息,参见 hornetq-jms.xml。这个文件包含有JMS对象。HornetQ的默认配置中包含有JMS服务, 它从这个文件中读取JMS Queue,Topic和ConnectionFactory并将它们部署到JNDI服务中。如果你不使用JMS, 或者你不需要部署这些JMS对象,那么你就不需要这个文件。有关JMS的使用详见 logging.properties 这个文件用于配置logging handlers。详见 log4j.xml。 这是 Log4j handler的配置文件。 如果在hornetq-configuration.xml文件中将file-deployment-enabled 参数 定义为false,则HornetQ将不会加载其它的配置文件。这个参数的默认值是true。 所有配置文件中的参数都可以用系统变量来定义其值。以下用一个connector的配置来说明: <connector name="netty"> <factory-class>org.apache.activemq.integration.transports.netty.NettyConnectorFactory </factory-class> <param key="host" value="${hornetq.remoting.netty.host:localhost}" type="String"/> <param key="port" value="${hornetq.remoting.netty.port:5445}" type="Integer"/> </connector> 在上面的配置中我们定义了两个系统变量 hornetq.remoting.netty.hosthornetq.remoting.netty.port。它们的值会被相应的系统变量的值(如果定义了的话)所替代。 如果没有定义这些系统变量,它们的默认值将分别为 localhost 及 5445。也可以不给出默认值,但如果这样就 必须要定义相应的系统变量。
JBoss Microcontainer Beans 文件 HornetQ的POJO对象是由 JBoss Microcontainer 进行加载和运行的。JBoss Microcontainer是一个轻量级的加载工具。 如果是在JBoss应用服务器内运行,HornetQ同样需要一个bean的配置文件来将其部署到JBoss中。但是这与单独运行时的配置文件略有不同。 这是因为应用服务器内已经部署了一些服务,如安全服务等。所以在HornetQ中这些服务就不需要再部署了。 让我们看一个HornetQ作为单独服务器时的一个配置文件例子: <?xml version="1.0" encoding="UTF-8"?> <deployment xmlns="urn:jboss:bean-deployer:2.0"> <bean name="Naming" class="org.jnp.server.NamingBeanImpl"/> <!-- JNDI server. Disable this if you don't want JNDI --> <bean name="JNDIServer" class="org.jnp.server.Main"> <property name="namingInfo"> <inject bean="Naming"/> </property> <property name="port">1099</property> <property name="bindAddress">localhost</property> <property name="rmiPort">1098</property> <property name="rmiBindAddress">localhost</property> </bean> <!-- MBean server --> <bean name="MBeanServer" class="javax.management.MBeanServer"> <constructor factoryClass="java.lang.management.ManagementFactory" factoryMethod="getPlatformMBeanServer"/> </bean> <!-- The core configuration --> <bean name="Configuration" class="org.apache.activemq.core.config.impl.FileConfiguration"> </bean> <!-- The security manager --> <bean name="HornetQSecurityManager" class="org.apache.activemq.spi.core.security.HornetQSecurityManagerImpl"> <start ignored="true"/> <stop ignored="true"/> </bean> <!-- The core server --> <bean name="HornetQServer" class="org.apache.activemq.core.server.impl.HornetQServerImpl"> <start ignored="true"/> <stop ignored="true"/> <constructor> <parameter> <inject bean="Configuration"/> </parameter> <parameter> <inject bean="MBeanServer"/> </parameter> <parameter> <inject bean="HornetQSecurityManager"/> </parameter> </constructor> </bean> <!-- The JMS server --> <bean name="JMSServerManager" class="org.apache.activemq.jms.server.impl.JMSServerManagerImpl"> <constructor> <parameter> <inject bean="HornetQServer"/> </parameter> </constructor> </bean> </deployment> 我们从上可以看出HornetQ的单独服务器(以及核心服务器)包括了一些POJO对象: JNDIServer 很多客户端需要JNDI来获取JMS的对象,因此我们提供了一个JNDI服务来满足它们。如果不需要JNDI,可以在配置 文件中将它们注释掉。 MBeanServer 这个对象提供了JMX管理接口。它是一个MBean服务器,可管理的对象可以注册到这个服务器上。 通常这就是一个JVM内部的默认的平台MBean服务器。如果不需要些服务,可以在配置文件中将其注释或删除。 Configuration 这是HornetQ的Configuration对象。默认时它是一个FileConfiguration对象。它可以从文件系统中读取 配置信息。有些情况下(如嵌入式HornetQ)你可以将它定义为其它对象,以便用其它方法获得配置信息。 Security Manager. 可配置的安全管理器。默认的安全管理器使用 hornetq-users.xml 文件中的配置信息。 它也可以配置为一个JAAS的安全管理器。当HornetQ运行于JBoss应用服务器中时,它还可以配置为JBoss的安全管理器,以达到更紧密的集成。 如果不需要安全管理,你也可以将它删除。 HornetQServer 这是HornetQ的核心服务对象,几乎所有的核心功能都在这里。 JMSServerManager 这个对象将hornetq-jms.xml文件中定义的JMS的对象进行部署,比如JMS Queues, Topics 以及ConnectionFactory。它还提供一套简单的管理接口以方便地对这些JMS对象进行管理。通常它只是将工作代理给 核心服务器。如果你不需要在服务器端进行JMS对象的部署与管理,可以将它从配置中去掉。
JBoss AS4 MBean 服务 本节只讨论在JBoss AS 4上配置HornetQ。其与JBoss Microcontainer的配置很相似。 <?xml version="1.0" encoding="UTF-8"?> <server> <mbean code="org.apache.activemq.service.HornetQFileConfigurationService" name="org.apache.activemq:service=HornetQFileConfigurationService"> </mbean> <mbean code="org.apache.activemq.service.JBossASSecurityManagerService" name="org.apache.activemq:service=JBossASSecurityManagerService"> </mbean> <mbean code="org.apache.activemq.service.HornetQStarterService" name="org.apache.activemq:service=HornetQStarterService"> <!--let's let the JMS Server start us--> <attribute name="Start">false</attribute> <depends optional-attribute-name="SecurityManagerService" proxy-type="attribute">org.apache.activemq:service=JBossASSecurityManagerService</depends> <depends optional-attribute-name="ConfigurationService" proxy-type="attribute">org.apache.activemq:service=HornetQFileConfigurationService</depends> </mbean> <mbean code="org.apache.activemq.service.HornetQJMSStarterService" name="org.apache.activemq:service=HornetQJMSStarterService"> <depends optional-attribute-name="HornetQServer" proxy-type="attribute">org.apache.activemq:service=HornetQStarterService</depends> </mbean> </server> 这个jboss-service.xml包含在hornetq-service.sar文件中,它用来配置AS4中嵌入运行的HornetQ。 在这个配置文件中我们启动了以下几个服务: HornetQFileConfigurationService 这个MBean服务的任务是管理 FileConfiguration POJO的生命周期。 JBossASSecurityManagerService 这个MBean服务管理着 JBossASSecurityManager POJO的生命周期。 HornetQStarterService 这个MBean服务管理着HornetQServer POJO。它依赖于 JBossASSecurityManagerService 和 HornetQFileConfigurationService 这两个MBean。 HornetQJMSStarterService 这个MBean服务管理着 JMSServerManagerImpl POJO对象。如果不需要JMS,可以去掉这个服务。 JMSServerManager 用于启动JMSServerManager。
主配置文件 HornetQ 核心服务的配置保存在 hornetq-configuration.xml文件中。          FileConfiguration bean 读取这个文件来对消息服务器进行配置。 HornetQ有很多的配置参数。采用默认的配置在绝大多数情况下可以很好的运行。事实上每一个参数都有默认的处理,因此一个只包含有一个空 的configuration的配置文件是一个有效的文件。对各个参数的解释贯穿于本手册。你还可参参照 这里来查找你想看的参数。