0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Docker Compose部署RabbitMQ的经验分享

马哥Linux运维 来源:稀土掘金技术社区 2024-01-03 10:22 次阅读

前言

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

指定账号密码:rootdevops666

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

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

挂载额外的插件目录:./myplugins:/mypluginsRabbitMQ 容器中默认插件目录是 /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

ecd9fe2c-a951-11ee-8b88-92fbcf53809c.png

ece8810e-a951-11ee-8b88-92fbcf53809c.png

安装插件:延迟消息插件

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

原文: 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 文件以安装

ed0912c0-a951-11ee-8b88-92fbcf53809c.png

启用成功,可在 Exchanges 页查看

ed166fc4-a951-11ee-8b88-92fbcf53809c.png

踩过的坑

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

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

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

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

ed213792-a951-11ee-8b88-92fbcf53809c.png

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

ed396768-a951-11ee-8b88-92fbcf53809c.png

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

ed4c4ee6-a951-11ee-8b88-92fbcf53809c.png

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

ed615af2-a951-11ee-8b88-92fbcf53809c.png

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

ed7d5afe-a951-11ee-8b88-92fbcf53809c.png

使用

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

后语

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

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    3244

    浏览量

    42385
  • 虚拟机
    +关注

    关注

    1

    文章

    908

    浏览量

    28075
  • 消息队列
    +关注

    关注

    0

    文章

    33

    浏览量

    2968
  • Docker
    +关注

    关注

    0

    文章

    454

    浏览量

    11807

原文标题:使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    借助Docker弹性部署自己的服务

    Docker弹性部署自己的服务
    发表于 04-19 10:15

    docker中java环境的部署

    docker 部署java环境以及常用应用(持续更新)
    发表于 05-24 15:44

    docker流程部署步骤

    为女朋友写一个小程序(五)— —如何用docker简化部署
    发表于 09-12 08:26

    云计算核心技术Docker教程:Docker Compose的pull和push命令详解

    Docker-Compose pull命令可以拉取docker-compose.yml或者docker-stack.yml文件中定义的服务关联的镜像,Docker-Compose pu
    的头像 发表于 11-17 18:22 9161次阅读

    Docker Compose Docker应用构建管理工具

    ./oschina_soft/compose.zip
    发表于 05-12 15:58 1次下载
    <b class='flag-5'>Docker</b> <b class='flag-5'>Compose</b> <b class='flag-5'>Docker</b>应用构建管理工具

    docker compose一键打包部署项目的实践

    【导读】本文介绍了 docker compose 一键打包部署项目的实践。
    的头像 发表于 08-30 11:03 1497次阅读

    使用podman-compose部署wordpress的示例

    我们对于docker-compose并不陌生,它是一个用于编排多个可能相互依赖的容器的工具。
    的头像 发表于 10-17 10:59 2686次阅读

    rabbitmq是什么?rabbitmq安装、原理、部署

    本身是基于Erlang编写的,Erlang语言自然具有分布式特性(Magic通过同步Erlang集群每个节点 实现cookie)。 RabbitMQ部署RabbitMQ安装 (1)Erlang与
    的头像 发表于 07-19 13:50 1002次阅读

    使用Docker安装WordPress教程

    本教程将向您展示如何使用 Docker ComposeDocker 容器中运行 WordPress 安装。
    的头像 发表于 07-28 11:39 1488次阅读
    使用<b class='flag-5'>Docker</b>安装WordPress教程

    linux docker安装部署

    Docker是一种开源的容器化平台,可以帮助开发者在不同的环境中快速构建、测试和部署应用程序。它能够解决不同操作系统之间的兼容性问题,简化了应用程序的部署过程,并提供了高效的资源利用。本文将带您详细
    的头像 发表于 11-23 09:27 1056次阅读

    docker部署mysql的坏处

    Docker 是一种虚拟化技术,它允许开发人员在容器内打包应用程序及其所有依赖项,从而实现在不同环境中运行相同的应用程序的能力。然而,在使用 Docker 部署 MySQL 时,也存在一些潜在
    的头像 发表于 11-23 09:29 1366次阅读

    docker部署对性能的影响

    Docker 是一个流行的容器化平台,它提供了一种轻量级的虚拟化技术,使得应用程序可以在独立的容器中运行。然而,部署应用程序到 Docker 容器中可能会对性能产生一些影响。在本文中,我们将探讨
    的头像 发表于 11-23 09:31 1510次阅读

    docker核心组件有哪些

    Docker 是一种开源的容器化平台,它能够实现将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速、可重复、可扩展的部署和管理。Docker 的核心组件包括 Docker En
    的头像 发表于 11-23 09:47 1859次阅读

    如何利用树莓派安装DockerDocker-compose呢?

    本文主要演示了树莓派如何安装DockerDocker-compose的过程。
    的头像 发表于 12-14 16:19 2760次阅读
    如何利用树莓派安装<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker-compose</b>呢?

    宝塔面板Docker一键安装:部署GPTAcademic,开发私有GPT学术优化工具

    使用宝塔Docker-compose,5分钟内在海外服务器上搭建gpt_academic。这篇文章讲解如何使用宝塔面板的Docker服务搭建GPT 学术优化 (GPT Academic)。   在
    的头像 发表于 07-02 11:58 2450次阅读
    宝塔面板<b class='flag-5'>Docker</b>一键安装:<b class='flag-5'>部署</b>GPTAcademic,开发私有GPT学术优化工具