20.6. 配置

20.6.1. 配置 JMS 服务器

要为 HornetQ 配置 JMS 服务器,请编辑服务器配置文件。对于域服务器,服务器配置包含在 EAP_HOME/domain/configuration/domain.xml 里;而对于独立服务器,则位于 EAP_HOME/standalone/configuration/standalone-full.xml 文件里。
服务器配置文件里的 <subsystem xmlns="urn:jboss:domain:messaging:1.4"> 元素包含了所有的 JMS 配置。按需要为 JNDI 添加任何 JMS ConnectionFactoryQueueTopic 实例。
  1. 启用 JBoss EAP 6 里的 JMS 子系统。

    <extensions> 元素里,检查是否有下面一行且没被注释:
    <extension module="org.jboss.as.messaging"/>
  2. 添加基本的 JMS 子系统。

    如果 Messaging 子系统没有出现在你的配置文件里,请添加它。
    1. 查找对应你所使用的配置集的 <profile>,并定位它的 <subsystems> 标签。
    2. 将下列 XML 内容复制到 <profile> 标签下。
      <subsystem xmlns="urn:jboss:domain:messaging:1.4">
          <hornetq-server>
          <!-- ALL XML CONFIGURATION IS ADDED HERE -->
          </hornetq-server>
      </subsystem>
      
      所有进一步的配置都将添加到空行的上方。
  3. 添加基本的 JMS 配置。

    <subsystem xmlns="urn:jboss:domain:messaging:1.4"><hornetq-server> 标签下的空行里添加下列 XML 内容:
    <journal-min-files>2</journal-min-files>
    <journal-type>NIO</journal-type>
    <persistence-enabled>true</persistence-enabled>
    
    定制上面的值以满足你的需要。

    警告

    journal-file-size 的值必须大于或等于 min-large-message-size(默认值为 100KiB),否则服务器无法存储这个消息。
  4. 在 HornetQ 里添加连接工厂实例

    客户使用 JMS ConnectionFactory 对象来创建到服务器的连接。要添加 JMS 连接工厂对象到 HornetQ 里,请为每个连接工厂包含一个 <jms-connection-factories> 标签和 <connection-factory> 元素:
      <jms-connection-factories>
        <connection-factory name="InVmConnectionFactory">
            <connectors>
                <connector-ref connector-name="in-vm"/>
            </connectors>
            <entries>
                <entry name="java:/ConnectionFactory"/>
            </entries>
        </connection-factory>
        <connection-factory name="RemoteConnectionFactory">
            <connectors>
                <connector-ref connector-name="netty"/>
            </connectors>
            <entries>
                <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
            </entries>
        </connection-factory>
        <pooled-connection-factory name="hornetq-ra">
            <transaction mode="xa"/>
            <connectors>
                <connector-ref connector-name="in-vm"/>
            </connectors>
            <entries>
                <entry name="java:/JmsXA"/>
            </entries>
        </pooled-connection-factory>
    </jms-connection-factories>
    
    
  5. 配置 netty 连接器和接收器

    这个 JMS 连接工厂使用 netty 接收器和连接器。它们是部署在服务器配置文件里的连接器和接收器对象的引用。连接器对象定义用来连接 HornetQ 服务器的传输和参数。接收器对象则确定 HornetQ 服务器接受的连接的类型。
    要配置 netty 连接器,请包含下列设置:
    <connectors>
        <netty-connector name="netty" socket-binding="messaging"/>
        <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
            <param key="batch-delay" value="50"/>
        </netty-connector>
        <in-vm-connector name="in-vm" server-id="0"/>
    </connectors>
    
    
    要配置 netty 连接器,请包含下列设置:
    <acceptors>
        <netty-acceptor name="netty" socket-binding="messaging"/>
        <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
            <param key="batch-delay" value="50"/>
            <param key="direct-deliver" value="false"/>
        </netty-acceptor>
        <in-vm-acceptor name="in-vm" server-id="0"/>
    </acceptors>
    
    
  6. 复查配置。

    如果您遵照了之前的步骤,您的消息子系统应该类似于:
    <subsystem xmlns="urn:jboss:domain:messaging:1.4">
        <hornetq-server>
            <journal-min-files>2</journal-min-files>
            <journal-type>NIO</journal-type>
            <persistence-enabled>true</persistence-enabled>
            <jms-connection-factories>
                <connection-factory name="InVmConnectionFactory">
                    <connectors>
                        <connector-ref connector-name="in-vm"/>
                    </connectors>
                    <entries>
                        <entry name="java:/ConnectionFactory"/>
                    </entries>
                </connection-factory>
                <connection-factory name="RemoteConnectionFactory">
                    <connectors>
                        <connector-ref connector-name="netty"/>
                    </connectors>
                    <entries>
                        <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/>
                    </entries>
                </connection-factory>
                <pooled-connection-factory name="hornetq-ra">
                    <transaction mode="xa"/>
                    <connectors>
                        <connector-ref connector-name="in-vm"/>
                    </connectors>
                    <entries>
                        <entry name="java:/JmsXA"/>
                    </entries>
                </pooled-connection-factory>
            </jms-connection-factories>
            <connectors>
                <netty-connector name="netty" socket-binding="messaging"/>
                <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
                    <param key="batch-delay" value="50"/>
                </netty-connector>
                <in-vm-connector name="in-vm" server-id="0"/>
            </connectors>	
            <acceptors>
                <netty-acceptor name="netty" socket-binding="messaging"/>
                <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
                    <param key="batch-delay" value="50"/>
                    <param key="direct-deliver" value="false"/>
                </netty-acceptor>
                <in-vm-acceptor name="in-vm" server-id="0"/>
            </acceptors>
        </hornetq-server>
    </subsystem>
    
    
  7. 配置套接字绑定组

    netty 连接器引用了 messagingmessaging-throughput 套接字绑定。messaging 套接字使用了端口 5445,而 messaging-throughput 套接字绑定使用了端口 5455。<socket-binding-group> 标签位于服务器配置文件的单独部分。请确保下列套接字绑定出现在 <socket-binding-groups> 元素里:
    <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
        ...
        <socket-binding name="messaging" port="5445"/>
        <socket-binding name="messaging-throughput" port="5455"/>
        ...
      </socket-binding-group>
    
    
  8. 可选:添加 queue 实例到 HornetQ 里

    有四种方法可设置 HornetQ 的队列实例(或 JMS 目的地)。
    • 使用管理控制台
      要使用管理控制台,服务器必须已经以 Message-Enabled 模式启动。您可以用 -c 选项并强制使用 standalone-full.xml(对于独立服务器)配置文件来做到这一点。例如,在独立模式下,下列命令将以 message-enabled 模式启动服务器:
      ./standalone.sh -c standalone-full.xml
      服务器启动后,请登录管理控制台并选择 Configuration 标签页。展开 Subsystems 菜单,然后展开 Messaging 菜单并点击 Destinations。在 JMS Messaging Provider 表的 Default 的右侧点击 View,然后点击 Add 输入 JMS 目的地的细节。
    • 使用管理 CLI:
      首先,连接至管理 CLI:
       bin/jboss-cli.sh --connect
      然后,进入消息子系统:
      cd /subsystem=messaging/hornetq-server=default
      最后,执行 add 操作,用自己的内容替换下例里的值:
      ./jms-queue=testQueue:add(durable=false,entries=["java:jboss/exported/jms/queue/test"])
    • 创建一个 JMS 配置文件并将其添加至 deployments 文件夹
      从创建 JMS 配置文件 example-jms.xml 开始。添加下列条目,用自己的设置替换相关的值:
      <?xml version="1.0" encoding="UTF-8"?>				  	  <messaging-deployment xmlns="urn:jboss:messaging-deployment:1.0">
          <hornetq-server>
              <jms-destinations>
                  <jms-queue name="testQueue">
                      <entry name="queue/test"/>
                      <entry name="java:jboss/exported/jms/queue/test"/>
                  </jms-queue>
                  <jms-topic name="testTopic">
                      <entry name="topic/test"/>
                      <entry name="java:jboss/exported/jms/topic/test"/>
                  </jms-topic>
              </jms-destinations>
          </hornetq-server>
      </messaging-deployment>
      
      保存文件到 deployments 文件夹并进行部署。
    • 在 JBoss EAP 6 配置文件里添加条目。
      standalone-full.xml 为例子,找到里面的消息子系统。
      <subsystem xmlns="urn:jboss:domain:messaging:1.4">
      
      添加下列条目,并用自己的设置替换相关的值。您需要在 </jms-connection-factories> 标签后但在 </hornetq-server> 元素前添加这些内容:
      <jms-destinations>
              <jms-queue name="testQueue">
                  <entry name="queue/test"/>
                  <entry name="java:jboss/exported/jms/queue/test"/>
              </jms-queue>
              <jms-topic name="testTopic">
                  <entry name="topic/test"/>
                  <entry name="java:jboss/exported/jms/topic/test"/>
              </jms-topic>
          </jms-destinations>
      
  9. 执行其他的配置

    如果您需要其他的设置,请复查 EAP_HOME/docs/schema/jboss-as-messaging_1_4.xsd 里的 DTD。