前言
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 ,优化了流程,安装插件不需要复制文件和重启容器
需要先下载插件:rabbitmq_delayed_message_exchange-3.12.0.ez,下载对应版本的 。ez 文件:github releases
将下载的插件文件放到 。/myplugins 文件夹 前面将 myplugins 挂载到了容器
连接容器执行启用插件:docker exec -it rabbitmq_3_12 /bin/bash -c rabbitmq-plugins enable rabbitmq_delayed_message_exchange
因为已经挂载 myplugins 和设置为插件目录了 会自己去找 /plugins 和/myplugins 对应的 ez 文件以安装
启用成功,可在 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地址 ,后续二次封装的时候再展开说怎么封装使用
后语
安装还是比较简单的,版本选对,更多的是使用时需要根据业务选择适合的方案
插件的安装倒腾了一阵子,研究优化了流程
Intel将部分芯片外包给台积电 看上后者3nm工艺
【技术分享】"喂狗",也要讲究方法
阻旋料位开关有哪些特点,它的工作原理是什么
物联网会给电子零部件带来什么
哪款蓝牙耳机值得推荐?4款音质好的蓝牙耳机推荐
基于Docker Compose部署RabbitMQ的经验分享
三星Galaxy F62新机型部分参数信息曝光
全球最大锂矿宣布减产
全球首款5G基站核心芯片——天罡
澳大利亚进口的商品中,半导体有86%来自中国
关于智慧系统方案生态对接的实时案例分析
AMD推出全新AMD EPYC(霄龙)8004系列处理器
oracle中to_char用法
通过集成数据和电源隔离为工业系统设计降温
VMT将开启物联网AI智能的大时代
荣耀10青春版怎么样 值不值得买
锐龙5000系列会为曾经沉寂的CPU市场带来什么?
区块链对于未来的中国经济会有多大的影响
区块链在非洲市场的发展情况分析
“T”是个好东西,你的车有没有?