繁体   English   中英

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

[英]How to configure standalone HornetQ along with EAP 6.3 or Jboss 7 for durable JMS subscription?

我想通过一个独立的HornetQ服务器将JMS消息从一台Jboss服务器发送到另一台。 这样,如果目标服务器崩溃(提供的持久订阅),我可以稍后再发送邮件。

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

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

在此处输入图片说明

如何实现这种配置?

让我们从配置独立的HornetQ开始。 您可以从独立服务器的下载页面下载独立服务器。 接下来,您必须配置主题。 请在%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-HOME1%\\standalone\\configuration\\standalone-full.xmljboss:domain:messaging子系统中,请添加一个新的池化连接工厂:

<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>

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

@Resource(lookup = "java:jboss/exported/jms/StandaloneHornetQConnectionFactory")
private ConnectionFactory connectionFactory;

如您在上面看到的,我们引用了standalone-hornetq-connector但是还没有一个。 让我们通过在<connectors>添加另一个netty连接器来创建它:

<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>子元素中创建它:

<outbound-socket-binding name="standalone-hornetq-socket">
    <remote-destination host="localhost" port="5446"/>
</outbound-socket-binding>

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

为了能够在Jboss Server 2上接收消息,我们必须再次在%JBOSS-HOME1%\\standalone\\configuration\\standalone-full.xml重复上述配置。 但是这一次我们将Jboss Server 2port-offset:3port-offset:3 ,以便能够在同一台机器上工作:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:3}">

如果要将服务器放在单独的计算机中,则无需执行此步骤(如果这样做,请相应地更改localhost ;))。

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

@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) {
        // ...
    }
}

@ResourceAdapter("StandaloneHornetQConnectionFactory")行是最重要的,因为默认情况下,所有MDB都使用hornetq-ra资源适配器进行订阅(本地订阅)。 ResourceAdapter批注来自org.jboss.ejb3.annotation包,您可以通过maven依赖项使该类可用:

 <dependency>
    <groupId>org.jboss.ejb3</groupId>
    <artifactId>jboss-ejb3-ext-api</artifactId>
    <version>2.1.0</version>
    <scope>provided</scope>
</dependency>

通过所有这些设置,您可以享受服务器“星型”拓扑的持久订阅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM