RabbitMQ 入门指南:安装、基础结构、消息模型与入门案例

本篇文章,我们将一步步指导如何在 CentOS 系统上安装 RabbitMQ ,这是基于 Erlang 语言开发的强大开源消息中间件。我们会从下载和安装开始,然后深入到 RabbitMQ 的核心概念,包括通道、交换机、队列和虚拟主机。此外,我们还会通过简单的入门案例,展示如何在 RabbitMQ 中发送和接收消息。涉及到代码的部分 , 我们已经提供给大家 demo 版本 , 下载之后按照教程模拟即可 .
在这里插入图片描述

一 . 安装 RabbitMQ

RabbitMQ 是基于 Erlang 语言开发的开源消息通信中间件 .

那 Erlang 天生就是一个并发的语言 , 本身就是为了分布式系统来去设计的 .

那 RabbitMQ 是建立在 Erlang 语言上进行开发的 , 所以 RabbitMQ 的性能以及吞吐量都是很厉害的 .

但是 RabbitMQ 的最厉害之处 , 是消息的可靠性以及稳定性 , 这也保证了整个系统的高可用 .

那 RabbitMQ 的官网也给大家贴在这里了 : https://www.rabbitmq.com/ , 大家可以去浏览一下

我们选择在 CentOS 系统上来进行安装 RabbitMQ

1.1 下载镜像

我们可以通过 docker 在线拉取

docker pull rabbitmq:3.8-management

也可以将本地的 tar 包进行上传 , 我们选择这种方式

mq.tar (点击即可下载)

将这个文件上传到根目录下的 tmp 目录中

cd /tmp/

接下来我们只需要加载镜像即可

# 加载镜像
docker load -i mq.tar

1.2 安装 MQ

执行这条指令即可

docker run \
 -e RABBITMQ_DEFAULT_USER=root \
 -e RABBITMQ_DEFAULT_PASS=root \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3.8-management

我们来分析一下这段命令

docker run \
 # 设置环境变量, 用户名是 root
 -e RABBITMQ_DEFAULT_USER=root \
 # 设置环境变量, 密码是 root
 -e RABBITMQ_DEFAULT_PASS=root \
 # 挂载数据卷, 后面会用到
 -v mq-plugins:/plugins \
 # 给 MQ 起一个名字
 --name mq \
 # 主机名: 这里不配置也可以, 后期需要配置集群
 --hostname mq \
 # 端口映射: RabbitMQ 的管理平台的端口
 -p 15672:15672 \
 # 端口映射: 将来做消息通信的端口
 -p 5672:5672 \
 # 后台运行
 -d \
 # 镜像名称
 rabbitmq:3.8-management

后续启动 RabbitMQ , 使用 docker start mq 命令即可

1.3 测试连接

接下来 , 我们访问虚拟机的 IP 的 15672 端口 , 就可以进入到 RabbitMQ 的界面了

http://192.168.96.128:15672/

账号密码就是我们在上面配置的 root 账户

登陆之后就会来到 RabbitMQ 的管理页面

我们简单的介绍一下

Overview : 总览界面 , 展示的是 MQ 节点的详细信息 , 我们目前只有一个节点

Connections : 连接页面 , 无论是消息的发布者还是接收者 , 都需要与 MQ 建立起连接 .

Channels : 通道 , 建立连接之后就需要建立一个通道 , 这样的话生产者 / 消费者才能基于通道进行消息的发送 / 接收 . 可以认为 Channels 是 MQ 中各种操作 (比如消息的发送和接收) 的最基本对象 , 将来每一个连接的人都需要创建出一个或者多个通道 .

Exchanges : 交换机 , 主要进行消息的路由操作

Queues : 队列 , 用于消息的存储

Admin : 管理 , 在这个界面可以管理用户的信息

比如我们可以添加一个用户

但是创建出之后 , 我们发现提示没有访问权限 (No access)

这是因为虚拟主机 (virtual hosts) 的缘故

虚拟主机是 MQ 中的一种逻辑划分 , 将来我们会有很多用户 , 那每个用户都去创建自己的队列、交换机、通道等等 . 那不同用户之间就有可能产生冲突 , 那为了避免这种情况 , 就出现了虚拟主机的概念

通过虚拟主机对不同的用户进行隔离 , 这样的话就会互相看不到对方的内容 , 这实际上也是一种多租户的解决方案 .

我们还可以在右面点击 Virtual Hosts 来创建更多的虚拟主机

此时 root 用户就已经有了这两个虚拟主机的权限

但是 zhangsan 用户依然没有任何虚拟主机 , 我们需要点击 zhangsan 用户额外去设置

我们可以再回到交换机界面看一下

1.4 MQ 的基本结构

1.5 小结

channel : 通道 - 操作 MQ 的工具

exchange : 交换机 - 路由消息进入到队列中

queue : 队列 - 缓存消息

virtual host : 虚拟主机 - 是对 queue、exchange 等资源的逻辑分组

二 . RabbitMQ 的消息模型

MQ 的官方文档中给出了 7 个 MQ 的 Demo , 我们可以来看一下

MQ 的官方文档 : https://www.rabbitmq.com/tutorials

我们主要关注前五种模型 , 我们可以分一下类

三 . 入门案例

我们来看官网提供给我们的最简单的案例

publisher : 消息发布者 , 将消息发送到队列 queue

queue : 消息队列 , 负责接收并缓存消息

consumer : 从队列中获取消息

3.1 导入基础工程

我们目前的目的 , 主要是了解这个消息队列的模型 , 所以代码我们直接给到大家 , 大家直接 IDEA 打开即可

mq-demo.zip (点击即可下载)

3.2 生产者

我们打开 publisher 模块下面的单元测试类 : PublisherTest , 那这个代码就是用来进行消息发送的

首先 , 我们创建了一个 ConnectionFactory 连接工厂 , 发送消息的话需要建立连接 , 那建立连接就需要用到连接工厂 .

连接工厂创建之后 , 就需要设置一些信息 , 那这些信息就需要大家灵活调整

准备就绪之后 , 就需要建立连接

当这行代码走完 , 我们 RabbitMQ 的后台就会捕捉到一个连接

继续往下执行 , 当创建通道的代码执行完毕之后 , 再去观察通道界面

通道已经连接 , 接下来就可以向队列中发送消息了

那我们继续往下执行 , 就会创建队列

那接下来生产者就可以向消费者发送消息了 .

此时我们可以去 RabbitMQ 的控制中心来看一下

此时我们生产者可以结束掉任务了

那我们刷新 Queues 界面 , 发现生产者关闭之后 , 消息还在

那这也就验证了生产者只负责将消息添加到队列中 , 而不负责其他功能

3.3 消费者

我们找到消费者中的单元测试类 : ConsumerTest

我们还是在第一行先打一个断点

然后运行

首先 , 还是需要创建连接工厂并设置一系列参数

接下来就需要建立连接

继续往下看,然后我们发现 , 怎么又创建了一个队列 ? 生产者不是创建完了吗 , 我们直接用多好 ?

其实是这样的 , 我们并不能保证先运行生产者还是消费者 , 如果先启动消费者的话就会找不到要发送消息的队列 . 那为了避免队列不存在 , 我们就都需要先指定好队列 .

但其实我们看一下 RabbitMQ 的控制中心,发现并不会新创建出一个队列,它是自动绑定生产者之前创建好的队列 .

那接下来队列绑定之后 , 就可以从队列中获取消息了

这段逻辑就类似于 JS 的回调函数 , 当有消息出现的时候才会去执行 .

那我们把代码完全放行之后 , 会先打印等待接收消息还是接收到消息哪句话呢 ?

这就是回调机制 , 执行订阅信息的代码 , 只是先将回调函数与队列进行了绑定 , 但是消息还并没有真的到达 . 所以逻辑继续向下执行 , 打印了 “接收到消息” , 等到 RabbitMQ 把消息投递过来了 , 上面的回调函数才会去执行 . 所以最后打印的是 “接收到消息” .

接收到消息之后 , 此时队列中的消息也被清空了

3.4 小结

基本消息队列的消息发送流程 :

  1. 建立 connection
  2. 创建 channel
  3. 利用 channel 声明队列
  4. 利用 channel 向队列发送消息

基本消息队列的消息接收流程 :

  1. 建立 connection
  2. 创建 channel
  3. 利用 channel 声明队列
  4. 定义 consumer 的消费行为 handleDelivery() (这是个回调函数)
  5. 利用 channel 将消费者与队列绑定

不知道大家是否成功安装了 RabbitMQ , 并且按照提供的示例代码成功执行 .
如果对你有帮助的话 , 还请一键三连~
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加勒比海涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值