rabbitMQ
1、什么是消息队列?
可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Kafka,RocketMQ。
可以想象一下应用场景:双十一千万用户同时进行秒杀,如果只是简单的并行处理就会导致服务器崩溃。则可以使用MQ,把并行变成了串行,谁先进入队列,谁先执行。就可以很好的处理千万量级的同步事件。
使用条件:调用者A通过消息队列MQ调用执行者B,A不需要B的任何返回值,只是简单的A启动B。A发送消息到队列,B去队列中拿消息再去处理执行。
2、rabbitMQ实现
1、docker安装
15672是控制台端口,可以通过网址访问。(注意阿里云要开端口号)http://服务器host地址:15672
docker run -d --name rabbitMQ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -p 5672:5672 -p 15672:15672 rabbitmq:management
2、流程
多个队列时候需要一个交换机。
3、后端代码实现
1、导包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、rabbitMQ控制台中添加新的队列
3、yml中配置:
spring:
rabbitmq:
host: 192.168.80.141//主机地址
port: 5672 //通信端口号
username: admin
password: 1234567
4、生产端(发消息)
代码:
@Resource
RabbitTemplate rabbitTemplate;
@Test //“testqueue” 队列名称 “22222” 发送的内容,如果是对象,请序列化。
public void handler() throws JsonProcessingException, UnsupportedEncodingException {
rabbitTemplate.convertAndSend("testqueue","222222222222222222222222");
System.out.println("发送完成");
}
5、消费者代码:(取消息,需要监听!!!!)
注意一定要放入IOC容器中
package com.neuedu.mail;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component //!!!!!
public class TestCustomer {
@RabbitListener(queues = "testqueue")
public void receiver(Message message) {
System.out.println(new String(message.getBody()));
}
}