diff --git a/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQConfig.java b/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQConfig.java new file mode 100644 index 0000000..c7800f6 --- /dev/null +++ b/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQConfig.java @@ -0,0 +1,28 @@ +package com.mashibing.api.config; + +import com.mashibing.common.constant.RabbitMQConstant; +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author heqijun + * @ClassName: RabbitMQConfig + * @Description: RabbitMQConfig + * @date 2025/6/7 17:07 + */ + +@Configuration +public class RabbitMQConfig { + + /** + * 构建接口模块发送消息到策略模块的队列 + * + * @return + */ + @Bean + public Queue preSendQueue() { + return QueueBuilder.durable(RabbitMQConstant.SMS_PRE_SEND).build(); + } +} diff --git a/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQTemplateConfig.java b/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQTemplateConfig.java new file mode 100644 index 0000000..6cf1079 --- /dev/null +++ b/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQTemplateConfig.java @@ -0,0 +1,52 @@ +package com.mashibing.api.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.core.Message; +import org.springframework.amqp.rabbit.connection.ConnectionFactory; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author heqijun + * @ClassName: RabbitMQTemplateConfig + * @Description: 配置RabbitMQTemplate的confirm和return机制 + * @date 2025/6/7 17:12 + */ + +@Configuration +@Slf4j +public class RabbitMQTemplateConfig { + + @Bean + public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { + + //设置connectionFactory + RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); + + //配置confirm机制回调 + rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + //消息妹有发送到交换机 + if (!ack) { + log.error("【接口模块-发送消息】消息没有发送到交换机。。。" + + "\n correlationData={},ack={},cause:{} ", correlationData, ack, cause); + } + } + }); + + //配置return机制回调 + rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { + @Override + public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { + log.error("【接口模块-发送消息】消息没有路由到指定的队列。。。" + + "\nmessage={},exchange={},routingKey={}", new String(message.getBody()), exchange, routingKey); + + } + }); + + return rabbitTemplate; + } +} diff --git a/beacon-api/src/main/java/com/mashibing/api/controller/SMSController.java b/beacon-api/src/main/java/com/mashibing/api/controller/SMSController.java index 4cdb49d..e8d4aa8 100644 --- a/beacon-api/src/main/java/com/mashibing/api/controller/SMSController.java +++ b/beacon-api/src/main/java/com/mashibing/api/controller/SMSController.java @@ -4,11 +4,14 @@ import com.mashibing.api.pojo.SingleSendRequest; import com.mashibing.api.pojo.SingleSendResponse; import com.mashibing.api.service.SmsService; import com.mashibing.api.service.sendCheck.SendCheckContext; +import com.mashibing.common.constant.RabbitMQConstant; import com.mashibing.common.pojo.JsonResult; import com.mashibing.common.pojo.StandardSubmit; import com.mashibing.common.utils.JsonResultUtil; import com.mashibing.common.utils.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -41,9 +44,12 @@ public class SMSController { @Autowired SmsService smsService; + @Autowired + RabbitTemplate rabbitTemplate; + @PostMapping("singleSend") public JsonResult singleSend(@RequestBody @Validated SingleSendRequest request, HttpServletRequest httpServletRequest) { - //获取真实ip + // 获取真实ip String realIp = smsService.getRealIP(httpServletRequest); log.info("获取到客户端真实IP: {}", realIp); @@ -53,17 +59,19 @@ public class SMSController { standardSubmit.setRealIp(realIp); BeanUtils.copyProperties(request, standardSubmit); - //责任链校验 + // 责任链校验 sendCheckContext.check(standardSubmit); - //雪花算法生成唯一id + // 雪花算法生成唯一id standardSubmit.setSequenceId(snowFlakeUtil.nextId()); - //TODO 发送到MQ + // 发送到MQ + rabbitTemplate.convertAndSend(RabbitMQConstant.SMS_PRE_SEND, standardSubmit, + new CorrelationData(String.valueOf(standardSubmit.getSequenceId()))); SingleSendResponse singleSendResponse = new SingleSendResponse(); singleSendResponse.setCode(0); - singleSendResponse.setMsg("发送中。。。"); + singleSendResponse.setMsg("接收成功"); singleSendResponse.setCount(1); return JsonResultUtil.ok(singleSendResponse); } diff --git a/beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstant.java b/beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstant.java new file mode 100644 index 0000000..1a0f380 --- /dev/null +++ b/beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstant.java @@ -0,0 +1,15 @@ +package com.mashibing.common.constant; + +/** + * @author heqijun + * @ClassName: RabbitMQConstant + * @Description: RabbitMQConstant常量 + * @date 2025/6/7 17:02 + */ + +public interface RabbitMQConstant { + /** + * 接口模块发送消息到策略模块的队列名称 + */ + String SMS_PRE_SEND = "sms_pre_send_topic"; +} diff --git a/beacon-common/src/main/java/com/mashibing/common/pojo/StandardSubmit.java b/beacon-common/src/main/java/com/mashibing/common/pojo/StandardSubmit.java index eb65690..032426a 100644 --- a/beacon-common/src/main/java/com/mashibing/common/pojo/StandardSubmit.java +++ b/beacon-common/src/main/java/com/mashibing/common/pojo/StandardSubmit.java @@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serializable; import java.time.LocalDateTime; /** @@ -17,7 +18,7 @@ import java.time.LocalDateTime; @Data @NoArgsConstructor @AllArgsConstructor -public class StandardSubmit { +public class StandardSubmit implements Serializable { @Description("当前短信的唯一标识") private Long sequenceId;