什么是消息队列
MQ全称为Message Queue,即消息队列。“消息队列”是在消息的传输过程中保存消息的容器。它是典型的:生产者、消费者模型。生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。
RabbitMQ简介
rabbitmq是一个开源的AMQP实现,服务器端用erlang语言编写,支持多种客户端。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
常用端口
-
4369:是erlang端口/节点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用。
-
5672/5671:AMQP 0-9-1和1.0客户端端口,没有使用SSL和使用SSL的端口。
-
25672:用于rabbitMQ节点间和CLI工具通信,配合4369使用。
-
15672:HTTP_API端口,管理员用户才能访问,用于管理rabbitmq,需要启用management插件。
-
61613/61614:当STOMP插件启用的时候打开,作为STOMP客户端端口(根据是否使用TLS选择)
-
1883/8883:当MQTT插件启用的时候打开,作为MQTT看客户端端口(根据是否使用TLS选择)
-
15674:基于websocket的STOMP客户端端口(当插件web STOMP启用的时候打开)
-
15674:基于websocket的MQTT客户端端口(当插件web MQTT启用的时候打开)
-
RabbitMQ绑定端口安装完之后,如果访问不了有可能是防火墙的问题。
相关概念
RabbitMQ的工作原理
下图是RabbitMQ的基本结构:
组成部分说明:
- Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue
- Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
- Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的
- Producer:消息生产者,即生产方客户端,生产方客户端将消息发送
- Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
生产者发送消息流程:
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列)
消费者接收消息流程:
1、消费者和Broker建立TCP连接
2、消费者和Broker建立通道
3、消费者监听指定的Queue(队列)
4、当有消息到达Queue时Broker默认将消息推送给消费者。
5、消费者接收到消息。
6、ack回复
以5种消息模式中的路由模式
为例
标志 | 中文名 | 英文名 | 描述 |
---|---|---|---|
P | 生产者 | Producer | 消息的发送者,可以将消息发送到交换机 |
C | 消费者 | Consumer | 消息的接收者,从队列中获取消息并进行消费 |
X | 交换机 | Exchange | 接收生产者发送的消息,并根据路由键发送给指定队列 |
Q | 队列 | Queue | 存储从交换机发来的消息 |
type | 交换机类型 | type | 不同类型的交换机转发消息方式不同 |
fanout | 发布/订阅模式 | fanout | 广播消息给所有绑定交换机的队列 |
direct | 路由模式 | direct | 根据路由键发送消息 |
topic | 通配符模式 | topic | 根据路由键的匹配规则发送消息 |
安装及配置
win下安装
- 安装Erlang,下载地址:https://www.erlang.org/downloads
- 安装RabbitMQ,下载地址:https://github.com/rabbitmq/rabbitmq-server/releases (选择不带后缀的正式版)
- 在MQ安装目录下 /sbin 目录 地址栏输入CMD 输入命令 启动管理功能
rabbitmq-plugins enable rabbitmq_management
Docker下安装
- 下载镜像
docker pull rabbitmq
- 启动服务
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq -d rabbitmq
- 开启管理功能
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management
- 开启防火墙便于外网访问
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --reload
配置
- 访问RabbitMQ管理页面地址,查看是否安装成功(Linux下使用服务器IP访问即可) http://localhost:15672/
- 输入账号密码并登录,这里使用默认账号密码登录:guest guest
- 创建帐号并设置其角色为管理员
- 创建虚拟Host
- 给host设置用户权限