安装
|
|
常用命令
-
启动:
service rabbitmq-server stop
-
查看状态:
service rabbitmq-server start
-
暂停:
service rabbitmq-server stop
-
检查本地节点是否正在运行以及 CLI 工具是否可以成功对其进行身份验证
rabbitmq-diagnostics ping
-
打印启用的组件(应用程序)、TCP 侦听器、内存使用故障、警报
rabbitmq-diagnostics status
-
打印集群成员资格信息
rabbitmq-diagnostics cluster_status
-
打印有效节点配置
rabbitmq-diagnostics environment
Authentication 认证
- 默认授权用户
username=guest, password=guest, virtualhost=/
, 这个用户只能本机登陆,不能通过ip+port
远程登陆。
官方:强烈不建议允许默认的用户可远程登陆 MQ,用过 RabbitMQ 的程序员都知道默认用户名和密码是啥,这会让你的系统的安全性大大降低!推荐的做法是:删除默认用户、使用新的安全凭证创建新的用户
用户管理
通过 web 控制台管理很方便
- 查看有哪些用户
rabbitmqctl list_users --formatter=json
概念
virtual host
:virtual host
可以绑定多个业务线Exchange
「交换机」是出现再订阅模型中的词,不同的订阅模型本质上就是根据订阅交换机的类型区分的Fanout
「广播模型」是将消息发送给绑定给交换机的所有队列(因为他们使用的是同一个RoutingKey
)。这个模型的特点就是它在发送消息的时候,并没有指明 Rounting Key , 或者说他指定了 Routing Key,但是所有的消费者都知道,大家都能接收到消息,就像听广播Direct
「定向」是将消息发送给制定的RoutingKey
(路由键) 的队列。生产者向交换机发送消息时,会指定一个RoutingKey
,消费者 C1 可以指定消费RoutingKey
为 error 的消息,消费者 C2/C3/C4 可以指定消费RoutingKey
为 info/error/warning 的消息Topic
「通配符」是将消息发送给符合Routing Patten
(路由模式)的队列。类似Direct
模式,就是RoutingKey
可以支持通配符。
Broker,
消息模型
关于 RabbitMQ 的五种消息模型,可以参考这里
消息确认机制
- ACK 确认机制,消费者收到消息后自动发送 ACK 给 RabbitMQ 就是自动 ACK,如果我们自己手动控制消费者收到并成功执行消息后发送 ACK 给 RabbitMQ 就是手动 ACK。
eg.比如我们把所有飞书机器人需要发送的消息都丢到 RabbitMQ,先创建一个名为
feishu
的virtual host
,声明一个名为feishu_message
的 Exchange,当我们需要发送飞书卡片消息时,用 RabbitMQ 生产者通过Direct
定向把消息发送给fs_card
的路由键队列,把其他消息发送到fs_msg
的路由键队列,这样我们可以用消费者 C1 处理发送所有的卡片消息,消费者 C2 处理发送其他飞书消息。但是,当我们消费者 C1 发送飞书卡片的时候失败了,这个时候,我们就可以采用手动 ACK 确认机制。
Web 控制台
Overview
: 查看当前系统中消息的传输状态Connections
: 查看当前系统中创建的链接Channels
: 查看当前系统中创建的通道Exchanges
: 查看当前系统中创建的交换机Queues
: 查看当前系统中创建的消息队列
我们的应用场景
- Key-Value 放入 Redis
- 消息队列通过 machinery 包放入 RabbitMQ