【MQ篇】RabbitMQ初体验!

目录

    • [一、什么是RabbitMQ?------ 一只勤劳的邮递员兔子 📮](#一、什么是RabbitMQ?—— 一只勤劳的邮递员兔子 📮)
    • [二、RabbitMQ的使用场景?------ 这只兔子无处不在! 🌍](#二、RabbitMQ的使用场景?—— 这只兔子无处不在! 🌍)
    • [三、RabbitMQ的基本概念?------ 认识这只兔子的"身体结构" 🤔](#三、RabbitMQ的基本概念?—— 认识这只兔子的“身体结构” 🤔)
    • 四、RabbitMQ在Linux上部署

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解 MQ 请看 : 【MQ篇】初识MQ!

其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】【✨设计模式专栏(已完结)】...等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力

✨更多文章请看个人主页: 码熔burning

哈哈,咱们今天就来聊聊这只名叫"兔子MQ"的神奇动物,保证让你听完之后,感觉它既可爱又实用!🐇

一、什么是RabbitMQ?------ 一只勤劳的邮递员兔子 📮

想象一下,你有很多信件(数据),需要寄给不同的朋友(应用程序)。如果让你一只一只地跑去送,那可真是累死个人!😩 这时候,RabbitMQ这只神奇的兔子就出现了。✨

你可以把所有的信件都交给这只兔子,它会根据你事先设定的规则(路由),把信件准确无误地送到对应的朋友手中。这只兔子非常勤劳,不知疲倦,而且效率极高,能同时处理大量的信件。💨

所以,简单来说,RabbitMQ就是一个消息队列中间件。它就像一个邮局或者一个快递公司,负责接收、存储和转发消息(数据)。应用程序不用直接互相通信,而是把消息发送给RabbitMQ,再由RabbitMQ可靠地传递给需要的应用程序。👍

二、RabbitMQ的使用场景?------ 这只兔子无处不在! 🌍

这只勤劳的兔子可不是只会送普通的信件,它的应用场景非常广泛,简直是"上得厅堂,下得厨房"!😎

  1. 应用解耦(Decoupling): 假设你有一个在线购物系统,用户下单后需要进行库存扣减、生成订单、发送通知邮件等一系列操作。如果这些操作都耦合在一起,一个环节出错,整个流程就瘫痪了。有了RabbitMQ,下单服务只需要把"下单成功"的消息扔给兔子,库存服务、订单服务、邮件服务等都可以从兔子那里接收到这个消息,各自独立地完成后续操作。这样一来,各个服务之间互不影响,即使某个服务暂时宕机,也不会影响到下单主流程。👏

  2. 异步处理(Asynchronous Processing): 有些操作比较耗时,比如上传一个很大的视频、复杂的报表生成等。如果用户发起这些操作后一直等待结果,体验会非常差。有了RabbitMQ,用户发起请求后,后端服务可以先把请求信息封装成消息扔给兔子,然后立即响应用户。后台的服务再从兔子那里取出消息进行处理,处理完成后可以再通过其他方式通知用户结果。这样用户就不用一直等待,提高了系统的响应速度。🚀

  3. 流量削峰(Traffic Shaping): 在高并发场景下,比如秒杀活动,瞬间涌入大量的请求可能会压垮后端服务。有了RabbitMQ,可以先把这些请求消息都塞进兔子肚子里,后端服务再根据自己的处理能力,慢慢地从兔子那里取出消息进行处理。这样就像给洪峰分流一样,避免了系统瞬间过载。🌊

  4. 分布式事务(Distributed Transactions): 在分布式系统中,保证多个操作要么全部成功,要么全部失败是一个难题。虽然RabbitMQ本身不能完全解决分布式事务,但它可以作为实现最终一致性的重要组件。例如,在一个跨多个服务的订单创建流程中,可以通过RabbitMQ发送事件消息,当某个服务操作失败时,可以通过消息补偿机制回滚之前的操作。🤝

  5. 日志收集(Log Aggregation): 分布式系统中,各个服务的日志分散在不同的机器上,不方便统一管理和分析。可以利用RabbitMQ将各个服务的日志消息统一发送到一个中心化的日志处理系统进行处理。📚

总而言之,只要涉及到需要可靠地在不同应用或服务之间传递消息的场景,都可以考虑使用RabbitMQ这只勤劳的兔子。👍

三、RabbitMQ的基本概念?------ 认识这只兔子的"身体结构" 🤔

要更好地理解这只兔子是如何工作的,我们需要了解它的一些基本概念:

  1. Producer(生产者): 就是发送消息的应用程序。它就像写信的人,把信件(消息)交给兔子。✍️

  2. Consumer(消费者): 就是接收消息的应用程序。它就像收信的人,从兔子那里取出属于自己的信件(消息)。📬

  3. Message(消息): 这是在生产者和消费者之间传递的数据。它就像信件的内容,可以是文本、JSON、图片等等。消息由两部分组成:

    • Payload(消息体): 实际要传输的数据内容。📄
    • Properties(消息属性): 一些元数据,例如消息的类型、优先级、持久化标志等,可以用来指导RabbitMQ如何处理消息。🏷️
  4. Queue(队列): 这是RabbitMQ内部用于存储消息的缓冲区。它就像邮局里的一个个信箱,生产者将消息发送到指定的队列中,消费者从队列中取出消息进行处理。队列具有先进先出(FIFO)的特性,先进入队列的消息会被先取出。📦

  5. Exchange(交换机): 生产者并不直接将消息发送到队列,而是将消息发送到交换机。交换机就像邮局里的分发员,它根据一定的规则(Binding)将收到的消息路由到一个或多个队列。RabbitMQ提供了几种不同类型的交换机:

    • Direct Exchange(直连交换机): 消息的路由键(Routing Key)必须与 Binding Key 完全匹配,消息才会被发送到对应的队列。就像邮局分发员严格按照信封上的详细地址投递。📍
    • Fanout Exchange(扇形交换机): 它会把接收到的所有消息广播给所有绑定到它的队列,就像广播一样,所有人都听得到。📢
    • Topic Exchange(主题交换机): 它通过模式匹配(通配符)的方式进行路由。Binding Key 可以使用 *(匹配一个单词)和 #(匹配零个或多个单词)通配符。这就像邮局分发员可以根据更灵活的地址模式进行投递。🗺️
    • Headers Exchange(头交换机): 它不依赖于路由键,而是根据消息的 Headers 属性进行匹配。Binding 时可以指定一组键值对,只有当消息的 Headers 包含这些键值对(或者满足指定的匹配规则)时,消息才会被路由到对应的队列。🔑
  6. Binding(绑定): 这是将交换机和队列关联起来的规则。它告诉交换机,什么样的消息应该被路由到哪个队列。对于 Direct 和 Topic 交换机,Binding 通常会指定一个 Binding Key。🔗

  7. Routing Key(路由键): 当生产者将消息发送给 Direct 或 Topic 交换机时,需要指定一个 Routing Key。交换机根据这个 Routing Key 和 Binding Key 的匹配规则来决定将消息路由到哪个队列。🔑➡️📦

  8. Virtual Host(虚拟主机): 这是一个逻辑上的概念,可以把一个 RabbitMQ 服务器划分成多个独立的虚拟环境。每个 Virtual Host 拥有自己独立的队列、交换机、绑定和用户权限等。就像一台服务器上可以运行多个网站一样,不同的应用可以部署在不同的 Virtual Host 中,相互隔离。🏘️

  9. Broker(消息代理): 指的是 RabbitMQ 服务本身。它负责接收和路由消息。🏢

总结一下这只可爱的兔子: 🐇

  • 生产者(你): 把信(消息)交给... 💌
  • 交换机(邮局分发员): 根据地址(路由键和绑定)把信分发给... 🗺️➡️📦
  • 队列(信箱): 存储信件,等待... 📬
  • 消费者(你的朋友): 来取信(消息)。 🥳

四、RabbitMQ在Linux上部署

接下来,咱们现在就来把这只可爱的兔子 🐇 请到你的 CentOS 7 系统里的 Docker 容器中。以下是详细的安装步骤,保证让你顺利拥有一个带管理界面的 RabbitMQ 3.8:

步骤 1:确保 Docker 已经安装

首先,你需要确保你的 CentOS 7 系统上已经安装了 Docker。如果你还没有安装,可以按照以下步骤进行安装:

bash 复制代码
sudo yum update -y
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker

你可以运行以下命令来检查 Docker 是否成功安装并正在运行:

bash 复制代码
docker version
docker info
sudo systemctl status docker

如果一切正常,你应该能看到 Docker 的版本信息和运行状态。

步骤 2:拉取 RabbitMQ 3.8-management 镜像

接下来,我们需要从 Docker Hub 上拉取 RabbitMQ 官方提供的带有管理界面的 3.8-management 镜像。这个镜像已经预装了 RabbitMQ 服务和方便管理的 Web 界面。

bash 复制代码
docker pull rabbitmq:3.8-management

这个命令会下载镜像到你的本地 Docker 环境中。下载过程可能需要一些时间,取决于你的网络速度。

步骤 3:运行 RabbitMQ 容器

现在,我们来运行 RabbitMQ 容器。我们需要将 RabbitMQ 的一些关键端口映射到宿主机上,这样才能从外部访问 RabbitMQ 服务和管理界面。常用的端口包括:

  • 5672: RabbitMQ AMQP 协议的默认端口,用于应用程序连接。
  • 15672: RabbitMQ Management Plugin 的 Web 管理界面端口。

你可以使用以下 docker run 命令来创建并运行容器:

bash 复制代码
docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management

让我们来解释一下这个命令的各个部分:

  • -d: 表示在后台(detached)运行容器。
  • --name my-rabbitmq: 给你的 RabbitMQ 容器起一个名字,这里我们叫做 my-rabbitmq,你可以根据自己的喜好命名。
  • -p 5672:5672: 将宿主机的 5672 端口映射到容器的 5672 端口。冒号 : 前面是宿主机端口,后面是容器端口。
  • -p 15672:15672: 将宿主机的 15672 端口映射到容器的 15672 端口。
  • rabbitmq:3.8-management: 指定要使用的镜像名称和标签。

步骤 4:验证 RabbitMQ 容器是否正在运行

运行上述命令后,你可以使用以下命令来查看正在运行的 Docker 容器:

bash 复制代码
docker ps

你应该能看到一个名为 my-rabbitmq 的容器正在运行,并且端口映射是正确的(0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp)。

步骤 5:访问 RabbitMQ 管理界面

现在,你可以在你的浏览器中输入你 CentOS 7 服务器的 IP 地址,后面加上映射的管理界面端口 15672,来访问 RabbitMQ 的 Web 管理界面。例如:

复制代码
http://你的服务器IP地址:15672

首次访问时,你需要输入用户名和密码。RabbitMQ 默认的用户名和密码都是 guest

⚠️ 注意: 默认的 guest 用户只能通过 localhost 访问,为了安全起见,建议你登录后立即创建新的用户并赋予相应的权限。

步骤 6:管理 RabbitMQ (可选但强烈建议)

登录管理界面后,你就可以创建新的用户、设置权限、创建 Virtual Host、查看队列和交换机等信息,进行 RabbitMQ 的管理操作。

一些可能有用的 Docker 命令:

  • 查看容器日志:

    bash 复制代码
    docker logs my-rabbitmq
  • 停止容器:

    bash 复制代码
    docker stop my-rabbitmq
  • 启动容器:

    bash 复制代码
    docker start my-rabbitmq
  • 重启容器:

    bash 复制代码
    docker restart my-rabbitmq
  • 删除容器:

    bash 复制代码
    docker rm my-rabbitmq
  • 删除镜像:

    bash 复制代码
    docker rmi rabbitmq:3.8-management

恭喜你!🎉 你已经成功在 CentOS 7 系统中使用 Docker 安装并运行了 RabbitMQ 3.8-management。现在你可以开始探索这只勤劳的兔子,让它在你的应用中发挥强大的消息传递能力吧!🚀

相关推荐
回家路上绕了弯11 小时前
深入解析Agent Subagent架构:原理、协同逻辑与实战落地指南
分布式·后端
用户83071968408214 小时前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
用户8307196840822 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者4 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者6 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧7 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖7 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
予枫的编程笔记7 天前
【Kafka高级篇】避开Kafka原生重试坑,Java业务端自建DLQ体系,让消息不丢失、不积压
java·kafka·死信队列·消息中间件·消息重试·dlq·java业务开发
断手当码农7 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者7 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端