首页 > 其他分享 >使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

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

时间:2024-07-28 15:54:22浏览次数:17  
标签:插件 Compose rabbitmq myplugins RabbitMQ plugins 挂载 Docker

前言

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地址 ,后续二次封装的时候再展开说怎么封装使用

相关文档

后语

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

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

标签:插件,Compose,rabbitmq,myplugins,RabbitMQ,plugins,挂载,Docker
From: https://blog.csdn.net/u012785252/article/details/140679074

相关文章

  • 征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
    近期,KubeSphere社区的讨论中频繁出现关于Docker官方镜像仓库访问受限的问题。本文旨在为您提供一个详细的指南,展示在Docker官方镜像访问受限的情况下,如何通过KubeKeyv3.1.2一次性成功部署KubeSpherev3.4.1以及Kubernetesv1.28.8集群。这将帮助您克服访问限制,确保......
  • 使用 Docker 部署 Next Terminal 轻量级堡垒机
    NextTerminal是一款开源的交互审计系统,支持多种协议如RDP、SSH、VNC、Telnet和Kubernetes。它不仅功能强大,而且易于安装和使用。本文将介绍如何使用Docker部署NextTerminal,帮助你快速搭建一个轻量级堡垒机系统。环境准备在开始部署之前,请确保你的系统已安装以下软件......
  • 【docker】配置mysql及数据持久化
    【docker】配置mysql及数据持久化前言一、使用docker时常用的命令1、用usermod命令向docker用户组添加新用户2、给docker的images打标签二、docker相关的环境配置1、配置文件的生效条件/etc/profile文件的环境变量所有用户可用,只在用户登陆的时候执行一次,安装编译好的全......
  • flutter中使用rabbitmq
    依赖dart_amqp:^0.3.1#rabbitMq接收发送消息工具封装import'package:dart_amqp/dart_amqp.dart';///封装RabbitMQ的服务类classRabbitMQService{lateConnectionSettings_settings;//RabbitMQ连接设置lateClient_client;//RabbitMQ客户端late......
  • 搭建极狐GitLab(基于Docker): 步骤整合汇总记录
    执行背景:(1)CentOS7(虚拟机ISO映像文件=CentOS-7-x86_64-DVD-2009.iso);(2)repo(yum)源已切换为国内源;命令汇总:1.安装Docker相关命令:#查看仓库源中可使用版本yumlistdocker-ce--showduplicates|sort-r#安装指定版本yuminstalldocker-ce-docker完整......
  • 虚拟机安装Docker
    1.卸载旧版首先如果系统中已经存在旧的Docker,则先卸载:yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\docker-selinux2.配......
  • linux学习记录(docker)
    DockeDocker是基于Go语言实现的开源容器项目。它诞生于2013年年初,最初发起者是dotCloud公司。Docker自开源后受到业界广泛的关注与参与,目前已有80多个开源组件,逐渐形成了围绕Docker容器的完整的生态体系。dotCloud公司于2013年年底改名为DockerIoc,专注于Docker相关技术和产......
  • Docker 和 k8s 学习
    披个甲:偷的图灵学院的笔记docker:https://note.youdao.com/ynoteshare/index.html?id=db5365c679b7d9129cbcfab5cb682d69&type=note&_time=1722071596141k8s:https://note.youdao.com/ynoteshare/index.html?id=b2d5991b16e43cef9ac5071fbc516026&type=note&_time=1722......
  • Postgresql & PgAdmin powered by compose
    Postgresql&PgAdminpoweredbycomposehttps://github.com/fanqingsong/compose-postgres/blob/master/docker-compose.ymlQuickStartCloneordownloadthisrepositoryGoinsideofdirectory,cdcompose-postgresRunthiscommanddocker-composeup-d......
  • 运行 Github Action 测试 Docker 镜像时退出代码 137
    我正在学习Testdriven.io:使用FastAPI和Docker进行测试驱动开发课程,目前正在学习持续集成部分。在本节中,您将使用github操作来构建docker映像并运行测试和linting等。在流程的测试Docker映像步骤中,当尝试进行pytest时,我收到以下错误:错误:进程已完成并退出代码......