diff --git a/february-fault-common/src/main/java/com/february/fault/config/ConfirmCallbackConfig.java b/february-fault-common/src/main/java/com/february/fault/config/ConfirmCallbackConfig.java new file mode 100644 index 0000000..3a684f3 --- /dev/null +++ b/february-fault-common/src/main/java/com/february/fault/config/ConfirmCallbackConfig.java @@ -0,0 +1,41 @@ +package com.february.fault.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; + + @PostConstruct // @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + public void init() { + rabbitTemplate.setConfirmCallback(this); + } + + /** + * 交换机不管是否收到消息的一个回调方法 : 消息的生产者发送消息给交换机,不管交换是否接收到消息都会 执行这个回调方法 + * + * @param correlationData 消息相关数据 + * @param ack 交换机是否收到消息 + * @param cause 失败原因 + */ + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + if (ack) { // 消息投递到broker 的状态,true表示成功 + log.info("消息发送成功!"); + } else { // 发送异常 + log.error("消息发送异常,异常原因:{}", cause); + } + } +} diff --git a/february-fault-common/src/main/java/com/february/fault/config/ReturnCallbackConfig.java b/february-fault-common/src/main/java/com/february/fault/config/ReturnCallbackConfig.java new file mode 100644 index 0000000..e12d9af --- /dev/null +++ b/february-fault-common/src/main/java/com/february/fault/config/ReturnCallbackConfig.java @@ -0,0 +1,34 @@ +package com.february.fault.config; + +import org.springframework.amqp.core.ReturnedMessage; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * 消息发送到队列的确认 一旦消息发送到队列失败 则会执行 returnedMessage 方法 + */ +@Component +public class ReturnCallbackConfig implements RabbitTemplate.ReturnsCallback { + + @Autowired + private RabbitTemplate rabbitTemplate; + + @PostConstruct // @PostContruct是spring框架的注解,在⽅法上加该注解会在项⽬启动的时候执⾏该⽅法,也可以理解为在spring容器初始化的时候执 + public void init() { + rabbitTemplate.setReturnsCallback(this); + } + + /** + * 消息发送到 队列失败 执行的 方法 + * @param returnedMessage the returned message and metadata. + */ + @Override + public void returnedMessage(ReturnedMessage returnedMessage) { + System.out.println("消息" + returnedMessage.getMessage().toString() + "被交换机" + returnedMessage.getExchange() + "回退!" + + "退回原因为:" + returnedMessage.getReplyText()); + // 回退了所有的信息,可做补偿机制 记录到 数据库 + } +} diff --git a/february-fault-server/src/main/java/com/february/fault/service/impl/FaultCodeServiceImpl.java b/february-fault-server/src/main/java/com/february/fault/service/impl/FaultCodeServiceImpl.java index 4a05662..a470018 100644 --- a/february-fault-server/src/main/java/com/february/fault/service/impl/FaultCodeServiceImpl.java +++ b/february-fault-server/src/main/java/com/february/fault/service/impl/FaultCodeServiceImpl.java @@ -15,6 +15,7 @@ import com.february.fault.mapper.FaultTypeMapper; import com.february.fault.service.FaultCodeService; import lombok.extern.log4j.Log4j2; import org.apache.poi.ss.formula.functions.T; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -32,6 +33,8 @@ import java.util.Objects; public class FaultCodeServiceImpl extends ServiceImpl implements FaultCodeService { @Autowired private FaultCodeMapper faultCodeMapper; + @Autowired + private RabbitTemplate rabbitTemplate; /** * 列表加查询加分页 * @param