2017-11-04 11 views
0

ActiveMQのトピックの恒久サブスクライバを作成しましたが、activeMQサーバを再起動するたびに恒久サブスクライバを作成するためにJavaサービスを再起動する必要があります利用可能です。 activemqの再起動が起こるたびに加入者を自動的に利用できるようにする方法はありますか?ActiveMQの恒久サブスクライバの再起動時に、この場合の恒久サブスクライバの自動作成の助けが必要

以下は、私が使用しているサンプルコードです。

@Bean 
public ConnectionFactory connectionFactory() throws JMSException{ 
    ConnectionFactory factory= new ActiveMQConnectionFactory(brokerURL); 
    Connection conn = factory.createConnection(); 
    conn.setClientID(ClientId); 

    Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); 
    Topic topic = session.createTopic(exampleTopic); 
    MessageConsumer messageConsumer = session.createDurableSubscriber(topic, 
    subscriberName); 
    messageConsumer.setMessageListener(consumerMessageListner); 
    conn.start(); 

    return factory; 
} 

答えて

0

あなたが春を使用しているので、あなたの代わりに、独自のJMSコードを書くの(spring-jmsジャーの中)Springの組み込みのJMSサポートを使用する必要があります。 the documentationを参照してください。 DefaultMessageListenerContainer

@Bean 
public DefaultMessageListenerContainer container(ConnectionFactory connectionFactory, 
     MessageListener messageListener) { 
    DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(); 
    container.setConnectionFactory(connectionFactory); 
    container.setDestinationName("myTopic"); 
    container.setPubSubDomain(true); 
    container.setSubscriptionDurable(true); 
    container.setSubscriptionName("mySubscriber"); 
    container.setClientId("myClientId"); 
    container.setSessionTransacted(true); 
    container.setMessageListener(messageListener); 
    return container; 
} 

@Bean 
public MessageListener listener() { 
    return System.out::println; 
} 

@Bean 
public ApplicationRunner runner(JmsTemplate template) { 
    return args -> { 
     while (true) { 
      template.convertAndSend("foo"); 
      System.in.read(); 
     } 
    }; 
} 

と...

ActiveMQTextMessage {commandIdを= 5、responseRequired = trueの場合、イベントID = ID ...あなたのために再接続しようとし続けます:gollum.local-64266から1509806046256 -1:2:1:1:1、originalDestination = null、originalTransactionId = null、producerId = ID:gollum.local-64266-1509806046256-1:2:1:1、destination = topic:// myTopic、transactionId = null 0、timestamp = 1509806046424、arrival = 0、brokerInTime = 1509806046425、brokerOutTime = 1509806046475、correlationId = null、replyTo = null、persistent = true、type = null、priority = 4、groupID = null、groupSequence = 0、プロパティ値= null、読み取り専用プロパティ= true、読み取り専用プロパティ= null、

2017-11-04 10:34:12.813 WARN 2889 --- [container-1] osjlDefaultMessageListenerContainer:JMSメッセージリスナーの呼び出し側のセットアップに失敗しました目的地 'myTopic'のために - 回復しようとしています。原因:java.io.EOFException

2017-11-04 10:34:12.816エラー2889 --- [container-1] osjlDefaultMessageListenerContainer:宛先 'myTopic'のJMS接続をリフレッシュできませんでした - FixedBackOffを使用して再試行{interval = 5000、currentAttempts = 0、maxAttempts =無制限}。原因:ブローカURL:tcp://10.0.0.3:61616に接続できませんでした。理由:java.net.ConnectException:接続が拒否されました(接続が拒否されました)

2017-11-04 10:34:17.823 ERROR 2889 --- [container-1] osjlDefaultMessageListenerContainer:宛先 'myTopic ' - FixedBackOff {interval = 5000、currentAttempts = 1、maxAttempts = unlimited}を使用して再試行します。原因:ブローカURL:tcp://10.0.0.3:61616に接続できませんでした。理由:java.net.ConnectException:接続が拒否されました(接続が拒否されました)

2017-11-04 10:34:22.827 ERROR 2889 --- [container-1] osjlDefaultMessageListenerContainer:宛先 'myTopic ' - FixedBackOff {interval = 5000、currentAttempts = 2、maxAttempts = unlimited}を使用して再試行します。原因:ブローカURL:tcp://10.0.0.3:61616に接続できませんでした。理由:java.net.ConnectException:34:27.897 INFO 2889 --- [容器-1] o.s.j.l.DefaultMessageListenerContainer:正常リフレッシュJMS接続

接続

2017年11月4日10(接続拒否)拒否しました

関連する問題