2016-04-29 9 views
1

私はビヘイビアをテストしようとしていますspring rabbitmq確認コールバック、apiの記述に従って、否定応答がコンシューマを通して送信されているかどうかを確認します。常に真実を与えます。私は削除されたキューにメッセージを公開しても、確認コールバックで真の価値を得ました。否定的な承認を得る方法を教えてください。Spring RabbitMQはコールバックが正常に動作していないことを確認します

以下は、RabbitTemplate Beanの作成方法のコードです。

@Bean 
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { 
     RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); 
     ((CachingConnectionFactory)rabbitTemplate.getConnectionFactory()).setPublisherConfirms(true); 
     rabbitTemplate.setConfirmCallback(new ConfirmCallback() { 

      @Override 
      public void confirm(CorrelationData corData, boolean ack, String cause) { 
       System.out.println("devconfig.rabbitTemplate(...).new ConfirmCallback() {...}.confirm()"+corData); 
       System.out.println("devconfig.rabbitTemplate(...).new ConfirmCallback() {...}.confirm()"+ack); 
      } 
     }); 
     return rabbitTemplate; 

    } 

答えて

0

仕事ACKの方法ではない - NACKを取得することは稀である - - ブローカー自体に問題がある場合RabbitMQ documentationあなただけnackを取得するに応じて、ACKは、それが為替に配信されたことを意味します。 ...例外的な場合には

否定応答 ブローカーではなくbasic.ackの、メッセージを正常に処理できない、ブローカーはbasic.nackを送信します。この文脈では、basic.nackのフィールドは、basic.ackの対応するフィールドと同じ意味を持ち、再入力フィールドは無視する必要があります。ブローカーは、1つまたは複数のメッセージをナックすることによって、メッセージを処理できなかったことを示し、メッセージの処理を拒否します。その時点で、クライアントはメッセージを再発行することを選択することができる。

チャンネルを確認モードにすると、それ以降に公開されたすべてのメッセージは確認されます。メッセージがどのくらいすぐに確認されるかは保証されません。メッセージは確認もnack'dされません。

basic.nackは、キューを担当するErlangプロセスで内部エラーが発生した場合にのみ配信されます。

さらに、Spring AMQPは、ackが受信される前に接続がクローズされていれば、Nackを生成します(もう少し非常にまれです)。

メッセージをキューに配信できないことを通知するには、パブリッシャーの返品を有効にしてmandatoryをtrueに設定する必要があります。メッセージが返されます。

関連する問題