- 前置:RabbitMQ的工作机制和架构图
- 一. 搭建一个空的工程
- 1.1 建立consumer01工程—创建消费者
- 1.1.1 依赖
- 1.1.2 application配置
- 1.1.3 RabbitConfig
- 1.1.4 RabbitConsumer
- 1.2 建立producer01工程—创建生产者
- 1.2.1 依赖
- 1.2.2 application
- 1.2.3 创建一个和消费者一样的RabbitConfig
- 1.2.4 生产者的测试类创建消息模板
- 1.2.5 测试结果即RabbitMQ网页显示
消息中间件最大的特点就是解耦:生产者只要把消息发送不去就可以不用管了,消费者不管在不在线都行,消费者上线的时候会来处理带消费的信息
- Publisher - 生产者:发布消息到RabbitMQ中的Exchange
- Consumer - 消费者:监听RabbitMQ中的Queue中的消息
- Exchange - 交换机:和生产者建立连接并接收生产者的消息
- Queue - 队列:Exchange会将消息分发到指定的Queue,Queue和消费者进行交互
- Routes - 路由:交换机以什么样的策略将消息发布到Queue
简单架构图
原理:消息发送的时候,
1.先由生产者发送到消息交换机(有默认,可配置)
2.消息交换机根据既定的策略帮你把消息路由到不同的队列上面去(意味着消息收发的形式更加的多样)
3.消息消费者就去监听不同的队列
完整架构图
目的:方便日后多个项目关联及扩充
第一步
1.1.2 application配置org.springframework.boot spring-boot-starter-amqporg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.amqp spring-rabbit-testtest
spring.rabbitmq.host=1.12.235.192 spring.rabbitmq.username=guest spring.rabbitmq.password=guest #虚拟主机,这个配置非常重要 spring.rabbitmq.virtual-host=/1.1.3 RabbitConfig
package com.huang.config; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitConfig { public static final String MY_QUEUE_NAME_01= "hello-queue"; @Bean Queue myQueue(){ return new Queue(MY_QUEUE_NAME_01,true,false,false); } }1.1.4 RabbitConsumer
package com.huang.consumer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class RabbitConsumer { private static final Logger logger = LoggerFactory.getLogger(RabbitConsumer.class); @RabbitListener(queues = "hello-queue") public void handleMsg(String msg){ logger.info("msg:{}",msg); } }1.2 建立producer01工程—创建生产者 1.2.1 依赖
1.2.2 applicationorg.springframework.boot spring-boot-starter-amqporg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest
spring.rabbitmq.host=1.12.235.192 spring.rabbitmq.username=guest spring.rabbitmq.password=guest //5672通信管理,15672界面管理 spring.rabbitmq.port=5672 spring.rabbitmq.virtual-host=/1.2.3 创建一个和消费者一样的RabbitConfig 1.2.4 生产者的测试类创建消息模板
@SpringBootTest class Producer01ApplicationTests { //这个就是一个消息发送模板 @Autowired RabbitTemplate rabbitTemplate; @Test void contextLoads() { rabbitTemplate.convertAndSend(RabbitConfig.MY_QUEUE_NAME_01,"hello rabbitmq!"); } }
运行这个测试类去发送消息,消费者收到消息
1.2.5 测试结果即RabbitMQ网页显示java的生产者启动后,消费者控制台收到消息
RabbitMQ界面显示
1.Ready等待消费的消息数量
2.Unacked消息已经消费确认数量
3.totl是1和2的总和