package com.bwie.auth.config; import lombok.extern.log4j.Log4j2; import org.springframework.amqp.rabbit.connection.CorrelationData; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; /** * 消息发送确认配置 * 消息发送到交换机的回调 */ @Component @Log4j2 public class ConfirmCallbackConfig implements RabbitTemplate.ConfirmCallback { @Autowired private RabbitTemplate rabbitTemplate; /** * @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 */ @PostConstruct public void init() { rabbitTemplate.setConfirmCallback(this); } /** * 交换机不管是否收到消息的一个回调方法 * * @param correlationData 消息相关数据 * @param ack 交换机是否收到消息 * @param cause 失败原因 */ @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { if (!ack) { String exchange = correlationData.getReturned().getExchange(); String message = correlationData.getReturned().getMessage().getBody().toString(); // 发送异常 log.error("消息:{},发送到交换机:{}失败,原因是:{}", message, exchange, cause); // TODO 可以把异常信息 以及 消息的内容直接添加到 MYSQL } } }