当前位置: 首页 > news >正文

使用 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-managementcontainer_name: rabbitmq_3_12restart: always# 节点名 rabbit@rabbitserver,不然会去容器IDhostname: rabbitserverenvironment:# 默认虚拟机名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:/mypluginsnetworks:- devopsnetworknetworks: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地址 ,后续二次封装的时候再展开说怎么封装使用

相关文档

  • RabbitMQ 项目仓库
  • DockerHub 镜像
  • 官方文档
  • 延迟消息插件下载
  • .NET SDK 仓库

后语

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

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

相关文章:

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

前言 RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 特点 成熟,稳定消息持久化灵活的消息路由高性能,高可用性,可扩展性高支…...

前端八股速通(持续更新中...)

1、深拷贝和浅拷贝的区别 浅拷贝:浅拷贝是拷贝一层,引用类型共享地址。 如果属性是基本类型,拷贝的就是基本类型的值。 如果属性是引用类型,拷贝的就是内存地址。 意思是,当进行浅拷贝时,对于对象的每一…...

【语音识别和生成】语音识别和语音合成技术

语音识别和生成:语音识别和语音合成技术 目录 引言语音识别技术 语音识别的基本原理语音识别系统的组成语音识别的关键技术 语音合成技术 语音合成的基本原理语音合成系统的组成语音合成的关键技术 语音识别和生成的应用 智能助理智能家居语音翻译医疗健康教育和学…...

Redis#架构师面试题

1、Redis锁存在哪些问题及如何解决? 1、死锁问题 加过期时间设定 2、原子性问题 通过“set…nx...ex…”命令,将加锁、过期命令编排到一起,它们是原子操作了,可以避免死锁。 3、释放其他线程的锁问题 当过期时间设置小于线程…...

关于#define的使用方法总结

文章目录 #define 预处理指令一、#define宏定义二、查看预处理文件三、#define 的使用方法四、C语言宏中“#”和“##”的用法五、常见的宏定义总结六、常考题目 #define 预处理指令 #define 是 C 和 C 编程语言中的预处理指令,用于定义宏(macro&#xf…...

Unity顶点动画(Vertex Animation):创造动态视觉效果

在Unity中,顶点动画(Vertex Animation)是一种强大的技术,它允许开发者直接在顶点级别上操作和变形网格,从而实现各种动态视觉效果。顶点动画不依赖于骨骼绑定,因此非常适合模拟布料、流体、面部表情等复杂的动画效果。本文将探讨顶…...

WSL for Windows

1、安装 超详细Windows10/Windows11 子系统(WSL2)安装Ubuntu20.04(带桌面环境)_wsl安装ubuntu20.04-CSDN博客https://blog.csdn.net/weixin_44301630/article/details/122390018 注意,安装之后首次启动 Ubuntu 时&…...

Matlab freqz 代码简单实现

相关代码打开matlab源码也可以看到,这里做了简单实现,与源码并不完全一样。 实现代码 [h2 w2] freqzfir(data); [h1 w1] freqz(data); h2h2; h12 [h1, h2];[h4 w4] freqziir(b,a, 2001,true); [h3 w3] freqz(b,a, w4, whole); h4 h4; h34 h…...

待办app哪款好?高效待办软件推荐

在快节奏的现代生活中,一款高效的待办事项管理软件对于提升工作效率和个人时间管理至关重要。面对市场上众多的待办app,哪款才是你的最佳选择呢?经过深入体验和对比,我发现敬业签这款高效待办软件是个不错的选择。 敬业签的快速记…...

【OSCP系列】OSCP靶机-BTRsys-2.1(原创)

OSCP系列靶机—BTRsys-2.1 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、主机发现 二、端口扫描 1、快速扫描 2、全端口扫描 3、服务系统探测 4、漏洞探测 80端口扫到了一些目录,有wordpress框…...

攻坚克难岁月长,自主腾飞世界强——回顾近代中国数据库的发展与飞跃

前言 最近看了《中国数据库前世今生》纪录片,感触颇深,也是一直在思考到底该用何种方式起笔来回顾这段筚路蓝缕却又充满民族自豪感的历程。大概构思了一周左右吧,我想,或许还是应该从那个计算机技术在国内刚刚萌芽的年代开始讲起…...

WEB前端12-axios基础

Vue2-axios基础 1.axios基本概念 在现代的前端开发中,处理网络请求是至关重要的一部分。Axios 是一个流行的基于 Promise 的 HTTP 客户端,它可以在浏览器和 Node.js 环境中使用。它的设计简单易用,支持并行请求、拦截器、CSRF 防护等特性&a…...

Ubuntu 防火墙设置

目录 1. 安装防火墙 2. 开启和关闭防火墙 3. 开放端口和服务规则 4. 关闭端口和删除服务规则 5. 查看防火墙状态 1. 安装防火墙 如果已经安装就忽略 # 安装ufw(Uncomplicated Firewall),这是Ubuntu上管理防火墙的一个简单工具 sudo ap…...

JL 跳转指令的理解

一般情况下,JU 和 JC 是最常见的跳转指令;但有时会用到JL 指令,JL 说起来更像是一组指令,类似C,C# 语言中的 switch case 语句,但是有个明显的不同,前者的判断条件可以是任意合理数字,后者范围…...

vue大屏展示组件库datav

主要用于构建大屏数据展示页面,具有多种类型组件可供使用。详情参考 datav官网 一、安装 npm 安装 npm install jiaminghi/data-viewyarn安装 yarn add jiaminghi/data-view二、使用 在main.js中注册为全局组件 import dataV from jiaminghi/data-view Vue.us…...

Vue.js 与 Ajax(vue-resource)的集成应用

Vue.js 与 Ajax(vue-resource)的集成应用 Vue.js 是一款流行的前端JavaScript框架,以其简洁、灵活和高效的特点而受到开发者的喜爱。在实际开发中,与后端服务的通信是不可或缺的,而Ajax技术是实现这一功能的关键。在V…...

【讲解下AI Native应用中的模型微调】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

【SOC 芯片设计 DFT 学习专栏 -- DFT DRC规则检查】

请阅读【嵌入式及芯片开发学必备专栏】 请阅读【芯片设计 DFT 学习系列 】 如有侵权,请联系删除 转自: 芯爵ChipLord 2024年07月10日 12:00 浙江 文章目录 概述DRC的概念Tessent DRC检查的概述时钟相关检查扫描相关检查BIST规则检查预DFT时钟规则检查 …...

深度学习:如何计算感受野

感受野(Receptive Field)是卷积神经网络(CNN)中的一个重要概念,用于描述输入图像中的一个像素在输出特征图中影响的区域大小。在设计和理解卷积神经网络时,计算感受野有助于理解网络如何对输入数据进行处理…...

【状语从句】

框架 概念,特点主将从现连接词时间条件地点结果方式让步原因目的比较省略倒装 解读 1【概念,特点】 一个完整的句子,去修饰另一个完整句子中的动词,称为状语从句;特点:从句完整,只用考虑连接词是…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...

边缘计算网关提升水产养殖尾水处理的远程运维效率

一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

MeshGPT 笔记

[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...