2017-06-30 7 views
0

私はspring-amqpを使用しています。リスナー(rabbitmq、spring-amqp)のプリフェッチカウントをリセットします

ChannelAwareMessageListenerを実装するリスナーでプリフェッチ数をリセットする方法を教えてください。

public class TestListener implements ChannelAwareMessageListener { 

    @Override 
    public void onMessage(Message message, Channel channel) throws IOException { 
      channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 

      if (some conditions) { 
       // the prefetch count has been initialized to 1 in the SimpleMessageListenerContainer 
       // here I want to reset the prefetch count 
       channel.basicQos(10, true); // not working, I want to request 10 messages next time 

       // I can do this way, following code work as expected, but is this the right way? 
       container.stop(); // SimpleMessageListenerContainer 
       container.setPrefetchCount(10); 
       container.start(); 
      } 
    } 
} 

つまり、リスナーでプリフェッチカウントを動的にリセットしたいとします。

答えて

0

チャネルのプリフェッチを変更すると、そのチャネルで作成された新しいコンシューマにのみ影響します。既存のコンシューマは、作成時にチャネルにあったqosプリフェッチを取得します。

はい、停止してコンテナを再起動すると機能します。

ただし、リスナースレッドでは実行しないでください。停止/開始にタスク実行プログラムを使用する必要があります。それ以外の場合は、消費者スレッドがコンテナに戻るのを待ってstop()が5秒遅れる(デフォルトで)ので、リスナスレッドでstop()を実行しないでください。

または減らすことができますshutdownTimeout

関連する問題