要对模块进行配置我们需要编辑JBoss的配置文件,这里我从standalone-full.xml开始,因为它已经对HornetQ进行了配置(这节省了我们很多时间)。我们需要添加activeMQ资源适配器,把下面这一行
<subsystem
xmlns="urn:jboss:domain:resource-adapters:1.0"/>
改成
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
<resource-adapters>
<resource-adapter>
<module slot="main"/>
<transaction-support>NoTransaction</transaction-support>
<config-property>
tcp://localhost:61616
</config-property>
<connection-definitions>
<connection-definition class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory" jndi-name=" java:/AMQConnectionFactory " enabled="true" use-java-context="true" pool-name="AMQConnectionFactory"/>
</connection-definitions>
<admin-objects>
<admin-object class-name="org.apache.activemq.command.ActiveMQQueue" jndi-name=" queue/JMSBridgeTargetQ " use-java-context="true" pool-name="target_queue">
<config-property>
JMSBridgeTargetQ
</config-property>
</admin-object>
</admin-objects>
</resource-adapter>
</resource-adapters>
</subsystem>
这样就创建了一个资源适配器,它使用了我们刚才创建的org.apache.activemq 模块,并连接到了运行在 tcp://localhost:61616上的远程ActiveMQ服务器上。它注册了一个连接工厂,名叫java:AMQConnectionFactory 使得我们可以连到远程服务器上,也创建了一个名为queue/JMSBridgeTargetQ的本地JNDI,该JNDI将被绑定到名为JMSBridgeTargetQ的ActiveMQ队列上。
下一步就是配置桥接器和本地队列。我们来编辑hornetq子系统,在hornetQ 服务器的定义后面,添加一个JMS桥接器。
<jms-bridge>
<source>
<connection-factory/>
<destination/>
</source>
<target>
<connection-factory/>
<destination/>
</target>
<quality-of-service>AT_MOST_ONCE</quality-of-service>
<failure-retry-interval>1000</failure-retry-interval>
<max-retries>-1</max-retries>
<max-batch-size>10</max-batch-size>
<max-batch-time>100</max-batch-time>
</jms-bridge> .
这样就创建了一个桥接器,它使用名为ConnectionFactory 的连接工厂来消耗本地队列里的消息,该队列对应的JNDI名字是queue/JMSBridgeSourceQ。随后它将使用一个名为AMQConnectionFactory 的连接工厂(它由我们的资源适配器创建)来把消息发送到JNDI名称为queue/JMSBridgeTargetQ的本地队列中。我们的资源适配器会把这映射到远程ActiveMQ队列中。我们也需要在该配置文件的jms-destinations部分里,创建一个名为JMSBridgeSourceQ 的本地队列。
<jms-destinations>
<jms-queue>
<entry/>
<entry/>
<durable>true</durable>
</jms-queue>
</jms-destinations>
这个队列有两个JNDI名称,使得它可以同时从内部(被桥接器)和外部(被客户端)访问到.