0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于Docker Compose部署RabbitMQ的經(jīng)驗(yàn)分享

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金技術(shù)社區(qū) ? 2024-01-03 10:22 ? 次閱讀

前言

RabbitMQ 是一個(gè)功能強(qiáng)大的開(kāi)源消息隊(duì)列系統(tǒng),它實(shí)現(xiàn)了高效的消息通信和異步處理。

本文主要介紹其基于 Docker-Compose 的部署安裝和一些使用的經(jīng)驗(yàn)。

特點(diǎn)

成熟,穩(wěn)定

消息持久化

靈活的消息路由

高性能,高可用性,可擴(kuò)展性高

支持插件系統(tǒng):RabbitMQ 具有豐富的插件系統(tǒng),可以通過(guò)安裝插件來(lái)擴(kuò)展其功能,例如管理界面、消息追蹤、消息轉(zhuǎn)換等。

官方提供了 .NET/JavaSDK

使用情況

項(xiàng)目中用于日志記錄,消息發(fā)送,數(shù)據(jù)同步等,穩(wěn)定可靠

業(yè)務(wù)模塊的初始化,數(shù)據(jù)導(dǎo)入異步處理

做好冪等處理,不同場(chǎng)景使用不同的確認(rèn)方式,防止消息的重復(fù)消費(fèi)

RabbitMQ 默認(rèn)不支持延遲消息,使用延遲消息插件實(shí)現(xiàn)即可(有局限,僅支持最多一兩天的延遲消息

使用 .NET SDK:RabbitMQ.Client,后面再分享二次封裝使用

實(shí)踐

使用 Docker Compose V2 安裝 rabbitmq v3.12.6

準(zhǔn)備

當(dāng)前版本:v3.12.6

使用鏡像:rabbitmq:3.12.6-management (帶 web 管理界面)

默認(rèn)端口:5672:應(yīng)用連接端口 15672:web 控制臺(tái)

使用 Docker Compose 安裝

本篇文章基于 Docker V24 及 Docker Compose V2,安裝可以參考之前的文章

配置說(shuō)明

固定了鏡像版本:rabbitmq:3.12.6-management

指定的主機(jī)名:rabbitserver

指定虛擬機(jī)名稱(chēng):admin_vhost

指定賬號(hào)密碼:rootdevops666

指定端口:5672:應(yīng)用連接端口15672:web 管理界面

掛載數(shù)據(jù)目錄:./data:/var/lib/rabbitmq

掛載額外的插件目錄:./myplugins:/mypluginsRabbitMQ 容器中默認(rèn)插件目錄是 /plugins 不推薦掛載

將 ./myplugins 掛載到容器的,并將其加入插件查找的目錄中:RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'

指定網(wǎng)絡(luò):devopsnetwork (docker network create devopsnetwork)

配置文件 compose.yml

準(zhǔn)備好 compose.yml 拷貝到服務(wù)器

然后運(yùn)行docker compose up -d即可

 version: '3.1'
 services:
   rabbitmq:
     image: rabbitmq:3.12.6-management
     container_name: rabbitmq_3_12
     restart: always
     # 節(jié)點(diǎn)名 rabbit@rabbitserver,不然會(huì)去容器ID
     hostname: rabbitserver
     environment:
       # 默認(rèn)虛擬機(jī)名
       RABBITMQ_DEFAULT_VHOST: admin_vhost
       # 用戶(hù)名
       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
 ```

部署成功

部署機(jī)器IP:192.168.123.214

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

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

安裝插件:延遲消息插件

注意:插件消息發(fā)布延遲只支持到 數(shù)秒、分鐘或數(shù)小時(shí),最多一兩天,注意!?。?/p>

原文: This plugin was designed for delaying message publishing for a number of seconds, minutes, or hours。 A day or two at most.

! ! ! 前面的 compose.yml 默認(rèn)是將。/myplugins 掛載到容器的,并指定了多個(gè)插件目錄 系統(tǒng):/plugins 自己添加:/myplugins ,優(yōu)化了流程,安裝插件不需要復(fù)制文件和重啟容器

需要先下載插件:rabbitmq_delayed_message_exchange-3.12.0.ez,下載對(duì)應(yīng)版本的 。ez 文件:Github Releases

將下載的插件文件放到 。/myplugins 文件夾 前面將 myplugins 掛載到了容器

連接容器執(zhí)行啟用插件:docker exec -it rabbitmq_3_12 /bin/bash -c "rabbitmq-plugins enable rabbitmq_delayed_message_exchange"

因?yàn)橐呀?jīng)掛載 myplugins 和設(shè)置為插件目錄了 會(huì)自己去找 /plugins 和/myplugins 對(duì)應(yīng)的 ez 文件以安裝

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

啟用成功,可在 Exchanges 頁(yè)查看

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

踩過(guò)的坑

根據(jù)上文配置來(lái)不會(huì)再出現(xiàn)下面的問(wèn)題,遇到一樣的問(wèn)題可參考

延遲消息僅支持最多一兩天的延遲消息,項(xiàng)目中有個(gè)定時(shí)發(fā)消息的功能,設(shè)置的適合時(shí)間設(shè)置超過(guò)閾值無(wú)法被消費(fèi)說(shuō)明

不要掛載/plugins 插件目錄,可以用RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'來(lái)指定多個(gè)目錄,這樣只需要執(zhí)行文檔

不指定 hostname 節(jié)點(diǎn)名稱(chēng)會(huì)是容器 Id

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

使用了 rabbitmq:3.x-management 鏡像(具有 web 管理頁(yè)面的功能)但是掛載了空的插件目錄會(huì)報(bào)錯(cuò):{"init terminating in do_boot",{undef,[{rabbit,boot,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}

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

Admin 頁(yè)面提示報(bào)錯(cuò):升級(jí)版本吧issues我開(kāi)始用的 3.9.29-management(tags 列表排序 3.9 排在前面,( ╯□╰ )),報(bào)這個(gè)錯(cuò)

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

切換版本前需要經(jīng)。/data 數(shù)據(jù)清空,不然啟動(dòng)不起來(lái)

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

Exchanges 頁(yè)面報(bào)錯(cuò): 我把版本換成 3.12.6-management 后報(bào)了這個(gè)錯(cuò),沒(méi)有退出登錄,只需 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 示例

建了一個(gè) demo 測(cè)試使用Demo地址,后續(xù)二次封裝的時(shí)候再展開(kāi)說(shuō)怎么封裝使用

后語(yǔ)

安裝還是比較簡(jiǎn)單的,版本選對(duì),更多的是使用時(shí)需要根據(jù)業(yè)務(wù)選擇適合的方案

插件的安裝倒騰了一陣子,研究?jī)?yōu)化了流程

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3349

    瀏覽量

    42505
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    917

    瀏覽量

    28209
  • 消息隊(duì)列
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    2986
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    460

    瀏覽量

    11858

原文標(biāo)題:使用 Docker Compose 部署 RabbitMQ 的一些經(jīng)驗(yàn)與踩坑記錄

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    借助Docker彈性部署自己的服務(wù)

    Docker彈性部署自己的服務(wù)
    發(fā)表于 04-19 10:15

    docker中java環(huán)境的部署

    docker 部署java環(huán)境以及常用應(yīng)用(持續(xù)更新)
    發(fā)表于 05-24 15:44

    docker流程部署步驟

    為女朋友寫(xiě)一個(gè)小程序(五)— —如何用docker簡(jiǎn)化部署
    發(fā)表于 09-12 08:26

    云計(jì)算核心技術(shù)Docker教程:Docker Compose的pull和push命令詳解

    Docker-Compose pull命令可以拉取docker-compose.yml或者docker-stack.yml文件中定義的服務(wù)關(guān)聯(lián)的鏡像,Docker-Compose pu
    的頭像 發(fā)表于 11-17 18:22 ?9214次閱讀

    Docker Compose Docker應(yīng)用構(gòu)建管理工具

    ./oschina_soft/compose.zip
    發(fā)表于 05-12 15:58 ?1次下載
    <b class='flag-5'>Docker</b> <b class='flag-5'>Compose</b> <b class='flag-5'>Docker</b>應(yīng)用構(gòu)建管理工具

    docker compose一鍵打包部署項(xiàng)目的實(shí)踐

    【導(dǎo)讀】本文介紹了 docker compose 一鍵打包部署項(xiàng)目的實(shí)踐。
    的頭像 發(fā)表于 08-30 11:03 ?1564次閱讀

    使用podman-compose部署wordpress的示例

    我們對(duì)于docker-compose并不陌生,它是一個(gè)用于編排多個(gè)可能相互依賴(lài)的容器的工具。
    的頭像 發(fā)表于 10-17 10:59 ?2742次閱讀

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

    本身是基于Erlang編寫(xiě)的,Erlang語(yǔ)言自然具有分布式特性(Magic通過(guò)同步Erlang集群每個(gè)節(jié)點(diǎn) 實(shí)現(xiàn)cookie)。 RabbitMQ部署,RabbitMQ安裝 (1)Erlang與
    的頭像 發(fā)表于 07-19 13:50 ?1036次閱讀

    使用Docker安裝WordPress教程

    本教程將向您展示如何使用 Docker ComposeDocker 容器中運(yùn)行 WordPress 安裝。
    的頭像 發(fā)表于 07-28 11:39 ?1554次閱讀
    使用<b class='flag-5'>Docker</b>安裝WordPress教程

    linux docker安裝部署

    Docker是一種開(kāi)源的容器化平臺(tái),可以幫助開(kāi)發(fā)者在不同的環(huán)境中快速構(gòu)建、測(cè)試和部署應(yīng)用程序。它能夠解決不同操作系統(tǒng)之間的兼容性問(wèn)題,簡(jiǎn)化了應(yīng)用程序的部署過(guò)程,并提供了高效的資源利用。本文將帶您詳細(xì)
    的頭像 發(fā)表于 11-23 09:27 ?1140次閱讀

    docker部署mysql的壞處

    Docker 是一種虛擬化技術(shù),它允許開(kāi)發(fā)人員在容器內(nèi)打包應(yīng)用程序及其所有依賴(lài)項(xiàng),從而實(shí)現(xiàn)在不同環(huán)境中運(yùn)行相同的應(yīng)用程序的能力。然而,在使用 Docker 部署 MySQL 時(shí),也存在一些潛在
    的頭像 發(fā)表于 11-23 09:29 ?1418次閱讀

    docker部署對(duì)性能的影響

    Docker 是一個(gè)流行的容器化平臺(tái),它提供了一種輕量級(jí)的虛擬化技術(shù),使得應(yīng)用程序可以在獨(dú)立的容器中運(yùn)行。然而,部署應(yīng)用程序到 Docker 容器中可能會(huì)對(duì)性能產(chǎn)生一些影響。在本文中,我們將探討
    的頭像 發(fā)表于 11-23 09:31 ?1591次閱讀

    docker核心組件有哪些

    Docker 是一種開(kāi)源的容器化平臺(tái),它能夠?qū)崿F(xiàn)將應(yīng)用程序及其依賴(lài)項(xiàng)打包到一個(gè)可移植的容器中,從而實(shí)現(xiàn)快速、可重復(fù)、可擴(kuò)展的部署和管理。Docker 的核心組件包括 Docker En
    的頭像 發(fā)表于 11-23 09:47 ?1953次閱讀

    如何利用樹(shù)莓派安裝DockerDocker-compose呢?

    本文主要演示了樹(shù)莓派如何安裝DockerDocker-compose的過(guò)程。
    的頭像 發(fā)表于 12-14 16:19 ?2903次閱讀
    如何利用樹(shù)莓派安裝<b class='flag-5'>Docker</b>和<b class='flag-5'>Docker-compose</b>呢?

    docker-compose配置文件內(nèi)容詳解以及常用命令介紹

    一、Docker Compose 簡(jiǎn)介 Docker Compose是一種用于定義和運(yùn)行多容器Docker應(yīng)用程序的工具。通過(guò)一個(gè)?
    的頭像 發(fā)表于 12-02 09:29 ?386次閱讀
    <b class='flag-5'>docker-compose</b>配置文件內(nèi)容詳解以及常用命令介紹