我想通过一个独立的HornetQ服务器将JMS消息从一个Jboss服务器发送到另一个服务器。 这样,我可以在目标服务器崩溃的情况下稍后传递消息(提供持久订阅)。
但是我已经在每个Jboss内部路由消息了。我想要一个不会与那些冲突的配置。
所需解决方案的拓扑结构在图表中可视化。
如何实现此配置?
答案 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;服务器的拓扑结构。