消息中间件RabbitMQ(一)——Docker环境安装及说明

本文详细介绍在Docker环境下安装和配置RabbitMQ的过程,包括镜像选择、运行、管理页面使用,以及如何通过Web界面操作RabbitMQ,创建交换器、队列,绑定和发送消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Docker下安装RabbitMQ

1.1 查询RabbitMQ镜像

Docker网站,查询RabbitMQ镜像,获取后缀带management的镜像,因为此种镜像带Web管理页面。

https://hub.docker.com/

1.2 获取镜像

docker pull registry.docker-cn.com/library/rabbitmq:3-management

在这里插入图片描述

注意:这里一定要拉去后缀带management的镜像,这种镜像才带web管理页面

1.3 检查镜像

docker images

在这里插入图片描述

1.4 运行镜像

# 简单命令
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 镜像id

# 带数据卷及开机自启动命令
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq -v /mydata/rabbitmq/data:/mydata/rabbitmq/data --restart always rabbitmq

在这里插入图片描述

1.5 查询镜像运行情况

docker ps

在这里插入图片描述

1.6 验证客户端

打开浏览器,访问RabbitMQWeb客户端并登陆,本机虚拟机地址为:http://192.168.1.106:15672/

默认用户名和密码为:guest

在这里插入图片描述

2. RabbitMQ管理页面

2.1 总体概览

Web管理页面如下图:

在这里插入图片描述

这里注意下Disk space红色部分!!!

Tab页共有六个选项卡

  • Overview:是 RabbitMQ概览情况,可以查看单个机器和集群中各个节点的情况,包括 RabbitMQ的端口映射信息等,都可以在这个选项卡中查看
  • Connections:可以查看连接上 RabbitMQ的生产者和消费者的情况
  • Channels:可以查看通道信息
  • Exchange:展示所有的交换机信息
  • Queue:展示所有队列信息
  • Admin:展示所有用户信息

页面默认是 5 秒刷新一次,展示的是所有的 Virtual host,右上角可调整

2.2 Overview

Overview中有如下功能

在这里插入图片描述

2.2.1 Totals

Totals里有准备消费的消息数、待确认的消息数、消息总数以及消息的各种处理速率(发送速率、确认速率、写入硬盘速率等等)

在这里插入图片描述

2.2.2 Nodes

Nodes展示 RabbitMQ运行的节点,点击每个节点,可以查看节点的详细信息

在这里插入图片描述

在这里插入图片描述

这里需要注意下红色部分的Disk space!!!

这个问题也很诡异,说明下具体情况:本人使用docker镜像安装的RabbitMQ,由于C盘空间快用满了,所以每次向RabbitMQ发送消息时,总是失败,后来定位问题,是由于这个磁盘原因。

正常情况应该是第二张图!!!

2.2.3 Churn statistics

展示的是 ConnectionChannel以及 Queue的创建/关闭速率

在这里插入图片描述

2.2.4 Ports and contexts

在这里插入图片描述

这里展示端口映射以及 Web上下文信息

  • 5672RabbitMQ通信端口
  • 15672Web管理页面端口
  • 25672是集群通信端口

2.2.5 Export definitions / Import definitions

可以导入导出当前实例的一些配置信息

在这里插入图片描述

2.3 Connections

展示当前连接上 RabbitMQ信息,无论是消息生产者还是消息消费者,只要连接上来了这里都会显示出来

在这里插入图片描述

属性含义如下:

  • Name:连接地址,可点击进入查看具体信息,在详情中可以查看每一个连接的通道数以及其他详细信息,也可以强制关闭一个连接
  • User name:当前连接使用的用户名
  • State:当前连接的状态,running表示运行中;idle表示空闲;blocked表示阻塞
  • SSL/TLS:表示是否使用 ssl进行连接
  • AMQP 0-9-1AMQP协议的版本号
  • Channels:当前连接创建的通道总数
  • From client:每秒发出的数据包
  • To client:每秒收到的数据包

State状态为blocked的原因就是Disk Space不足引起的

2.4 Channels

展示通道信息

在这里插入图片描述

2.4.1 通道

  • 一个连接可以有多个通道,这么多个通道通过多线程实现,一般情况下,我们在通道中创建队列、交换机等

  • 生产者的通道一般会立马关闭,消费者是一直监听的,通道几乎是会一直存在

各参数含义如下:

  • Channel:通道名称
  • User name:该通道登录使用的用户名
  • Model:通道确认模式,C表示 confirmT表示事务Transaction
  • State:通道当前的状态,running表示运行中;idle表示空闲
  • Unconfirmed:待确认的消息总数
  • PrefetchPrefetch表示每个消费者最大的能承受的未确认消息数目,简单来说就是用来指定一个消费者一次可以从 RabbitMQ中获取多少条消息并缓存在消费者中,一旦消费者的缓冲区满了,RabbitMQ将会停止投递新的消息到该消费者中直到它发出有消息被 ack了。总的来说,消费者负责不断处理消息,不断 ack,然后只要 unAcked数少于prefetch * consumer 数目,RabbitMQ就不断将消息投递过去
  • Unacked:待 ack的消息总数
  • publish:消息生产者发送消息的速率
  • confirm:消息生产者确认消息的速率
  • unroutable (drop):表示未被接收,且已经删除了的消息
  • deliver/get:消息消费者获取消息的速率
  • ack:消息消费者 ack消息的速率

2.5 Exchange

展示交换机详细信息

在这里插入图片描述

各参数含义如下:

  • Type:表示交换机的类型

  • Features: 有两个取值 DI

D 表示交换机持久化,将交换机的属性在服务器内部保存,当 MQ 的服务器发生意外或关闭之后,重启 RabbitMQ 时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在

I 表示这个交换机不可以被消息生产者用来推送消息,仅用来进行交换机和交换机之间的绑定

  • Message rate in: 表示消息进入的速率

  • Message rate out: 表示消息出去的速率

下方的Add a new exchange 可以在Web页面上创建一个新的交换机

2.6 Queue

展示消息队列详细信息

在这里插入图片描述

各项属性含义如下:

  • Name:表示消息队列名称

  • Type:表示消息队列的类型,除了上图的 classic,另外还有一种消息类型是 Quorum

  • Features:表示消息队列的特性,D 表示消息队列持久化

  • State:表示当前队列的状态,running表示运行中;idle表示空闲

  • Ready:表示待消费的消息总数

  • Unacked:表示待应答的消息总数

  • Total:表示消息总数Ready+Unacked

  • incoming:表示消息进入的速率

  • deliver/get:表示获取消息的速率

  • ack:表示消息应答的速率

点击 Add a new queue可以添加一个新的消息队列

点击每一个消息队列的名称,可以进入到消息队列中。进入到消息队列后,可以完成对消息队列的进一步操作,例如:

  • 将消息队列和某一个交换机进行绑定
  • 发送消息
  • 获取一条消息
  • 移动一条消息(需要插件的支持)
  • 删除消息队列
  • 清空消息队列中的消息

具体操作如下图:

在这里插入图片描述

注意:队列要和交换机进行绑定,在代码实现过程中必须的步骤

2.7 Admin

在这里插入图片描述

各项属性含义如下:

  • Name:表示用户名称。
  • Tags:表示角色标签,只能选取一个
  • Can access virtual hosts:表示允许进入的虚拟主机
  • Has password:表示这个用户是否设置了密码

常用的两个操作时管理用户和虚拟主机

点击 Add a user 可以添加一个新的用户,添加用户的时候需要给用户设置 Tags,其实就是用户角色,如下:

  • none:不能访问management plugin
  • management:用户可以通过 AMQP做的任何事 列出自己可以通过 AMQP登入的 virtual hosts 查看自己的 virtual hosts 中的 queues, exchangesbindings查看和关闭自己的 channelsconnections查看有关自己的 virtual hosts 的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动
  • policymakermanagement可以做的任何事 查看、创建和删除自己的 virtual hosts 所属的 policies 和 parameters
  • monitoringmanagement可以做的任何事 列出所有 virtual hosts,包括他们不能登录的 virtual hosts 查看其他用户的 connections 和 channels 查看节点级别的数据如 clustering 和 memory 使用情况 查看真正的关于所有 virtual hosts 的全局的统计信息
  • administratorpolicymakermonitoring 可以做的任何事 创建和删除 virtual hosts 查看、创建和删除 users 查看创建和删除 permissions关闭其他用户的 connections
  • impersonator(模拟者) 模拟者,无法登录管理控制台。

3. 使用Web管理页面操作RabbitMQ

3.1 根据消息队列图,创建交换器

在这里插入图片描述

消息队列图:

在这里插入图片描述

添加三种交换器

在这里插入图片描述

创建完交换器效果图

在这里插入图片描述

3.2 添加消息队列

创建消息队列
在这里插入图片描述

创建完消息队列效果图

在这里插入图片描述

3.3 为交换器绑定消息队列

在这里插入图片描述

将交换器与消息队列绑定

在这里插入图片描述

绑定完后的效果图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.4 测试为交换器发送消息

exchange.direct交换器中,发送一个消息,路由键的名称为:scorpios

在这里插入图片描述

进入到消息队列中,查看消息队列接受到消息的情况

在这里插入图片描述

在上图中,点击有消息的消息队列,进入详情页,查看具体消息信息

在这里插入图片描述

在这里插入图片描述

4. 小结

上面只是RabbitMQ的入门使用,下面会结合SpringBoot来介绍RabbitMQ如何使用。

### 类似于RabbitMQ的消息队列项目实现与使用 #### 1. 消息队列的选择标准 市面上存在多种消息队列产品,如RabbitMQ、RocketMQ、Kafka以及ActiveMQ等[^2]。对于希望寻找类似RabbitMQ特性的解决方案而言,重点在于选择具备相似功能集的产品。 - **协议支持**:RabbitMQ广泛支持AMQP、XMPP、SMTP及STOMP等多种协议;而其他选项可能仅限于特定协议的支持。 - **性能指标**:不同产品的单机吞吐量和消息延迟各有差异,需依据应用场景挑选最合适的工具。 - **可靠性和可用性**:考虑到系统的稳定运行至关重要,在这方面表现优异的技术方案更值得考虑。 #### 2. RocketMQ作为替代品介绍 鉴于上述考量因素,RocketMQ因其高效能特性成为了个理想的候选对象: - 开源由阿里巴巴贡献给Apache基金会管理; - 使用Java编写易于部署维护; - 提供了丰富的API接口方便开发者调用; - 支持集群模式下的高并发读写操作; - 内置监控机制便于追踪系统状态。 #### 3. 基础环境搭建指南 为了启动并配置个新的消息中间件实例,可以参照以下步骤完成步设置工作(这里以Docker方式安装为例): ```bash mkdir -p /docker/rocketmq/{data,broker} cd /docker/rocketmq/ wget https://archive.apache.org/dist/rocketmq/4.9.0/apache-rocketmq-4.9.0-bin-release.zip unzip apache-rocketmq-4.9.0-bin-release.zip ./bin/mqnamesrv & export NAMESRV_ADDR=localhost:9876 ./bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true & ``` 以上命令用于下载官方发布的二进制包文件,并解压至指定路径下,随后依次开启Name Server服务端口监听进程以及Broker节点负责实际的数据存储转发任务。 #### 4. 应用集成实践案例 当涉及到具体的业务逻辑编码环节时,则可以通过引入`spring-cloud-stream-binder-rocketmq`依赖来简化编程流程,从而轻松实现在Spring Cloud生态体系内的无缝对接效果[^3]: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-stream-rocketmq</artifactId> </dependency> ``` 接着定义相应的生产者与消费者类结构体,利用注解驱动的方式声明消息通道绑定关系即可达成目标。 #### 5. 关键概念解析——交换机(Exchange) 值得注意的是,在设计复杂的信息传递架构过程中,“交换机”的作用不容忽视。它充当着连接生产和消费两端之间的桥梁角色,决定了每条记录最终会被路由到哪个目的地队列里去[^5]。 ```java @Configuration public class MessagingConfig { @Bean public Queue myQueue() { return new Queue("my.queue"); } @Bean public DirectExchange exchange() { return new DirectExchange("my.exchange"); } @Bean Binding binding(Queue queue, DirectExchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("routingKey"); } } ``` 此段代码片段展示了如何借助Spring框架的帮助创建自定义的队列资源及其关联规则设定方法论。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

止步前行

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

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

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

打赏作者

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

抵扣说明:

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

余额充值