【Docker项目实战】Docker部署RabbitMQ消息中间件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【10月更文挑战第8天】Docker部署RabbitMQ消息中间件

一、RabbitMQ介绍

1.1 RabbitMQ简介

RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。

1.2 RabbitMQ特点

  • 开源、性能优秀,稳定性保障
  • 提供可靠性消息投递模式、返回模式
  • 与Spring AMQP完美整合,API丰富
  • 集群模式丰富,表达式配置,HA模式,镜像队列模型
  • 保证数据不丢失的前提做到高可靠性、可用性

1.3 RabbitMQ使用场景

RabbitMQ是一个广泛使用的开源消息队列系统,它支持多种消息协议,其中AMQP(Advanced Message Queuing Protocol)是最常用的。以下是RabbitMQ的一些典型使用场景:

  1. 用户订单与库存处理:在电商系统中,当用户下单后,订单系统通过RabbitMQ将订单信息发送给库存系统,实现订单处理和库存减少的异步操作。这样即使库存系统暂时不可用,也不会阻碍订单的创建,确保了服务间的解耦和系统的高可用性。

  2. 异步通信:在分布式系统中,不同的服务组件可能需要协同工作,但不一定需要同步等待响应。例如,用户注册后,系统通过RabbitMQ异步发送欢迎邮件或短信通知,避免了用户界面长时间等待邮件发送完成。

  3. 任务调度与批处理:可以利用RabbitMQ安排定时任务或分发批量作业。例如,夜间的数据分析报告生成任务,可以在非高峰时段通过消息队列安排,避免影响白天的系统性能。

  4. 应用内的同步转异步:在处理高并发或资源密集型任务时,如图片上传后的格式转换、视频转码等,可以先将请求放入消息队列,由后台服务异步处理,提高应用响应速度。

  5. 消息通知系统:用于实时通知系统,如支付通知、物流状态更新等。当某个事件发生时,如一笔支付完成,系统通过RabbitMQ发送消息给订阅者,实现即时的通知服务。

  6. 发布/订阅模式:适用于需要广播消息到多个消费者的场景。例如,新闻推送系统可以将每条新发布的新闻通过交换机广播到所有订阅该类别的客户端。

  7. 日志收集与处理:系统组件可以将日志信息发送到RabbitMQ,由专门的日志收集服务进行处理和存储,这样可以避免日志处理影响主业务流程。

  8. 流量削峰与错峰处理:在高流量时期,如促销活动期间,系统可以通过消息队列暂存请求,平滑处理高峰期流量,避免直接冲击数据库或其他核心服务。

  9. 微服务间解耦:在微服务架构中,服务间通过RabbitMQ传递消息而非直接调用,增强了系统的可扩展性和容错性。

二、检查Docker环境

2.1 检查Docker版本

检查当前Docker版本

[root@jeven ~]# docker -v
Docker version 20.10.17, build 100c701

2.2 检查操作系统版本

检查服务器操作系统版本,当前实践环境为centos7.6环境。

[root@jeven ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

2.3 检查Docker状态

检查Docker状态,确保宿主机Docker服务正常。

[root@jeven ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2024-05-12 08:34:14 CST; 1 day 10h ago
     Docs: https://docs.docker.com
 Main PID: 11565 (dockerd)
    Tasks: 28
   Memory: 1.2G
   CGroup: /system.slice/docker.service

三、下载RabbitMQ镜像

下载RabbitMQ镜像bitnami/rabbitmq,版本为latest

[root@jeven ~]#  docker pull bitnami/rabbitmq
Using default tag: latest
latest: Pulling from bitnami/rabbitmq
0796bf144e3f: Pull complete
0aa278e6d559: Pull complete
f37134480d36: Pull complete
3ca5a05c65cf: Pull complete
88bb7bc42515: Pull complete
d707818752e6: Pull complete
b8a937a01956: Pull complete
efb772451b7f: Pull complete
db7fe513e59c: Pull complete
0d37a623156d: Pull complete
2e1d8d64104c: Pull complete
1bc67f22006e: Pull complete
891457114828: Pull complete
1161d96f1d40: Pull complete
Digest: sha256:a45676c71cf551fe942245b7ae133f9fd09f6278bb53fa98e18a00cf6abdbd90
Status: Downloaded newer image for bitnami/rabbitmq:latest
docker.io/bitnami/rabbitmq:latest

四、部署RabbitMQ服务

4.1创建挂载目录

创建挂载目录 /data/rabbitmq/data

mkdir -p /data/rabbitmq/data && cd /data/rabbitmq/

目录授权

 chmod -R 777 /data/rabbitmq/

4.2 运行RabbitMQ容器

使用docker-cli方式部署,可参考以下方式。

docker run -d --name rabbitmq --restart always  -v /data/rabbitmq/data:/bitnami   -e RABBITMQ_USERNAME=admin -e RABBITMQ_PASSWORD=admin    -p 5672:5672 -p 15672:15672       bitnami/rabbitmq:latest

使用docker compose方式,可参考以下docker-compose.yaml部署文件。本次实践使用docker compose方式部署,可自定义映射端口和账号密码登变量。

version: '3'
services:
  rabbitmq:
    image: bitnami/rabbitmq:latest
    container_name: rabbitmq
    restart: always
    environment:
      - RABBITMQ_USERNAME=admin
      - RABBITMQ_PASSWORD=admin
    ports:
      - 5672:5672
      - 15672:15672
    volumes:
      - /data/rabbitmq/data:/bitnami

使用以下命令,开始创建RabbitMQ容器。

docker compose up -d

在这里插入图片描述

4.3 查看RabbitMQ容器状态

检查RabbitMQ容器状态,确保容器正常启动。

[root@jeven rabbitmq]# docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
rabbitmq            "/opt/bitnami/script…"   rabbitmq            running             0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp, :::5672->5672/tcp, :::15672->15672/tcp

4.4 检查RabbitMQ容器日志

检查RabbitMQ容器日志,确保RabbitMQ服务正常运行,无严重报错。

docker compose logs

在这里插入图片描述

五、访问RabbitMQ首页

5.1 进入RabbitMQ登录页

浏览器访问:http://192.168.3.166:15672/,将IP替换为自己服务器IP地址。如果无法访问到该登录页,检查本地防火墙是否关闭或者放行相关端口,云服务器则还需要再设置安全组规则。

在这里插入图片描述

5.2 访问RabbitMQ首页

输入我们设置的账号密码:admin/admin,登录RabbitMQ。

在这里插入图片描述

六、总结

使用Docker部署RabbitMQ极大地简化了安装与配置流程,通过简单的命令即可启动一个包含管理插件的服务实例。容器化的RabbitMQ便于进行版本管理和横向扩展,同时支持数据持久化以避免消息丢失。此外,借助Docker Compose可以轻松地与其它微服务集成,形成稳定的消息传递架构。整体而言,这种方式提高了开发效率和系统的可维护性。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
5月前
|
消息中间件 存储 Kafka
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
本文详细介绍了分布式消息中间件RocketMQ的核心概念、部署方式及使用方法。RocketMQ由阿里研发并开源,具有高性能、高可靠性和分布式特性,广泛应用于金融、互联网等领域。文章从环境搭建到消息类型的实战(普通消息、延迟消息、顺序消息和事务消息)进行了全面解析,并对比了三种消费者类型(PushConsumer、SimpleConsumer和PullConsumer)的特点与适用场景。最后总结了使用RocketMQ时的关键注意事项,如Topic和Tag的设计、监控告警的重要性以及性能与可靠性的平衡。通过学习本文,读者可掌握RocketMQ的使用精髓并灵活应用于实际项目中。
4124 9
 一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
|
4月前
|
物联网 Linux 开发者
快速部署自己私有MQTT-Broker-下载安装到运行不到一分钟,快速简单且易于集成到自己项目中
本文给物联网开发的朋友推荐的是GMQT,让物联网开发者快速拥有合适自己的MQTT-Broker,本文从下载程序到安装部署手把手教大家安装用上私有化MQTT服务器。
1307 5
|
5月前
|
消息中间件 监控 Docker
Docker环境下快速部署RabbitMQ教程。
就这样,你成功地用魔法召唤出了RabbitMQ,还把它和你的应用程序连接了起来。现在,消息会像小溪流水一样,在你的系统中自由流淌。别忘了,兔子们不喜欢孤独,他们需要你细心的关怀,不时地监控它们,确保他们的世界运转得井井有条。
338 18
|
9月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1277 91
|
消息中间件 存储 Java
RocketMQ(一):消息中间件缘起,一览整体架构及核心组件
【10月更文挑战第15天】本文介绍了消息中间件的基本概念和特点,重点解析了RocketMQ的整体架构和核心组件。消息中间件如RocketMQ、RabbitMQ、Kafka等,具备异步通信、持久化、削峰填谷、系统解耦等特点,适用于分布式系统。RocketMQ的架构包括NameServer、Broker、Producer、Consumer等组件,通过这些组件实现消息的生产、存储和消费。文章还提供了Spring Boot快速上手RocketMQ的示例代码,帮助读者快速入门。
|
7月前
|
消息中间件 Java 中间件
RocketMQ实战—2.RocketMQ集群生产部署
本文主要介绍了大纲什么是消息中间件、消息中间件的技术选型、RocketMQ的架构原理和使用方式、消息中间件路由中心的架构原理、Broker的主从架构原理、高可用的消息中间件生产部署架构、部署一个小规模的RocketMQ集群进行压测、如何对RocketMQ集群进行可视化的监控和管理、进行OS内核参数和JVM参数的调整、如何对小规模RocketMQ集群进行压测、消息中间件集群生产部署规划梳理。
RocketMQ实战—2.RocketMQ集群生产部署
|
9月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
276 19
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
11月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
260 6
|
消息中间件 存储 Apache
探索 RocketMQ:企业级消息中间件的选择与应用
RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统,广泛应用于金融、电商、日志系统、数据分析等领域。
1135 0
探索 RocketMQ:企业级消息中间件的选择与应用

热门文章

最新文章