Prefacio
Primero mira el mecanismo de devolución de llamada:
- No importa si el mensaje se entrega al intercambio o no, se realiza la devolución de llamada ConfirmCallback y la entrega es exitosa ack = true, de lo contrario es falso
- Si el interruptor coincide con la cola correctamente, no se realizará la devolución de llamada ReturnCallback; de lo contrario, la devolución de llamada ReturnCallback se realizará primero y luego se realizará la devolución de llamada ConfirmCallback
- Si el mensaje se entrega correctamente al intercambio pero no coincide con la cola, la confirmación de devolución de llamada ConfirmCallback sigue siendo verdadera
我的springboot版本springBootVersion = '2.2.1.RELEASE'
Confirmar devolución de llamada
Primero necesitas configurar en yml:
publisher-confirm-type: correlated
/**
* 测试消息确认回调(必须在yml配置publisher-confirm-type: correlated)
*/
@GetMapping("sendConfirmCallback")
public Resp sendConfirmCallback() {
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
System.out.println("ack:" + ack);
if (!ack) {
System.out.println("异常处理");
}
});
amqpTemplate.convertAndSend("test-queue", "测试ack确认模式");
return Resp.success("ok", null);
}
Devolución de llamada
Necesita ser configurado en yml
publisher-returns: true
@Autowired
private AmqpTemplate amqpTemplate;
@Resource
private RabbitTemplate rabbitTemplate;
/**
* 启动消息失败返回,比如路由不到队列时触发回调
* 测试发布回调(必须在yml配置publisher-returns: true)
*/
@GetMapping("sendReturnCallback")
public Resp sendReturnCallback() {
RabbitTemplate.ReturnCallback returnCallback = (message, replyCode, replyText, exchange, routingKey) -> {
System.out.println("========returnCallback=============");
System.out.println("========returnCallback=============");
};
rabbitTemplate.setReturnCallback(returnCallback);
amqpTemplate.convertAndSend("test-", "测试发布回调模式");
return Resp.success("ok", null);
}