2017-12-12 8 views
0

を停止しますウサギのリスナーは、RabbitMQのノードがダウンしているときは、常に消費者を実行するか、利用できるのRabbitMQサーバーがRabbitMQのExchangeにいくつかのメッセージを生成し、ウサギListener.butとQUEUENAMEにメッセージベースがキューIAMにメッセージが常に</p> <p>を取得していないときに消費していたときに

<bean id="rabbitListenerContainerFactory" class="org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory"> 
     <property name="connectionFactory" ref="connectionFactory" /> 
     <property name="concurrentConsumers" value="5"/> 
     <property name="maxConcurrentConsumers" value="10"/> 
     <property name="prefetchCount" value="10"/> 
     <property name="defaultRequeueRejected" value="false"/> 
</bean> 
<rabbit:listener-container connection-factory="connectionFactory" concurrency="5" prefetch="10" acknowledge="auto" idle-event-interval="500000000000000"> 
    <rabbit:listener ref="rabbitListenerContainerFactory" queue-names="queue.email" /> 
    <rabbit:listener ref="rabbitListenerContainerFactory" queue-names="queue.sms" /> 
    </rabbit:listener-container> 

の下に、私はRabbitMQのノードが停止している間にも例外を取得していないことを期待していますように私のコードです

org.springframework.amqp.rabbit.connection.AutoRecoverConnectionNotCurrentlyOpenException: Auto recovery connection is not currently open 
    at org.springframework.amqp.rabbit.connection.SimpleConnection.isOpen(SimpleConnection.java:95) 
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$ChannelCachingConnectionProxy.isOpen(CachingConnectionFactory.java:1151) 
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.getChannel(CachingConnectionFactory.java:420) 
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.access$1500(CachingConnectionFactory.java:97) 
    at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$ChannelCachingConnectionProxy.createChannel(CachingConnectionFactory.java:1084) 
    at org.springframework.amqp.rabbit.core.RabbitTemplate.doExecute(RabbitTemplate.java:1435) 
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1411) 
    at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:1387) 
    at org.springframework.amqp.rabbit.core.RabbitAdmin.getQueueProperties(RabbitAdmin.java:336) 
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.redeclareElementsIfNecessary(SimpleMessageListenerContainer.java:1114) 
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$1100(SimpleMessageListenerContainer.java:95) 
    at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1333) 
    at java.lang.Thread.run(Thread.java:745) 

C誰もがこの問題を避けるために私たちを助ける?

答えて

0

どのバージョンをお使いですか?

基礎接続ファクトリーを自分で設定する場合は、autoRecoveryEnabledからfalseに設定します。

Configuring the Underlying Client Connection Factoryを参照してください。

4.0.xクライアントは、デフォルトで自動回復を有効にします。この機能と互換性がありますが、Spring AMQPには独自の回復メカニズムがあり、クライアント回復機能は一般的には必要ありません。ブローカが使用可能で、接続がまだ回復していないときにAutoRecoverConnectionNotCurrentlyOpenException秒を避けるために、amqp-clientの自動回復を無効にすることをお勧めします。たとえば、クラスタ内の別のブローカにフェイルオーバーした場合でも、RetryTemplateがRabbitTemplateで設定されている場合など、この例外が発生することがあります。自動復旧接続がタイマーで復旧するので、Spring AMQPの回復メカニズムを使用して接続を速く復旧することができます。 バージョン1.7.1から、独自のRabbitMQ接続ファクトリを明示的に作成してCachingConnectionFactoryに提供しない限り、Spring AMQPはそれを無効にします。 RabbitConnectionFactoryBeanによって作成されたRabbitMQ ConnectionFactoryインスタンスも、デフォルトでは無効になっています。

+0

プロパティautoRecoveryEnabledはSimpleListenerContainerファクトリでは使用できません.i CachingConnectionFactoryでチェックしました。また、autoStartupも利用可能です。設定を追加すると非常に役立ちます。 – Balaji

+0

私たちはそのプロパティを設定することを奨励したくありません。 1.7.0を使用していない限り、com.rabbitmq接続ファクトリ(1.7.0を使用している場合1.7.5にアップグレードする必要があります)を挿入しない限り、このプロパティはデフォルトでfalseです。 com.rabbitmq接続ファクトリーの場合は、そのプロパティーをfalseに設定する必要があります。 –

関連する問題