2014-02-19 22 views
0

我有在NAS上共享存儲的實時備份HornetQ 2服務器集羣,我有外部連接到集羣的應用程序,我可以看到一切正常:當活動服務器關閉並且備份作爲活動服務器啓動時,我的應用程序正在切換到此新服務器而沒有任何問題。HornetQ:當服務器充當備份時不能使用連接工廠

HornetQ被用作JBoss AS 7服務器的一部分,其中我也有其他應用程序連接到HornetQ集羣,他們使用與集羣外部其他應用程序使用的連接工廠相同的連接工廠,這裏是使用的連接廠家:

<jms-connection-factories> 
    <connection-factory name="hornetq"> 
     <connectors> 
      <connector-ref connector-name="node1-live"/> 
      <connector-ref connector-name="node2-backup"/> 
     </connectors> 
     <entries> 
      <entry name="java:/jms/ConnectionFactory"/> 
      <entry name="java:jboss/exported/jms/ConnectionFactory"/> 
     </entries> 
    </connection-factory> 
</jms-connection-factories> 

,這裏是我的接口定義:

<connectors> 
    <netty-connector name="netty" socket-binding="messaging"/> 
    <in-vm-connector name="in-vm" server-id="0"/> 
    <connector name="node1-live"> 
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
     <param key="host" value="10.10.10.1"/> 
     <param key="port" value="5445"/> 
     <param key="use-nio" value="true"/> 
    </connector> 
    <connector name="node2-backup"> 
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
     <param key="host" value="10.10.10.2"/> 
     <param key="port" value="5445"/> 
     <param key="use-nio" value="true"/> 
    </connector> 
</connectors> 

我遇到的問題是沒有節點2(備份節點),看來,當它的運行備份,HornetQ的通訊子系統沒有裝載和在另一個地方因此,工廠和連接器不會暴露給node2的JBoss AS上託管的應用程序。

我正在尋找一種方法將工廠和連接器暴露給備份節點上的應用程序,以便連接到活動服務器。

回答

0

我有類似的架構兩個客戶端(jboss)和HornetQ集羣(2xlive,2xbackup)biuld使用獨立的HornetQ。

起初,我們試圖按照您所描述的方式進行連接,但它通過異常測試從未通過。

的解決方案是: 安裝發現組在將hornetq(hornetq-configuration.xml文件):

<discovery-groups> 
    <discovery-group name="dg-group1"> 
     <group-address>231.7.7.7</group-address> 
     <group-port>9876</group-port> 
     <refresh-timeout>10000</refresh-timeout> 
    </discovery-group> 
    </discovery-groups> 

然後在客戶端側(我們使用彈簧)限定discoveryGroupConfig:

<bean id="discoveryGroupConfig" class="org.hornetq.api.core.DiscoveryGroupConfiguration"> 
    <constructor-arg name="groupAddress" value="231.7.7.7" /> 
    <constructor-arg name="groupPort" value="9876" /> 
    <property name="discoveryInitialWaitTimeout" value="10000"/> 
</bean> 

工廠:

<bean id="producerDiscoveryConnFactory" class="org.hornetq.jms.client.HornetQXAConnectionFactory"> 
    <constructor-arg value="true" /> 
    <constructor-arg ref="discoveryGroupConfig" /> 
</bean> 

並在最後的緩存工廠:

<bean id="cachingConnFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="producerDiscoveryConnFactory" /> 
    <property name="sessionCacheSize" value="200" /> 
    <property name="cacheProducers" value="true" /> 
</bean> 

但是您應該知道:JMS連接始終與創建的集羣中的給定節點關聯。因此,你需要通過實現界面org.hornetq.api.core.client.ClusterTopologyListener聽拓撲和回收春MessageListenerContainers:當你加入<backup>true</backup>與其他配置配置HornetQ的服務器備份

public interface ClusterTopologyListener 
{ 
    void nodeUP(long eventUID, String nodeID,    Pair<TransportConfiguration, TransportConfiguration> connectorPair, boolean last); 

    void nodeDown(long eventUID, String nodeID); 
    } 
相關問題