前言
消息队列主要有三个作用:
- 解耦:生产者(系统A)只需发布消息到消息队列,无需关心消费者(系统B、系统C、...)的数量、架构、改动等,实现系统间的解耦;
- 异步:请求发送到系统A时,系统A处理必要业务之后,将后续非必要业务(发送短信、邮件等)直接发布到消息队列,由消费者异步执行;
- 削峰:短时间大量请求发送到系统A,系统A将任务发布到消息队列,由消费者陆续执行,防止短时间大量对数据库的操作导致数据库崩溃;
消息协议包括:
- JMS:Java消息服务,只适用于Java平台,实现有ActiveMQ
- AMQP:高级消息队列协议,跨平台,实现有RabbitMQ
一、安装
Docker安装RabbitMQ:待补充Linux安装RabbitMQ:blog.csdn.net/m0_67392273…Windows安装RabbitMQ:developer.aliyun.com/article/769…
注意:RabbitMQ与Erlang语言环境的对应关系,请查看RabbitMQ官网
二、基本结构和概念
概念图出自尚硅谷的《谷粒商城》:
Publisher:生产者,发布消息Broker:消息服务器,即当前RabbitMQ服务Consumer:消费者,消费消息Exchange:交换机,消息先经过Exchange交换机,然后根据消息头的route-key路由键,转发到符合路由规则的Queue队列Queue:队列,存储消息Binding:Queue队列和Exchange交换机的绑定关系Message:消息,包括消息头和体,消息头中包含route-key路由键Connection:网络连接Channel:信道,一条连接包含多条信道VHost:虚拟主机,由RabbitMQ内部实现的隔离环境,不同虚拟主机之间的Exchange交换机、Queue队列互不影响
三、交换机类型
目前共四种类型:direct、fanout、topic、headers
3.1 direct交换机(直接)
消息的route-key路由键与Binding绑定关系完全一致时,交换器就将消息发到对应的队列中
3.2 fanout交换机(广播)
直接忽略消息的route-key路由键,将消息广播到所有绑定的队列中,fanout交换机转发消息是最快的
3.3 topic交换机(订阅)
绑定关系中包含通配符#或*,消息的route-key路由键符合绑定关系通配符规则的队列都能接收到消息,通配符规则如下:
#:一个或多个单词,例如:usa.#可以匹配到usa.news.fack*:一个单词,例如:usa.*可以匹配到usa.news
3.4 headers交换机(直接)
headers交换机匹配AMQP消息的header而不是路由键,.headers交换机和direct交换机完全一致,但性能差很多,目前几乎用不到了,忽略。
四、可视化Web界面的使用
4.1 登录
RabbitMQ的默认服务端口为5672,可视化Web管理界面端口为15672,默认用户名密码均为:guest,本地Windows安装的访问地址为:localhost:15672
登录成功后,菜单如下:
4.2 菜单-Overview
主页预览界面:
4.3 菜单-Exchange
交换机管理界面:
点击已有交换机名称,即可进入交换机的详情页,如下:
4.4 菜单-Queue
队列管理界面:
点击已有队列名称,即可进入队列的详情页,如下: