前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

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

作者头像
易墨
发布于 2023-11-03 01:07:40
发布于 2023-11-03 01:07:40
7K00
代码可运行
举报
运行总次数:0
代码可运行

前言

RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。

特点

  • 成熟,稳定
  • 消息持久化
  • 灵活的消息路由
  • 高性能,高可用性,可扩展性高
  • 支持插件系统:RabbitMQ 具有丰富的插件系统,可以通过安装插件来扩展其功能,例如管理界面、消息追踪、消息转换等。
  • 官方提供了 .NET/JavaSDK

使用情况

  • 项目中用于日志记录,消息发送,数据同步等,稳定可靠
  • 业务模块的初始化,数据导入异步处理
  • 做好幂等处理,不同场景使用不同的确认方式,防止消息的重复消费
  • 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即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 文件以安装
  1. 启用成功,可在 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

连接配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var factory = new ConnectionFactory
{
    HostName = "192.168.123.214",
    Port = 5672,
    VirtualHost = "admin_vhost",
    UserName = "root",
    Password = "devops666",
};
Demo 示例

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

相关文档

后语

安装还是比较简单的,版本选对,更多的是使用时需要根据业务选择适合的方案 插件的安装倒腾了一阵子,研究优化了流程

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 vite2 + Vue3 写一个在线帮助文档工具
VuePress 是“静态网站生成器”,需要我们自行编写文档,然后交给VuePress变成网站,VuePress 并没有提供编写环境,我知道有很多编写 Markdown 的方式,但是我还是喜欢编写、浏览合为“一体”的方式。
用户1174620
2022/05/09
1.4K0
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
页面比较简单,主要分为左侧的菜单栏,顶部的导航栏(折叠左侧菜单,切换暗黑模式,员工账号名,退出登录),再下面的标签栏,之后就是主页面显示区域。
十里青山
2023/04/28
4.7K0
【vite+vue3+Ts+element-plus】肩并肩带你写后台管理之主页面开发(侧边栏菜单生成、标签栏开发)
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
写这篇文章的初衷并不是要大家真的不用node和vscode,说实话前端发展成今天这样,在实际开发中确实离不开node和vscode这类工具了,但往往工具用多了我们自己也成了一个工具人!
人人都是码农
2025/01/20
1620
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
用Spring Boot+Vue做微人事项目第五天
用Spring Boot+Vue做微人事项目第五天
Java架构师必看
2021/05/14
7370
用Spring Boot+Vue做微人事项目第五天
vue后台管理之动态加载路由
我们的通用的后台管理系统中,我们会根据权限的粗细不同,会对每个角色每个权限每个资源进行控制。同样的我们也需要实现一个这样的功能。 这篇文章我将主要讲vue端的实现,关于后台接口我就不会涉及,当我接触的时候我们的后台接口是springcloud实现。
yukong
2018/08/08
4.9K1
vue后台管理之动态加载路由
用Spring Boot+Vue做微人事项目第七天
用Spring Boot+Vue做微人事项目第七天
Java架构师必看
2021/05/14
6190
用Spring Boot+Vue做微人事项目第七天
Spring Boot+Vue3 动态菜单实现思路梳理
「松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦。」 ---- 关于 Spring Boot + Vue3 的动态菜单,松哥之前已经写了两篇文章了,这两篇文章主要是从代码上和大家分析动态菜单最终的实现方式,但是还是有小伙伴觉得没太看明白,感觉缺乏一个提纲挈领的思路,所以,今天松哥再整一篇文章和大家再来捋一捋这个问题,希望这篇文章能让
江南一点雨
2022/07/18
1.2K0
Spring Boot+Vue3 动态菜单实现思路梳理
Vue + Element UI 实现权限管理系统 前端篇(七):功能组件封装
组件封装 为了避免组件代码的臃肿,这里对主要的功能部件进行封装,保证代码的模块化和简洁度。 组件结构 组件封装重构后,试图组件结构如下图所示 代码一览 Home组件被简化,包含导航、头部和主内容三个组
朝雨忆轻尘
2019/06/18
9980
vue3 + elemenplus实现导航栏
今天实现一下导航栏。文章开始前先新建几个文件夹,用于一会儿存放我们的代码。(使用vite创建)。
用户4793865
2023/01/12
9.8K1
vue3 + elemenplus实现导航栏
Elementui tabs组件内添加组件
siderBar和tab-bar在同一个组件内,所以要实现参数传递,需要先emit提交事件,再在父组件传递给另一个子组件,这样链路就完整了,没看懂我的看下面的参考吧,我也是参考它的结合自己的代码实现
老梁
2019/09/10
2.9K0
Elementui tabs组件内添加组件
Vue+abp增加三级菜单
title: "Vue+abp增加三级菜单" publishDate: 2019-12-26 17:28:38 +0800 date: 2019-12-26 17:28:38 +0800 categories: Vue+abp增加三级菜单 position: problem ---
用户6362579
2019/12/30
1.3K0
浅学前端:Vue篇(三)
而我们今天学习的这个所谓的路由,就是根据浏览器路径不同,用不同的视图组件替换这个页面内容展示。
传说之下的花儿
2023/11/13
3960
vue使用elementui的el-menu的折叠菜单collapse
打不着的大喇叭
2024/03/11
1.2K0
vue使用elementui的el-menu的折叠菜单collapse
tauri2.x-admin基于vue3+tauri2+pinia2客户端后台系统
最近比较热门的跨端框架当属于tauri2.0了。tauri v2有了很多新的功能升级,而且还支持创建android/ios应用。
andy2018
2024/10/15
4290
tauri2.x-admin基于vue3+tauri2+pinia2客户端后台系统
动态加载router,用Vue+Element UI搭建后台管理系统界面
今天教大家用 Vue + Element UI 搭建一个后台管理系统界面,首先讲一下需要用到的组件标签,重点是左侧菜单栏的创建,Element UI 左侧菜单的标签有:
南风
2019/10/16
3.3K0
动态加载router,用Vue+Element UI搭建后台管理系统界面
Vue2动态路由
    一般管理端的菜单栏是根据登录用户角色不同,动态生成的,在vue中我们不止菜单栏需要动态生成,同时我们路由也需要动态生成。
用户5899361
2023/03/25
1.1K0
Vue2动态路由
ElementUI 实现头部组件和左侧组件效果
https://www.cnblogs.com/xiao987334176/p/14434383.html
py3study
2021/03/19
2K0
BuildAdmin05:如何玩转Vue路由动态加载
vue-router在BuildAdmin中主要实现了菜单栏和tabs标签页两大模块,而这两个模块是比较复杂的,所以对vue-router需要有一个很好的掌握。
叫我阿柒啊
2024/01/19
8960
BuildAdmin05:如何玩转Vue路由动态加载
【SpringBoot+Vue】007-获取导航数据、数据匹配、折叠按钮
(前端的东西没啥好些的,没啥太大的逻辑性,写什么样子就是什么样子,笔记也没啥好做的)
訾博ZiBo
2025/01/06
780
【SpringBoot+Vue】007-获取导航数据、数据匹配、折叠按钮
Vue3使用递归组件封装El-Menu多级菜单
明知山
2023/09/06
1.1K0
Vue3使用递归组件封装El-Menu多级菜单
推荐阅读
相关推荐
基于 vite2 + Vue3 写一个在线帮助文档工具
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验