Я ищу способ доставки сообщения, и как только сообщение успешно доставлено (и направлено), мне нужно выполнить некоторые операции.
Я включил издателя, который подтверждает и возвращает:
spring.rabbitmq.publisher-confirm-type=correlated
spring.rabbitmq.publisher-returns=true
Я настроил возврат и подтверждение обратного вызова на шаблоне кролика:
rabbitTemplate.setMandatory(true);
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
System.out.println("Message returned");
});
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
System.out.println("confirm"); //correlationData.returnedMessage has the original message
});
Вот мой код sh publi:
CorrelationData crd = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend("X-ORDERS", "ORDER_PLACED", request, crd);
crd.getFuture().addCallback(new ListenableFutureCallback<Confirm>() {
@Override
public void onFailure(Throwable throwable) {
log.info("Failure received");
}
@Override
public void onSuccess(Confirm confirm) {
if(confirm.isAck()){
log.info("Success received");
doSomethingAfterSuccess();
}}
});
Теперь, когда я publi sh сообщение, которое не может перенаправить сообщение: -
returnCallBack и подтверждениеCallBack rabbitTemplate также
называется
onSuccess (..) для correlationData по-прежнему вызывается с помощью isAck () = true
Итак, как я могу проверить, доставлено ли сообщение успешно и направлено ли оно?
РЕДАКТИРОВАТЬ: Найдено решение. Код publi sh:
CorrelationData crd = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend("X-ORDERS", "ORDER_PLACED", request, crd);
crd.getFuture().addCallback(new ListenableFutureCallback<Confirm>() {
@Override
public void onFailure(Throwable throwable) {
log.info("Failure received");
}
@Override
public void onSuccess(Confirm confirm) {
if(confirm.isAck() && crd.getReturnedMessage == null){
log.info("Success received");
doSomethingAfterSuccess();
}}
});
в основном изменил условие в onSuccess на «verify.isAck () && crd.getReturnedMessage == null»