1

ある時点でメッセージの受信を停止し、再起動が必要な activemq キャメル ルートがあります。この状況をプログラムで検出して修正する方法がわかりません。

私のルートは次のようになります。

from("activemq:queue:Consumer.app.VirtualTopic.msg?messageConverter=#convertMsg")

それはすべてSpringで次のように構成されています:

<!-- Configure the Message Bus Factory -->
<bean id="jmsFactory" class="com.local.messaging.activemq.SpringSslContextConnectionFactory">
  <property name="brokerURL" value="${jms.broker.url}" />
  <property name="sslContext" ref="sslContext" />
</bean>

<!-- Connect the Message Bus Factory to Camel.  The 'activemq' bean
     name is necessary for Camel to pick it up automatically -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" depends-on="jmsFactory">
  <property name="usePooledConnection" value="true" />
  <property name="connectionFactory">
    <bean class="org.apache.activemq.pool.PooledConnectionFactory">
      <property name="maxConnections" value="20" />
      <property name="maximumActive" value="10" />
      <property name="connectionFactory" ref="jmsFactory" />
    </bean>
  </property>
</bean>

最後に、ブローカー URL は次のように構成されます。

jms.broker.url=failover://(ssl://amq1:61616,ssl://amq1:61616)

これは問題なく起動し、ほとんどの場合チャンピオンのように機能します。ただし、ログに次のメッセージが表示されることがよくあります。

Received a message on a connection which is not yet started. Have you forgotten to call Connection.start()? Connection: ActiveMQConnection {<details>}

これは、メッセージ バスが再起動した後に発生するのではないかと強く疑っていますが、メッセージ バスに直接アクセスできないため、確実なことはわかりません。私はそれが重要であることを知りません。

私にとっての鍵は次のとおりです。

  1. この状況をプログラムで検出するにはどうすればよいですか? スローされた例外などはないようです。これを確認した唯一の方法は、ログ ファイルを解析することです。
  2. それを検出した後、どうすれば修正できますか? ルートを作成する必要がstart()ありますか、それともよりクリーンな方法がありますか?stop()

最後に、スキームを使用して、このケースを activemq で処理する必要があるという提案をいくつか見ましたfailover。上記のように、私は使用failoverしていますが、これはまだ発生しています。

4

0 に答える 0