2012-05-01 5 views
2

私はhornetqコアAPIと春のHAでhornetqクライアントを定義しようとしています。 しかし、ライブサーバーを停止し、バックアップサーバーが "ライブ"になると、クライアントは接続エラーで失敗します。私が間違っていることは何か考えていますか?クラスタ化されたhornetqクライアントを春に設定する

クラスタ化されたスタンドアロンのhornetqサーバー(グループまたは検出なし)を定義しました。 HornetQは-configuration.xmlの:

... 
<connectors> 
    <connector name="netty"> 
    <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
    <param key="host" value="${hornetq.remoting.netty.host:live-host}"/> 
    <param key="port" value="${hornetq.remoting.netty.port:5445}"/> 
    </connector> 

    <!-- Connector to this server.s backup. This is needed for failback to work properly in a static cluster --> 
    <connector name="netty-backup"> 
    <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
    <param key="host" value="${hornetq.remoting.netty.host:backup-host}"/> 
    <param key="port" value="${hornetq.remoting.netty.port:5446}"/> 
    </connector> 

<cluster-connections> 
    <cluster-connection name="my-cluster"> 
    <address>jms</address> 
    <connector-ref>netty</connector-ref> 
    <retry-interval>500</retry-interval> 
    <use-duplicate-detection>true</use-duplicate-detection> 

    <forward-when-no-consumers>false</forward-when-no-consumers> 
    <max-hops>1</max-hops> 
    <static-connectors> 
     <!-- Without this the connection factory won.t be able to reconnect on failback --> 
     <connector-ref>netty-backup</connector-ref> 
    </static-connectors> 

    </cluster-connection> 

...

私はHornetQのクライアントを定義した:

@Test 
public void testHA() throws InterruptedException, IOException{ 
    List<TransportConfiguration> transportConfigurationList = new ArrayList<TransportConfiguration>(); 
     Map<String, Object> transportProperties = new HashMap<String, Object>(); 
        transportProperties.put("host", "live-server"); 
        transportProperties.put("port", 5445); 
     transportConfigurationList.add(new TransportConfiguration("org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", transportProperties)); 
     transportProperties = new HashMap<String, Object>(); 
        transportProperties.put("host", "backup-server"); 
        transportProperties.put("port", 5446); 
     transportConfigurationList.add(new TransportConfiguration("org.hornetq.core.remoting.impl.netty.NettyConnectorFactory", transportProperties)); 
     HornetQJMSConnectionFactory connectionFactory = new HornetQJMSConnectionFactory(true, transportConfigurationList.toArray(new TransportConfiguration[2])); 

     JmsTemplate producer = new JmsTemplate(connectionFactory); 
     producer.send(new HornetQTopic("deploy"), new MessageCreator() { 
      @Override 
      public Message createMessage(Session session) throws JMSException { 
       TextMessage txtMessage = session.createTextMessage("my message");     
       return txtMessage; 
      } 
     }); 

     System.out.println("Stop live server"); 
     System.in.read(); 

     producer.send(new HornetQTopic("deploy"), new MessageCreator() { 
      @Override 
      public Message createMessage(Session session) throws JMSException { 
       TextMessage txtMessage = session.createTextMessage("my message");     
       return txtMessage; 
      } 
     }); 

     Thread.sleep(60000); 
} 

OUTPUT:

Stop live server 

Apr 30, 2012 5:08:32 PM org.hornetq.core.logging.impl.JULLogDelegate warn 
WARNING: Tried 1 times to connect. Now giving up on reconnecting it. 
また

、ライブサーバーがエラーログに記録している:

  • [スレッド-4(HornetQのサーバ・HornetQServerImpl :: serverUUID = 70ca0e65-8ecf-11e1-82e8-d5eac4a07302-1433965066)] 1-5月8日に:27:57,976 FINE [ServerLocatorImpl]コネクタ[initialConnector = org-hornetq-core-remoting-impl-netty-NettyConnectorFactory?port = 5446 & host = 10-45-7-150] ::コネクタの初期接続を確立する際の例外 HornetQException [errorCode = 2 message =構成org-hornetq-core-remoting-impl-netty-NettyConnectorFactory?port = 5446 & host = backup-server]を使用してサーバーに接続できません。 をorg.hornetq.core.client.impl.ClientSessionFactoryImplに追加してください.connect(Clien (ServerLocatorImpl.java:234) at org.hornetq.core.client.impl.ServerLocatorImpl $ StaticConnector $ Connector.tryConnect(ServerLocatorImpl.java:1777) at org.hornetq.core.client.impl.ServerLocatorImpl $ StaticConnector.connect ServerLocatorImpl.java:1614) at org.hornetq.core.client.impl.ServerLocatorImpl.connect(ServerLocatorImpl.java:587) at org.hornetq.core.client.impl.ServerLocatorImpl $ 3.run(ServerLocatorImpl.java:554) ) at org.hornetq.utils.OrderedExecutorFactory $ OrderedExecutor $ 1.run(OrderedExecutorFactory.java:100) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent。 ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908) (java.lang.Thread.run)(Thread.java:662)

答えて

1

HAで動作するhornetqクライアントの作成方法が見つかりましたが、JNDIを使用してルックアップを使用して接続ファクトリを取得する必要があります。 私はこのようでした:

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
    <property name="environment"> 
     <props> 
      <prop key="java.naming.provider.url">jnp://jndi-host:jndi-port</prop> 
      <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop> 
     </props> 
    </property> 
</bean> 

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiTemplate" ref="jndiTemplate" /> 
    <property name="jndiName" value="ConnectionFactory" /> 
</bean> 

私はJNDIなく、そのようなクライアントを作成することができます方法はありますか? HornetQのを設定する

0

スプリングの設定は、フェイルオーバーをバックアップサーバに

<bean id="hornetQConnectionFactory" class="org.hornetq.jms.client.HornetQJMSConnectionFactory"> 
     <constructor-arg index="0" name="ha" value="true" /> 
     <constructor-arg index="1"> 
      <list> 
       <bean class="org.hornetq.api.core.TransportConfiguration"> 
        <constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" /> 
        <constructor-arg> 
         <map key-type="java.lang.String" 
          value-type="java.lang.Object"> 
          <entry key="host" value="Q-server-1"></entry> 
          <entry key="port" value="5445"></entry> 
         </map> 
        </constructor-arg> 
       </bean> 
       <bean class="org.hornetq.api.core.TransportConfiguration"> 
        <constructor-arg value="org.hornetq.core.remoting.impl.netty.NettyConnectorFactory" /> 
        <constructor-arg> 
         <map key-type="java.lang.String" 
          value-type="java.lang.Object"> 
          <entry key="host" value="Q-server2"></entry> 
          <entry key="port" value="5446"></entry> 
         </map> 
        </constructor-arg> 
       </bean> 
      </list> 
     </constructor-arg> 
    </bean> 

Q1は主であり、Q2はバックアップとして設定されています。 HornetQ hornetq-2.4.0.finalスタンドアロンインストール、およびhornetq-jms-clientバージョンのクライアントで動作します。2.4.5.Final

関連する問題