From c0bda7152090551c07d0bfb7c274f28118c57253 Mon Sep 17 00:00:00 2001 From: Administrator Date: Tue, 6 Dec 2022 17:16:28 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=9157=EF=BC=88=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF=E5=88=B0?= =?UTF-8?q?MQ=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beacon-api/pom.xml | 5 -- .../mashibing/api/config/RabbitMQConfig.java | 26 +++++++++ .../api/config/RabbitTemplateConfig.java | 55 +++++++++++++++++++ .../api/controller/SmsController.java | 9 +++ .../api/controller/TestController.java | 4 +- beacon-api/src/main/resources/bootstrap.yml | 1 + .../common/constant/RabbitMQConstants.java | 14 +++++ .../common/model/StandardSubmit.java | 3 +- pom.xml | 5 ++ 9 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 beacon-api/src/main/java/com/mashibing/api/config/RabbitMQConfig.java create mode 100644 beacon-api/src/main/java/com/mashibing/api/config/RabbitTemplateConfig.java create mode 100644 beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstants.java diff --git a/beacon-api/pom.xml b/beacon-api/pom.xml index e89af55..f838bda 100644 --- a/beacon-api/pom.xml +++ b/beacon-api/pom.xml @@ -28,11 +28,6 @@ com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config - - - org.springframework.cloud - spring-cloud-starter-openfeign - org.springframework.boot 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..a0f0470 --- /dev/null +++ b/beacon-api/src/main/java/com/mashibing/api/config/RabbitMQConfig.java @@ -0,0 +1,26 @@ +package com.mashibing.api.config; + +import com.mashibing.common.constant.RabbitMQConstants; +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 zjw + * @description + */ +@Configuration +public class RabbitMQConfig { + + /** + * 接口模块发送消息到策略模块的队列 + * @return + */ + @Bean + public Queue preSendQueue(){ + return QueueBuilder.durable(RabbitMQConstants.SMS_PRE_SEND).build(); + } + +} diff --git a/beacon-api/src/main/java/com/mashibing/api/config/RabbitTemplateConfig.java b/beacon-api/src/main/java/com/mashibing/api/config/RabbitTemplateConfig.java new file mode 100644 index 0000000..82a1911 --- /dev/null +++ b/beacon-api/src/main/java/com/mashibing/api/config/RabbitTemplateConfig.java @@ -0,0 +1,55 @@ +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; + +/** + * 设置RabbitTemplate的confirm&return机制 + * @author zjw + * @description + */ +@Configuration +@Slf4j +public class RabbitTemplateConfig { + + @Bean + public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){ + //1、构建RabbitTemplate对象 + RabbitTemplate rabbitTemplate = new RabbitTemplate(); + + //2、设置connectionFactory + rabbitTemplate.setConnectionFactory(connectionFactory); + + //3、配置confirm机制 + rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback(){ + + @Override + public void confirm(CorrelationData correlationData, boolean ack, String cause) { + // ack为false,代表消息没有发送到exchange。 + if(!ack){ + log.error("【接口模块-发送消息】 消息没有发送到交换机,correlationData = {},cause = {}",correlationData,cause); + } + } + }); + + //4、配置return机制 + rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback(){ + + // 触发这个回调,说明交换机没有把消息路由到指定的队列中 + @Override + public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { + log.error("【接口模块-发送消息】 消息没有路由到指定的Queue。 message = {},exchange = {},routingKey = {}", + new String(message.getBody()),exchange,routingKey); + } + }); + + //5、返回 + 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 df34920..27ad4b5 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.filter.CheckFilterContext; import com.mashibing.api.form.SingleSendForm; import com.mashibing.api.util.R; import com.mashibing.api.vo.ResultVO; +import com.mashibing.common.constant.RabbitMQConstants; import com.mashibing.common.enums.ExceptionEnums; import com.mashibing.common.model.StandardSubmit; import com.mashibing.common.util.SnowFlakeUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; +import org.springframework.amqp.rabbit.connection.CorrelationData; +import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; @@ -34,6 +37,9 @@ public class SmsController { @Autowired private SnowFlakeUtil snowFlakeUtil; + @Autowired + private RabbitTemplate rabbitTemplate; + /** * 客户端IP地址的请求头信息,多个用','隔开。 @@ -89,6 +95,9 @@ public class SmsController { submit.setSequenceId(snowFlakeUtil.nextId()); //=========================发送到MQ,交给策略模块处理========================================= + rabbitTemplate.convertAndSend(RabbitMQConstants.SMS_PRE_SEND,submit,new CorrelationData(submit.getSequenceId().toString())); + + // =====================没有问题,返回接收成功=============================== return R.ok(); } diff --git a/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java b/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java index 745a856..8ad56da 100644 --- a/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java +++ b/beacon-api/src/main/java/com/mashibing/api/controller/TestController.java @@ -15,9 +15,11 @@ public class TestController { @Autowired private CheckFilterContext checkFilterContext; - @GetMapping("/api/test") + + @GetMapping("/test/api") public void test(){ System.out.println("===================================="); checkFilterContext.check(null); } + } diff --git a/beacon-api/src/main/resources/bootstrap.yml b/beacon-api/src/main/resources/bootstrap.yml index 8a8837c..0e646aa 100644 --- a/beacon-api/src/main/resources/bootstrap.yml +++ b/beacon-api/src/main/resources/bootstrap.yml @@ -16,3 +16,4 @@ spring: file-extension: yml # beacon-api-dev.yml + diff --git a/beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstants.java b/beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstants.java new file mode 100644 index 0000000..e84dbae --- /dev/null +++ b/beacon-common/src/main/java/com/mashibing/common/constant/RabbitMQConstants.java @@ -0,0 +1,14 @@ +package com.mashibing.common.constant; + +/** + * RabbitMQ中的一些队列信息 + * @author zjw + * @description + */ +public interface RabbitMQConstants { + + /** + * 接口模块发送消息到策略模块的队列名称 + */ + String SMS_PRE_SEND = "sms_pre_send_topic"; +} diff --git a/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java b/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java index 34240e7..b11d03e 100644 --- a/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java +++ b/beacon-common/src/main/java/com/mashibing/common/model/StandardSubmit.java @@ -4,6 +4,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serializable; import java.time.LocalDateTime; /** @@ -15,7 +16,7 @@ import java.time.LocalDateTime; @Data @NoArgsConstructor @AllArgsConstructor -public class StandardSubmit { +public class StandardSubmit implements Serializable { /** * 针对当前短信的唯一标识,雪花算法 diff --git a/pom.xml b/pom.xml index 63f69d5..22f4bd1 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ pom import + + org.springframework.boot + spring-boot-starter-amqp + 2.6.3 +