一、概念
1、消息服务中间件主要是提升异步通信能力
2、消息服务的两个重要概念:消息代理(message broker)和目的地(destination)
消息发送后,消息代理进行管理然后在发送到目的地
3、消息队列主要的两种目的地
队列((queue)):点对点的通信(消息发到一个队列中,消息接收者从队列中获取消息,然后被移除此队列。只能有一个队列但不是只有一个消息接收者)
主题(topic):发布(publish)/订阅(subscribe)的消息通信(消息发布到主题,多个接收者进行订阅接收)
4、JMS(Java Message Service)JAVA消息服务:基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现
5、AMQP:高级消息队列协议,也是一个消息代理的规范,兼容JMS,RabbitMQ是AMQP的实现
6、Spring支持
- spring-jms提供了对JMS的支持
- spring-rabbit提供了对AMQP的支持
- 需要ConnectionFactory的实现来连接消息代理
- 提供JmsTemplate、RabbitTemplate来发送消息
- @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息
- @EnableJms、@EnableRabbit开启支持
7、Spring Boot自动配置
- JmsAutoConfiguration
- RabbitAutoConfiguration
二、RabbitMQ
1、从消息发送到接收的整个流程示意图
Publisher:消息生产者
Broker:表示消息队列服务器实体
Virtual Host:虚拟主机,表示一批交换器、消息队列和相关对象
Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别
Binding:绑定交换器和队列
Queue:消息队列,用来保存消息直到被消费否则消息会一直待在队列里面。一个消息可投入一个或多个队列。
Connection:网络连接,比如TCP网络连接
Channel:信道,即消息通过信道发送给消费者
Consumer:消费者
三、docker安装RabbitMQ
1、拉取镜像
docker pull rabbitmq:3.9.3-management
2、启动RabbitMQ
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq a0a2d74e6e6a -d 后台运行,-p指定映射端口 5672客户端和docker容器的端口 15672是浏览器访问管理界面的端口 a0a2d74e6e6a 镜像ID
3、浏览器访问mq的管理页面
http://172.16.203.134:15672/ 初始密码:guest/guest
4、测试消息发送的流程
4.1、先创建三个交换器 --》分别对应不同的类型
4.2、在创建四个消息队列
4.3、绑定交换机和消息队列-->按照上图进行绑定
4.4、