目录
一、前言
在做项目中,服务之间需要通讯,原本使用的http请求,但是并发量上来后,速度就不是很理想,所以决定用MQ消息队列来解决这个问题。
举例:一个服务要将客户发过来的消息进行分类,是水果的调用处理水果的服务器,是蔬菜的调用处理蔬菜的服务器,也就是每台服务器要处理自己队列里的消息。
二、集成MQ
2.1 pom文件引入jar
<!-- rabbitmq依赖 strat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- rabbitmq依赖 end-->
2.2 yaml文件,及配置类配置MQ
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
## 自定义配置
xue:
messageType: 水果
@Configuration
public class RabbitMQConfig {
public static String messageType;
@Value("${xue.messageType}")
public void setMessageType(String messageType) {
RabbitConfig.messageType = messageType;
}
}
2.3 编写生产者
首先生产者要判断自己接收来的消息是什么类型,然后动态的拼接队列名称,向队列中放入消息。
@Component
public class MessageProducer {
private final RabbitTemplate rabbitTemplate;
public MessageProducer(RabbitTemplate rabbitTemplate){
this.rabbitTemplate = rabbitTemplate;
}
public void sendMsg() {
String messageType = "水果";
rabbitTemplate.convertAndSend("Queue_"+messageType,"橘子");
}
}
2.4 编写消费者
@Component
public class MessageConsumer {
//messageType是在yaml中配置好的,这个服务器处理什么的消息
private static final String QUEUE_NAME="Queue_"+ RabbitMQConfig.messageType;
@Bean
public Queue queue(){
return new Queue(QUEUE_NAME,true);
}
@RabbitListener(queues = "#{queue.name}")
@RabbitHandler
public void process(String command){
System.out.println("队列:"+QUEUE_NAME+"得到消息为:"+command);
}
}
对你有帮助就点个赞呗!over~~