2

ブローカーがダウンしているために確立できなかった ActiveMQ 接続の例外をキャッチしようとしています。

次のコードで:

String url = ActiveMQConnection.DEFAULT_BROKER_URL;                
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
Connection connection = connectionFactory.createConnection();
connection.start();

ブローカがダウンしている場合、ブローカへの接続試行は無限ループに入ります。URLをに変更すると

String url = "failover:(tcp://127.0.0.1:61616/)?startupMaxReconnectAttempts=2";

2回試行してから例外をスローします(これが私が望んでいることです)。

ここで、Spring Bean を使用して次のように接続オブジェクトを初期化するとします。

<bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL">
        <!--<value>tcp://0.0.0.0:61616</value>-->
        <value>failover:(tcp://127.0.0.1:61616/)?startupMaxReconnectAttempts=2</value>
    </property>
</bean>

2回の試行で接続に失敗したというエラーメッセージが表示されますが、5秒ごとに同じエラーメッセージが再び表示され、無限ループに陥った後も再接続が試行されます。

ERROR transport.failover.FailoverTransport - Failed to connect to [tcp://127.0.0.1:61616/] after: 2 attempt(s)
WARN jms.listener.DefaultMessageListenerContainer - Could not refresh JMS Connection for destination 'destinationQueue' - retrying in 5000 ms. Cause: Connection refused
ERROR transport.failover.FailoverTransport - Failed to connect to [tcp://127.0.0.1:61616/] after: 2 attempt(s)
WARN jms.listener.DefaultMessageListenerContainer - Could not refresh JMS Connection for destination 'destinationQueue' - retrying in 5000 ms. Cause: Connection refused
ERROR transport.failover.FailoverTransport - Failed to connect to [tcp://127.0.0.1:61616/] after: 2 attempt(s)
WARN jms.listener.DefaultMessageListenerContainer - Could not refresh JMS Connection for destination 'destinationQueue' - retrying in 5000 ms. Cause: Connection refused
ERROR transport.failover.FailoverTransport - Failed to connect to [tcp://127.0.0.1:61616/] after: 2 attempt(s)
WARN jms.listener.DefaultMessageListenerContainer - Could not refresh JMS Connection for destination 'destinationQueue' - retrying in 5000 ms. Cause: Connection refused
these messages repeat!!

この無限ポーリングを停止し、失敗した場合に例外 (PostInit を使用している可能性があります) をキャッチする方法を知りたいです。

4

1 に答える 1