package com.farriver.bwf.service.config; import com.farriver.bwf.common.statics.MailConstants; import jakarta.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { private static final Logger logger = LoggerFactory.getLogger(RabbitConfig.class); @Resource CachingConnectionFactory cachingConnectionFactory; // @Resource // MailSendLogService mailSendLogService; @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate rabbitTemplate = new RabbitTemplate(cachingConnectionFactory); rabbitTemplate.setConfirmCallback((data, ack, cause) -> { String msgId = data.getId(); if (ack) { logger.info(msgId + ":消息发送成功"); // mailSendLogService.updateMailSendLogStatus(msgId, MailStatus.SUCCESSFUL); } else { logger.info(msgId + ":消息发送失败"); } }); rabbitTemplate.setReturnsCallback((data) -> { logger.info("消息发送失败"); }); return rabbitTemplate; } @Bean public Queue mailQueue() { return new Queue(MailConstants.MAIL_QUEUE_NAME, true); } @Bean public DirectExchange mailExchange() { return new DirectExchange(MailConstants.MAIL_EXCHANGE_NAME, true, false); } @Bean public Binding mailBinding() { return BindingBuilder.bind(mailQueue()).to(mailExchange()).with(MailConstants.MAIL_ROUTING_KEY_NAME); } }