如何配置独立的HornetQ以及EAP 6.3或Jboss 7以获得持久的JMS订阅?

时间:2015-03-04 14:26:55

标签: jboss jms

我想通过一个独立的HornetQ服务器将JMS消息从一个Jboss服务器发送到另一个服务器。 这样,我可以在目标服务器崩溃的情况下稍后传递消息(提供持久订阅)。

但是我已经在每个Jboss内部路由消息了。我想要一个不会与那些冲突的配置。

所需解决方案的拓扑结构在图表中可视化。

enter image description here

如何实现此配置?

1 个答案:

答案 0 :(得分:2)

让我们从配置独立的HornetQ开始。您从download page下载独立服务器。 接下来,您必须配置主题。请在%HORNETQ-HOME%\config\stand-alone\non-clustered\hornetq-jms.xml文件中添加您的主题:

<topic name="Topic1">
   <entry name="java:/topic/Topic1"/>
</topic>

您可能希望首先在一台计算机上测试配置,因此我建议您更改HornetQ将侦听来自5455到5456的消息的端口。 请编辑%HORNETQ-HOME%\config\stand-alone\non-clustered\hornetq-configuration.xml文件以更改这些端口。您还希望能够注册持久订阅者,因此请将这两行添加到同一文件中的<security-setting match="#">元素:

<permission type="createDurableQueue" roles="guest"/>
<permission type="deleteDurableQueue" roles="guest"/>

然后通过运行%HORNETQ-HOME%\run.bat启动独立的HornetQ。

首先,我们将了解如何向此新创建的主题发送消息。为此,我们需要 Jboss Server 1 上的指定连接工厂。在jboss:domain:messaging的{​​{1}}子系统中,请添加新的池连接工厂:

%JBOSS-HOME1%\standalone\configuration\standalone-full.xml

从现在开始,当您要向主题1 发送消息时,必须使用此连接工厂。这通常通过依赖注入来完成:

<pooled-connection-factory name="StandaloneHornetQConnectionFactory">
    <transaction mode="xa"/>
    <connectors>
        <connector-ref connector-name="standalone-hornetq-connector"/>
    </connectors>
    <entries>
        <entry name="java:jboss/exported/jms/StandaloneHornetQConnectionFactory"/>
    </entries>
</pooled-connection-factory>

正如您在上面所见,我们引用了@Resource(lookup = "java:jboss/exported/jms/StandaloneHornetQConnectionFactory") private ConnectionFactory connectionFactory; ,但还没有。{让我们通过在standalone-hornetq-connector中添加另一个netty连接器来创建它:

<connectors>

如您所见,我们需要<connectors> <netty-connector name="standalone-hornetq-connector" socket-binding="standalone-hornetq-socket"/> <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> 套接字绑定。让我们在standalone-hornetq-socket子元素中创建它:

<socket-binding-group>

如您所见,这是一个出站套接字绑定,用于将消息发送到正在侦听5446端口的 HornetQ Standalone 服务器。此配置足以在 Jboss Server 1 上通过独立HornetQ 服务器向 Jboss Server 2 发送消息。

为了能够在 Jboss Server 2 上接收消息,我们必须再次在<outbound-socket-binding name="standalone-hornetq-socket"> <remote-destination host="localhost" port="5446"/> </outbound-socket-binding> 中重复上述配置。但是这次我们将{em> Jboss Server 2 的端口偏移%JBOSS-HOME1%\standalone\configuration\standalone-full.xml,以便能够在同一台机器上工作:

port-offset:3

如果你将服务器放在不同的机器上,这一步不是必须的(如果你这样做,请相应地改变<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:3}"> ;)。)

现在我们可以创建MDB,它将成为主题1 的持久订阅者。

localhost

@MessageDriven(name = "MyDurableSubscriber", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/topic/Topic1"), @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"), @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "Topic1Subscription"), @ActivationConfigProperty(propertyName = "clientId", propertyValue = "MySubscriber"), }) @ResourceAdapter("StandaloneHornetQConnectionFactory") public class MyDurableSubscriber implements MessageListener { @Override public void onMessage(Message message) { // ... } } 行是最重要的,因为默认情况下所有MDB都使用@ResourceAdapter("StandaloneHornetQConnectionFactory")资源适配器进行订阅(本地订阅)。 hornetq-ra注释来自ResourceAdapter包 并且您可以通过maven依赖项为您提供此类:

org.jboss.ejb3.annotation

通过这些设置,您可以享受与#34; star&#34;服务器的拓扑结构。