[英]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.xml
的jboss: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 2的port-offset:3
了port-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.