RabbitMQ入门笔记

仅记录自己入门 RabbitMQ 学习过程。

安装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 添加源
cd /etc/yum.repos.d/
vi rabbitmq-erlang.repo

[erlang-solutions]
name=CentOS $releasever - $basearch - Erlang Solutions
baseurl=https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
enabled=1

:wq # 保存退出

# 开始安装 erlang
yum install -y erlang esl-erlang

# 安装完成后,检查安装结果
erl --version
### 显示结果,说明erlang安装成功 start ###
Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit]
Eshell V12.1.5
### 显示结果 end ###

# 开始安装 RabbitMQ 参考官网即可 https://www.rabbitmq.com/install-rpm.html#downloads
# 我下载的 rpm 包:rabbitmq-server-3.10.5-1.el8.noarch.rpm
yum install -y rabbitmq-server-3.10.5-1.el8.noarch.rpm

## 安装完毕,启动 RabbitMQ

# 启用RabbitMQ的web管理界面。
rabbitmq-plugins enable rabbitmq_management

# 添加新用户
rabbitmqctl add_user myuser 9eBTmok7Z^

# 设置用户为管理员
rabbitmqctl set_user_tags myuser administrator

# 可以登陆 web 端进行管理了 http://xxx.xxx.xx.xx:15672 用户名:myuser 密码:9eBTmok7Z^

常用命令

  • 启动: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 hostvirtual 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,先创建一个名为 feishuvirtual 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
doodo
Built with Hugo
主题 StackJimmy 设计
本站总访问量  |  本站访客数