RabbitMQ 是一个开源的AMQP实现,服务器端使用Erlang语言编写,支持多种客户端。用于再分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现优异。
一、RabbitMQ 安装
Section titled “一、RabbitMQ 安装”基于Centos 7安装
1.1 安装 Erlang
Section titled “1.1 安装 Erlang”erlang的版本需要与RabbitMQ的版本匹配
参考 https://github.com/rabbitmq/rabbitmq-server/blob/main/docs/compatibility.json
1.2 安装 RabbitMQ
Section titled “1.2 安装 RabbitMQ”1.3 RabbitMQ 配置
Section titled “1.3 RabbitMQ 配置”RabbitMQ的配置文件位于/etc/rabbitmq/rabbitmq.conf,没有就需要创建touch /etc/rabbitmq/rabbitmq.conf
参考 https://github.com/rabbitmq/rabbitmq-server/blob/main/deps/rabbit/docs/rabbitmq.conf.example
二、RabbitMQ 端口
Section titled “二、RabbitMQ 端口”RabbitMQ会绑定一些端口,安装完后需要将这些端口添加至防火墙放行;如果使用的云服务器需要在对应云服务器厂商控制台添加安全组的放行规则。
2.1 端口列表
Section titled “2.1 端口列表”两个端口时后面的端口是用于SSL/TLS的端口
| 端口 | 描述 |
|---|---|
| 4369 | 是Erlang的端口/节点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用 |
| 5672,5671 | 正常使用的端口,平时我们连接的基本是5672端口,AMQP 0-9-1和1.0客户端端口,没有使用SSL(5672)和使用SSL(5671)的端口 |
| 15672 | HTTP_API端口,管理员用户才能访问,用于管理RabbitMQ,需要启用management插件,一个Web控制台。 |
| 25672 | 用于RabbitMQ节点间和CLI工具通信,配合4369使用 |
| 61613,61614 | 当STOMP插件启用时打开,作为STMOMP客户端端口(根据是否使用TLS选择) |
| 1883,8883 | 当MQTT插件启用时打开,作为MQTT客户端端口(根据是否使用TLS选择) |
| 15674 | 基于WebSocket的STOMP客户端端口(当插件Web STOMP启用的时候打开) |
| 15675 | 基于WebScoket的MQTT客户端端口(当插件Web MQTT启用的时候打开) |
| 25671 | 当MQTT插件启用时打开,作为MQTT客户端端口(根据是否使用TLS选择) |
三、启用RabbitMQ管理界面
Section titled “三、启用RabbitMQ管理界面”rabbitmq-plus enable rabbitmq_managementRabbitMQ有一个默认的用户guest,密码为guest,只能通过本地访问,不能远程访问。
远程访问需要创建一个新用户,并分配权限。
# 创建一个新用户rabbitmqctl add_user admin password# 为用户分配权限rabbitmqctl set_user_tags admin administrator# 为用户分配资源权限rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"3.1 RabbitMQ 角色
Section titled “3.1 RabbitMQ 角色”RabbitMQ有以下几种角色:
- none、management、policymaker、monitoring、administrator
3.1.1 none
Section titled “3.1.1 none”- 不能访问management plugin
3.1.2 management
Section titled “3.1.2 management”用户可以通过AMQP做的任何事,外加:
- 列出自己可以用AMQP登入的vhosts
- 查看自己的vhosts中的queues、exchanges和bindings
- 查看和关闭自己的channels和connections
- 查看有关自己的vhosts的“全局”的统计信息,包含其他用户在这些vhosts中的活动。
3.1.3 policymaker
Section titled “3.1.3 policymaker”包括management角色的所有权限,再加上:
- 查看、创建和删除自己的vhosts所属的policies和parameters
3.1.4 monitoring
Section titled “3.1.4 monitoring”包括management角色的所有权限,再加上:
- 列出所有vhosts,包括他们不能登录的vhosts
- 查看其他用户的connections和channels
- 查看节点级别的数据(如clustering和memory使用情况)
- 查看真正关于所有vhosts的全局的统计信息
3.1.5 administrator
Section titled “3.1.5 administrator”包括policymaker和monitoring可以做的任何事外加:
- 创建和删除vhosts
- 查看、创建和删除users
- 查看创建和删除permissions
- 关闭其他用户的connections
3.2 RabbitMQ 权限
Section titled “3.2 RabbitMQ 权限”RabbitMQ有以下几种权限:
- 资源权限:拥有对资源的访问权限
- 操作权限:拥有对操作的访问权限
四、AMQP
Section titled “四、AMQP”AMQP(Advanced Message Queuing Protocol)是一种消息队列协议,是一种基于TCP/IP协议的二进制协议,用于在应用程序之间传递消息。
4.1 AMQP 结构
Section titled “4.1 AMQP 结构”- Module Layer:模块层,位于最高层,主要定义供客户端调用的命令,客户端可基于这些命令实现自身的业务逻辑。
- Session Layer:会话层,位于中间层,负责把客户端命令发往服务端、把应答带回客户端,为两端通信提供同步与错误处理等能力。
- Transport Layer:传输层,位于最低层,传输二进制数据流,承担帧处理、信道复用、错误检测与数据表示等职责。
4.2 生产者与 Broker 连接示意
Section titled “4.2 生产者与 Broker 连接示意”客户端与 RabbitMQ Broker 之间先建立 connection(TCP 连接),再在连接上打开若干 channel(信道)进行协议交互;Broker 内按 虚拟主机 划分命名空间,其下挂载 队列 等资源。下图用白板形式归纳这一结构(图中 Broker 地址仅为示例)。