Redian新闻
>
使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

公众号新闻

前言

RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。

本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。

特点

  • 成熟,稳定

  • 消息持久化

  • 灵活的消息路由

  • 高性能,高可用性,可扩展性高

  • 支持插件系统:RabbitMQ 具有丰富的插件系统,可以通过安装插件来扩展其功能,例如管理界面、消息追踪、消息转换等。

  • 官方提供了 .NET/Java 的 SDK

使用情况

  • 项目中用于日志记录,消息发送,数据同步等,稳定可靠

  • 业务模块的初始化,数据导入异步处理

  • 做好幂等处理,不同场景使用不同的确认方式,防止消息的重复消费

  • RabbitMQ 默认不支持延迟消息,使用延迟消息插件实现即可(有局限,仅支持最多一两天的延迟消息

  • 使用 .NET SDK:RabbitMQ.Client,后面再分享二次封装使用

实践

使用 Docker Compose V2 安装 rabbitmq v3.12.6

准备

  • 当前版本:v3.12.6

  • 使用镜像:rabbitmq:3.12.6-management (带 web 管理界面)

  • 默认端口:5672:应用连接端口 15672:web 控制台

使用 Docker Compose 安装

本篇文章基于 Docker V24 及 Docker Compose V2,安装可以参考之前的文章

配置说明

  • 固定了镜像版本:rabbitmq:3.12.6-management

  • 指定的主机名:rabbitserver

  • 指定虚拟机名称:admin_vhost

  • 指定账号密码: root devops666

  • 指定端口:5672:应用连接端口 15672:web 管理界面

  • 挂载数据目录:./data:/var/lib/rabbitmq

  • 挂载额外的插件目录:./myplugins:/myplugins RabbitMQ 容器中默认插件目录是 /plugins 不推荐挂载

  • 将 ./myplugins 挂载到容器的,并将其加入插件查找的目录中:RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'

  • 指定网络:devopsnetwork (docker network create devopsnetwork)

配置文件 compose.yml

  • 准备好 compose.yml 拷贝到服务器

  • 然后运行docker compose up -d即可

     version: '3.1'
    services:
    rabbitmq:
    image: rabbitmq:3.12.6-management
    container_name: rabbitmq_3_12
    restart: always
    # 节点名 rabbit@rabbitserver,不然会去容器ID
    hostname: rabbitserver
    environment:
    # 默认虚拟机名
    RABBITMQ_DEFAULT_VHOST: admin_vhost
    # 用户名
    RABBITMQ_DEFAULT_USER: root
    # 密码
    RABBITMQ_DEFAULT_PASS: devops666
    # 指定自定义插件目录
    RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'
    ports:
    - "5672:5672"
    - "15672:15672"
    volumes:
    - ./data:/var/lib/rabbitmq
    - ./myplugins:/myplugins
    networks:
    - devopsnetwork

    networks:
    devopsnetwork:
    external: true
    ```

部署成功

部署机器IP:192.168.123.214

安装插件:延迟消息插件

注意:插件消息发布延迟只支持到 数秒、分钟或数小时,最多一两天,注意!!!

原文: This plugin was designed for delaying message publishing for a number of seconds, minutes, or hours。 A day or two at most.

! ! ! 前面的 compose.yml 默认是将。/myplugins 挂载到容器的,并指定了多个插件目录 系统:/plugins 自己添加:/myplugins ,优化了流程,安装插件不需要复制文件和重启容器

  1. 需要先下载插件:rabbitmq_delayed_message_exchange-3.12.0.ez,下载对应版本的 。ez 文件:Github Releases

  2. 将下载的插件文件放到 。/myplugins 文件夹 前面将 myplugins 挂载到了容器

  3. 连接容器执行启用插件:docker exec -it rabbitmq_3_12 /bin/bash -c "rabbitmq-plugins enable rabbitmq_delayed_message_exchange"

  4. 因为已经挂载 myplugins 和设置为插件目录了 会自己去找 /plugins 和/myplugins 对应的 ez 文件以安装

  5. 启用成功,可在 Exchanges 页查看

踩过的坑

  • 根据上文配置来不会再出现下面的问题,遇到一样的问题可参考

  • 延迟消息仅支持最多一两天的延迟消息,项目中有个定时发消息的功能,设置的适合时间设置超过阈值无法被消费 说明

  • 不要挂载/plugins 插件目录,可以用RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'来指定多个目录,这样只需要执行 文档

  • 不指定 hostname 节点名称会是容器 Id

  • 使用了 rabbitmq:3.x-management 镜像(具有 web 管理页面的功能)但是挂载了空的插件目录会报错:{"init terminating in do_boot",{undef,[{rabbit,boot,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}

  • Admin 页面提示报错:升级版本吧 issues 我开始用的 3.9.29-management(tags 列表排序 3.9 排在前面,( ╯□╰ )),报这个错

  • 切换版本前需要经。/data 数据清空,不然启动不起来

  • Exchanges 页面报错: 我把版本换成 3.12.6-management 后报了这个错,没有退出登录,只需 Ctrl+F5,重新登录下就好

使用

.NET SDK

官方:RabbitMQ.Client

连接配置

var factory = new ConnectionFactory
{
HostName = "192.168.123.214",
Port = 5672,
VirtualHost = "admin_vhost",
UserName = "root",
Password = "devops666",
};

Demo 示例

建了一个 demo 测试使用 Demo地址 ,后续二次封装的时候再展开说怎么封装使用

后语

安装还是比较简单的,版本选对,更多的是使用时需要根据业务选择适合的方案

插件的安装倒腾了一阵子,研究优化了流程

链接:https://www.cnblogs.com/morang/p/devops-rabbitmq-install.html

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
10、长篇民国小说《永泰里》 第二章 各安天命(4)容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档RocketMQ生产者负载均衡(轮询机制)核心原理docker是怎么实现cpu隔离的?在 Arch Linux 上安装 Docker | Linux 中国再见Costco!Docklands店即将关闭!逛一天少一天!新店可能在30公里外!丢掉 LangChain、像 Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?Mysql集群之PXC-Docker安装能同时参加BBO和USABO吗?历届学生有哪些经验分享?Docker 与 DevOps 的无敌组合,引爆你的创新潜能自动生成prompt:Automatic prompt engineeringPython + Docker 还是 Rust + WebAssembly?这并不难选Who is the most important person in your company?Competition for Civil Service Jobs Keeps Getting Fiercer如何在 Ubuntu 上安装 Docker | Linux 中国《歌德堡变奏曲1441》AWS Cloudshell 现在可以访问 Docker Engine基于 RabbitMQ 和 Redis,美版“携程”网使用微服务提升搜索扩展性双林奇案录第三部之昭雪嘉州: 第二十八节(结尾)Docker Compose部署Spug:实现内网穿透谁是BeijingGirl1的大爱豆?突发!Docklands Costco宣布要停业!搬至新址已公布!WWS也官宣停售这类商品,澳人炸锅!Taking Stock of Love and Losses in the ‘World’s Supermarket’《尘封档案》拾遗之015:“梁山七侠”覆灭记像Docker一样编排大模型应用程序:这支十余人的年轻创业团队如何在2个月做出一个LLMOps平台?8 个最佳 Docker 容器监控工具,收藏了Diving Controversy Prompts Sports Fandom CriticismDocker 的诅咒:曾以为它是终极解法,最后却是“罪大恶极”?我在爱马仕被 PUA 的一些经历(不是定了!Docklands的Costco的停业时间Docker实战【镜像部署】完成公司云迁移Jenkins + Docker 一键自动化部署 SpringBoot 应用最精简流程“身心灵”大爆发,“直播”成炮灰?2024年11个赚钱与踩坑行业,99%的人都不知道!K8s部署Jumpserver并使用Istio对外暴露服务年底又顺利升职了! 分享一些经验和看法!
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。