のために呼ばれて、なぜ私は、単純なPublisher->交換 - >キューとリスナーモデルのConfirmCallback、ReturnCallbackフローをテストしています。私はpublisherConfirms、publisherReturnsを必須に設定しました。 無効なキュー名を使用して、既存の交換機に新しいメッセージを発行しました。期待どおり、私はReturnCallback.returnedMessageメソッドのコールバックを受け取りました。しかし、私はConfirmCallback.confirmメソッドへのコールバックも受け取りました。キュー名が無効なので、ReturnCallback.returnedMessageメソッドだけがコールバックを受け取っているはずです。 ConfirmCallback.confirmメソッドが呼び出されるのはなぜですか?私は何度もシナリオをテストして、同じ結果を受けました。以下のコードスニペットとログファイルをご確認のうえ、何か問題がある場合にお知らせください。ブローカーがそれを処理終了時は、無効なキューに公開する場合は、ReturnCallbackが呼び出されますが、ConfirmCallbackが同じメッセージ
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback(new ConfirmCallback() {
@Override
public void confirm(final CorrelationData correlationData, final boolean ack,
final String cause) {
System.out.println("confirmCallback received with correlationData, ack, cause" + correlationData+ cause + ack);
if (null != confirmCallbackUser) {
confirmCallbackUser.confirm(correlationData.getId(), ack, cause);
} });
rabbitTemplate.setMandatory(true);
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback()
@Override
public void returnedMessage(final Message message, final int replyCode,
final String replyText, final String exchange, final String routingKey) {
Message msg = new Message(message);
try {
System.out.println("returnCallBackUser received with message, replyCode, replyText, exchange, routingKey" + message + replyCode + replyText+ exchange + routingKey);
returnCallBackUser.returnedMessage(msg, replyCode, replyText, exchange,
routingKey);
} catch (MessagingException e) {
System.out.println("returnCallBackUser exception : " + e.getMessage());
e.printStackTrace();
}
System.err.println(" Message Returned");
}
ログ
40053 [https-openssl-nio-8443-exec-6] DEBUG c.s.n.f.s.messaging.MessImpl **- Control reached send()**
40056 [https-openssl-nio-8443-exec-6] DEBUG o.s.a.r.c.CachingConnectionFactory - Creating cached Rabbit Channel from PublisherCallbackChannelImpl: AMQChannel(amqp://[email protected]:5672/,2)
40056 [https-openssl-nio-8443-exec-6] DEBUG o.s.a.r.s.PublisherCallbackChannelImpl - Added listener [email protected]
40057 [https-openssl-nio-8443-exec-6] DEBUG o.s.amqp.rabbit.core.RabbitTemplate - Added pubsub channel: Cached Rabbit Channel: PublisherCallbackChannelImpl: AMQChannel(amqp://[email protected]:5672/,2), conn: [email protected] Shared Rabbit Connection: [email protected] [delegate=amqp://[email protected]:5672/, localPort= 60962] to map, size now 1
40057 [https-openssl-nio-8443-exec-6] DEBUG o.s.amqp.rabbit.core.RabbitTemplate **- Executing callback on RabbitMQ Channel: Cached Rabbit Channel:** PublisherCallbackChannelImpl: AMQChannel(amqp://[email protected]:5672/,2), conn: [email protected] Shared Rabbit Connection: [email protected] [delegate=amqp://[email protected]:5672/, localPort= 60962]
40061 [https-openssl-nio-8443-exec-6] DEBUG o.s.amqp.rabbit.core.RabbitTemplate **- Publishing message on exchange [ControlExchange], routingKey = [invalidQueue]**
40064 [https-openssl-nio-8443-exec-6] DEBUG c.s.n.f.s.messaging.MessImpl - **Control moving out of send()**
***returnCallBackUser received with message,*** replyCode, replyText, exchange, routingKey(Body:'[[email protected](byte[91])' MessageProperties [headers={IDENTITY=TOMCAT_CONTROL}, timestamp=null, messageId=null, userId=null, receivedUserId=null, appId=null, clusterId=null, type=null, correlationId=[80, 114, 111, 100, 117, 99, 101, 114], correlationIdString=null, replyTo=ControlExchange/ComAckQueue, contentType=application/octet-stream, contentEncoding=null, contentLength=0, deliveryMode=null, receivedDeliveryMode=PERSISTENT, expiration=null, priority=0, redelivered=null, receivedExchange=null, receivedRoutingKey=null, receivedDelay=null, deliveryTag=0, messageCount=null, consumerTag=null, consumerQueue=null])312NO_ROUTEControlExchangeinvalidQueue
40066 [AMQP Connection 127.0.0.1:5672] INFO c.s.n.f.s.m.CallBackRecReplyInterfaceTemplate - Message {"Test":"abcd","Role":"abcd","Id":"1111","request":"Accepted","De":"invalidQueue"} replyCode-> 312breplyText-> NO_ROUTE exchange-> Exchange routingKey-> invalidQueue
**Message Returned**
40066 [AMQP Connection 127.0.0.1:5672] DEBUG o.s.a.r.s.PublisherCallbackChannelImpl - **PublisherCallbackChannelImpl: AMQChannel(amqp://[email protected]:5672/,2) PC:Ack:1:false**
40067 [AMQP Connection 127.0.0.1:5672] DEBUG o.s.a.r.s.PublisherCallbackChannelImpl - **Sending confirm PendingConfirm [correlationData=CorrelationData [id=corrlDat]]
confirmCallback received with correlationData, ack, causeCorrelationData [id=corrlDat]nulltrue**
40067 [AMQP Connection 127.0.0.1:5672] INFO c.s.n.f.s.m.CallbackConfirmImplTempl - **ACK->truecause->nullcorr id corrlDat
40067 [AMQP Connection 127.0.0.1:5672] INFO c.s.n.f.s.messaging.MessagingImpl - ACK->truecause->nullcorr id corrlDat**