0

私は別のパブリッシャとコンシューマを持っています。パブリッシャとパブリッシュメッセージを開始します。私はコンシューマを開始し、問題はレディキューからメッセージを再キューに入れるあなたは、あなたが春AMQPを使用している場合ウサギのmQメッセージがレディキューからUnackキューに移動

@Bean 
public org.springframework.amqp.rabbit.connection.Connection mqConnection() { 
    CloudFactory cloudFactory = new CloudFactory(); 
    Cloud cloud = cloudFactory.getCloud(); 
    return cloud.getServiceConnector("mqservicename", ConnectionFactory.class, 
      null).createConnection(); 
} 
@Bean 
public StatefulRetryOperationsInterceptor interceptor() { 
     return RetryInterceptorBuilder.stateful().retryOperations(retryTemplate()).recoverer(new RejectAndDontRequeueRecoverer()) 

      .build(); 
} 
@Bean 
public SimpleMessageListenerContainer listenerContainer() { 
    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 
    container.setMessageListener(new MessageListenerAdapter()); 
    container.setAdviceChain(new Advice[] { 
      interceptor() 
    }); 

    return container; 
} 



@Bean 
public RetryTemplate retryTemplate(){ 
    Map map=new HashMap<Class<? extends Throwable>, Boolean>(); 
    map.put(CustomException.class, true); 
    RetryTemplate retryTemplate=new RetryTemplate(); 
    retryTemplate.setRetryPolicy(new SimpleRetryPolicy(3,map)); 
    return retryTemplate; 
} 
+0

メッセージを確認してもよろしいですか? – cantSleepNow

+0

はい、私はwas.Gowsのコメントと私はそれをオフにして上記の設定で試してみました。しかし、それは1つの試みと3ではない – user

答えて

0

:これは私が欲しいものavoid.Soたいのは、私はACK送信していない消費者の再起動や

Configurationを起動した場合にのみ再配信として、それがマークされるべきですこのような質問をするときに設定を表示する必要があります。

ackモードをMANUALに設定すると、acksの責任を負います。 the documentationを読んでください。 AUTO ackmodeの場合、コンテナは、リスナーが正常に戻るときにメッセージを確認します。

+0

私は再配信のロジックを変更することによって解決することができますcode.But問題は今では私は適切にテストすることができた少量のデータでしたが、大量のデータでは、以下の例外を受け取りました。 – user

+0

org.springframework.amqp.rabbit.connection.CachingConnectionFactory - チャネルシャットダウン:チャネルエラー。プロトコルメソッド:#method (reply-code = 406、reply-text = PRECONDITION_FAILED - 未知の配信タグ123、class-id = 60、method-id = 80) – user

+0

詳細を追加するには、3つのチャンス私はbasicNackを使用してtrue.On最後の失敗で、私はbasicknackを使用し、false.For成功するために、私はbasicAckを使用して再requuueを使用して(メッセージのいくつかの検証を行ういくつかのロジック)偽にする。 – user

関連する問題