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