视频57(接口模块发送消息到MQ)

master
Administrator 3 years ago
parent 3d5d86584b
commit c0bda71520

@ -28,11 +28,6 @@
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency> </dependency>
<!-- openFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- RabbitMQ--> <!-- RabbitMQ-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

@ -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();
}
}

@ -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;
/**
* RabbitTemplateconfirm&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;
}
}

@ -4,11 +4,14 @@ import com.mashibing.api.filter.CheckFilterContext;
import com.mashibing.api.form.SingleSendForm; import com.mashibing.api.form.SingleSendForm;
import com.mashibing.api.util.R; import com.mashibing.api.util.R;
import com.mashibing.api.vo.ResultVO; import com.mashibing.api.vo.ResultVO;
import com.mashibing.common.constant.RabbitMQConstants;
import com.mashibing.common.enums.ExceptionEnums; import com.mashibing.common.enums.ExceptionEnums;
import com.mashibing.common.model.StandardSubmit; import com.mashibing.common.model.StandardSubmit;
import com.mashibing.common.util.SnowFlakeUtil; import com.mashibing.common.util.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; 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.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
@ -34,6 +37,9 @@ public class SmsController {
@Autowired @Autowired
private SnowFlakeUtil snowFlakeUtil; private SnowFlakeUtil snowFlakeUtil;
@Autowired
private RabbitTemplate rabbitTemplate;
/** /**
* IP',' * IP','
@ -89,6 +95,9 @@ public class SmsController {
submit.setSequenceId(snowFlakeUtil.nextId()); submit.setSequenceId(snowFlakeUtil.nextId());
//=========================发送到MQ交给策略模块处理========================================= //=========================发送到MQ交给策略模块处理=========================================
rabbitTemplate.convertAndSend(RabbitMQConstants.SMS_PRE_SEND,submit,new CorrelationData(submit.getSequenceId().toString()));
// =====================没有问题,返回接收成功===============================
return R.ok(); return R.ok();
} }

@ -15,9 +15,11 @@ public class TestController {
@Autowired @Autowired
private CheckFilterContext checkFilterContext; private CheckFilterContext checkFilterContext;
@GetMapping("/api/test")
@GetMapping("/test/api")
public void test(){ public void test(){
System.out.println("===================================="); System.out.println("====================================");
checkFilterContext.check(null); checkFilterContext.check(null);
} }
} }

@ -16,3 +16,4 @@ spring:
file-extension: yml file-extension: yml
# beacon-api-dev.yml # beacon-api-dev.yml

@ -0,0 +1,14 @@
package com.mashibing.common.constant;
/**
* RabbitMQ
* @author zjw
* @description
*/
public interface RabbitMQConstants {
/**
*
*/
String SMS_PRE_SEND = "sms_pre_send_topic";
}

@ -4,6 +4,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
/** /**
@ -15,7 +16,7 @@ import java.time.LocalDateTime;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class StandardSubmit { public class StandardSubmit implements Serializable {
/** /**
* *

@ -49,6 +49,11 @@
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.6.3</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>

Loading…
Cancel
Save