1消息队列基础
1.1同步异步
同步调用
-
时效性强
-
拓展性差
-
性能下降
-
级联失败
异步调用
-
业务解耦,拓展性强
-
无需等待,性能好
-
故障隔离
-
缓存信息,流量削峰填谷
-
时效性差
-
不确定执行是否成功
1.2MQ技术选型
2安装
2.1安装步骤
linux环境,用docker安装
-
下载rabbitmq镜像
docker pull rabbitmq:3.7.15
-
创建容器
docker run -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -v mq-plugins:/plugins --name rabbitmq --hostname myrabbitmq -p 15672:15672 -p 5672:5672 -d rabbitmq:3.7.15
-
查看容器
docker ps
-
配置管理页面插件
docker exec -it rabbitmq /bin/bash rabbitmq-plugins enable rabbitmq_management
-
访问管理页面ip:15672,账号密码为创建容器的RABBITMQ_DEFAULT信息
2.2架构和概念
-
publisher:消息发送者
-
consumer:消息消费者
-
queue:队列,负责存储消息
-
exchange:交换机,负责路由转发消息
-
virtual-host:虚拟主机,负责数据隔离
3Java客户端
3.1AMQP
高级消息队列协议
Spring AMQP:基于AMQP协议定义的一套API规范
3.2简单发送接收消息
rabbitmq管理页面创建队列testQueue
微服务项目,引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置rabbitmq信息
spring:
rabbitmq:
host: ip
port: 5672
virtual-host: /
username: username
password: password
发送,用单元测试
@SpringBootTest(classes = UserApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SpringAmqpTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void test() {
String queue = "testQueue";
String message = "hello";
rabbitTemplate.convertAndSend(queue, message);
}
}
接收
@Component
public class MqListener {
@RabbitListener(queues = "testQueue")
public void listen(String message)