2014-09-25 54 views
4

我在兩個節點(「主機-1」和「主機-2」)的域模式下運行JBoss Wildfly 8.1.0.Final並需要發送消息一個節點到集羣中的所有節點,以便對它們執行特定的操作。發送消息的客戶端和消息接收者應位於相同的EAR中。發送消息到JBoss集羣域中的所有節點

由於到目前爲止問題尚未得到答覆和未註釋,我將把問題分解成更簡單的部分。請隨時回答或評論一個子集,以便我可以進一步調查。

  1. 我正確地認爲這是一個消息驅動bean的有效用例嗎?如果不是,爲什麼?在這種情況下,問題的其餘部分可能毫無意義。

  2. 我在JBoss集羣的域控制器「host-1」的domain.xml中創建了javax.jms.Topic。原則上正確嗎?

  3. 打算髮送消息的客戶端通過JNDI查找TopicConnectionFactory(而不是例如注入它)。這是正確的方法嗎?

  4. 要接收消息的MDB配置爲通過@ActivationConfigProperty來收聽Topic。正確?

上述設置在本地工作,即消息僅由發送它的節點接收。它不被其他節點接收。發送消息的客戶端代碼是由WAR觸發的,並且該消息由同一EAR中的EJB模塊中的MDB接收。

我不確定我們是否需要RemoteConnectionFactory或者我們是否需要使用不同的方法來查找主題(目前注入MDB並由客戶端查找爲java:/jms/rmcTopic),因爲它實際上是在遠程主機上定義的。

這是我在domain.xml中的主題。我知道<clustered>標記已被棄用,但我無法找到有關Wildfly 8.1如何完成的最新文檔。

<subsystem xmlns="urn:jboss:domain:messaging:2.0"> 
    <hornetq-server> 
     <clustered>true</clustered> 
     <cluster-user>hornetqcluster</cluster-user> 
     <cluster-password>hornetqcluster</cluster-password> 
     <!-- ... --> 
     <jms-connection-factories> 
      <!-- ... --> 
      <connection-factory name="RemoteConnectionFactory"> 
        <connectors> 
         <connector-ref connector-name="http-connector"/> 
        </connectors> 
        <entries> 
         <entry name="java:jboss/exported/jms/RemoteConnectionFactory"/> 
        </entries> 
      </connection-factory> 
     </jms-connection-factories> 
     <!-- ... --> 
     <jms-destinations> 
      <!-- ... --> 
      <jms-topic name="rmcTopic"> 
       <entry name="java:/jms/rmcTopic"/> 
      </jms-topic> 
     </jms-destinations> 
    </hornetq-server> 
</subsystem> 

的MDB被打包爲一個EAR EJB模塊,以及MDB註解是:

@MessageDriven(name = "ConfigurationMDB", activationConfig = { 
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), 
@ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/jms/rmcTopic"), 
@ActivationConfigProperty(propertyName = "connectionFactoryJndiName", propertyValue = "RemoteConnectionFactory"), 
@ActivationConfigProperty(propertyName = "addressList", propertyValue = "host-1"), 
@ActivationConfigProperty(propertyName = "useSharedSubscriptionInClusteredContainer", propertyValue = "false") }) 
public class ConfigurationMDB implements MessageListener 

日誌輸出表明useSharedSubscriptionInClusteredContainerconnectionFactoryJndiName不支持,但同樣我讓他們作爲參考,我的失敗嘗試:-)

發送所述消息是WAR中在相同的EAR的代碼:

Context ic = new InitialContext(); 
ConnectionFactory cf = (ConnectionFactory) ic.lookup("java:jboss/exported/jms/RemoteConnectionFactory"); 
Topic topic = (Topic) ic.lookup("java:/jms/rmcTopic"); 
Connection connection = cf.createConnection("hornetqcluster", "hornetqcluster"); 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
MessageProducer publisher = session.createProducer(topic); 
connection.start(); 
TextMessage message = session.createTextMessage("Test"); 
publisher.send(message); 

任何幫助,非常感謝。

+0

我也會有興趣的任何方式使這個問題更清晰或更容易回答,因爲它還沒有得到任何關注。 – 2014-09-29 15:54:40

回答

0

1st在jboss中沒有主或從設備,您應該在配置文件級別定義所有內容並將服務器組關聯到該配置文件,並最終在集羣內部署該應用程序 第二步您正在使用哪個配置文件?它是全哈?否則隊列將不聚集

+0

「主人」和「奴隸」只是別人分配的名字 - 對不起,他們對這個問題毫無意義,將會被刪除。你能否詳細說明完整公差配置文件中的隊列是如何聚集的?可能是這個原因。 – 2015-06-19 11:56:37

+0

部分您應該看到 $ {jboss.messaging.cluster.password:CHANGE ME !!} 您應該更改密碼 – marcobazzani 2015-06-19 13:28:59

+0

hornetq的其他部分部分是需要在羣集 中獲得JMS的。但通常最好使用full-ha配置文件來擁有它 – marcobazzani 2015-06-19 13:37:09

相關問題