[英]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.