From 7aeb9042fb563a09bb5325f7881617edae603302 Mon Sep 17 00:00:00 2001 From: wandoubaba Date: Tue, 23 Jul 2024 12:19:43 +0800 Subject: [PATCH] rabbitmq-stomp --- docs/docker/rabbitmq-stomp.md | 135 ++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 62 deletions(-) diff --git a/docs/docker/rabbitmq-stomp.md b/docs/docker/rabbitmq-stomp.md index f9b1d0c..e7f2133 100644 --- a/docs/docker/rabbitmq-stomp.md +++ b/docs/docker/rabbitmq-stomp.md @@ -1,83 +1,94 @@ -# docker部署rabbitmq,启用stomp,并安装rabbitmq_delayed_message_exchange插件 +# 构建多平台rabbitmq镜像,启用stomp和延时队列(rabbitmq_delayed_message_exchange插件) -## 操作 +## Dockerfile文件 -### 下载延时队列插件 +```dockerfile +# 使用 RabbitMQ 3.13.4 管理镜像作为基础镜像 +FROM rabbitmq:3.13.4-management -针对rabbitmq3.12.x +# 设置工作目录 +WORKDIR / -```bash -wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/v3.12.0/rabbitmq_delayed_message_exchange-3.12.0.ez +# 将本地的插件文件复制到容器内 +COPY rabbitmq_delayed_message_exchange-3.13.0.ez . + +# 启用插件 +RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange rabbitmq_stomp rabbitmq_web_stomp rabbitmq_web_stomp_examples + +# 持久化数据目录 +VOLUME ["/var/lib/rabbitmq/mnesia"] + +# 将容器的启动命令更改为默认命令 +CMD ["rabbitmq-server"] ``` -针对rabbitmq3.11.x +> 在`替换源`那一段中,你应该把其中的源地址替换成你的主机可以快速访问的源地址,不建议直接使用本文的源。 -```bash -wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.11.1/rabbitmq_delayed_message_exchange-3.11.1.ez +## 用`docker buildx`构建 + +将上面的Dockerfile脚本直接保存为`Dockerfile`文件。 + +### 检查`docker buildx`环境 + +```sh +docker info ``` -针对rabbitmq3.10.x +执行以上命令可以看到类似下面的信息: -```bash -wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.10.2/rabbitmq_delayed_message_exchange-3.10.2.ez +```txt +Client: Docker Engine - Community + Version: 27.0.3 + Context: default + Debug Mode: false + Plugins: + buildx: Docker Buildx (Docker Inc.) + Version: v0.15.1 + Path: /usr/libexec/docker/cli-plugins/docker-buildx + compose: Docker Compose (Docker Inc.) + Version: v2.28.1 + Path: /usr/libexec/docker/cli-plugins/docker-compose +... ``` -针对rabbitmq3.9.x +一般情况下,如果是通过包管理器安装的docker engine或者docker desktop的话,默认就已经安装好了buildx和compose插件了。 -```bash -wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez +### 跨平台构建并发布 + +接下来,我们的目标是用上面的Dockerfile构建跨平台的`rabbitmq:3.13.4`镜像并直接推送到`quay.io`平台上: + +(本文中我的quay.io账号是wandoubaba517,你要替换成你自己的账号。) + +```sh +docker login quay.io +docker buildx create --use +docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64 --push -t quay.io/wandoubaba517/rabbitmq:3.13.4 . ``` -### 安装rabbitmq +执行上面的命令,执行过程中会自动从docker hub上拉取名为`moby/buildkit:buildx-stable-1`的镜像并启动容器开始自动构建和推送,整个过程在我的2核4G服务器上会执行数小时,可以使用`tmux`等终端工具异步执行。 -> 以3.12为例 +## 使用镜像 -```bash -# 拉取镜像并启动容器 -docker run -d -v `pwd`/mnesia:/var/lib/rabbitmq/mnesia --hostname rabbitmq --name rabbitmq rabbitmq:3.12-management +```sh +docker run -d \ + -p 5672:5672 \ + -p 15672:15672 \ + -p 61613:61613 \ + -v ./data:/var/lib/rabbitmq/mnesia \ + -v ./conf/conf.d:/etc/rabbitmq/conf.d \ + --hostname rabbitmq \ + --name rabbitmq \ + quay.io/wandoubaba517/rabbitmq:3.13.4 ``` -### 安装并启用插件 +## 工程示例 -```bash -# 将延时队列插件拷贝至容器(以3.11为例) -docker cp rabbitmq_delayed_message_exchange-3.12.0.ez rabbitmq:/plugins -# 进入容器 -docker exec -it rabbitmq /bin/bash -# 查看插件 -rabbitmq-plugins list -# 列表里会出现rabbitmq_delayed_message_exchange和rabbitmq_web_stomp和rabbitmq_web_stomp_examples -# 启用延时队列插件 -rabbitmq-plugins enable rabbitmq_delayed_message_exchange -# 开启stomp插件 -rabbitmq-plugins enable rabbitmq_stomp rabbitmq_web_stomp rabbitmq_web_stomp_examples -# 要以再查看插件,确认启用的插件都生效了 -rabbitmq-plugins list -# 退出容器 -exit -# 将启用了插件的容器提交为新镜像 -docker commit rabbitmq rabbitmq:stomp-delay -# 停止并删除原容器 -docker rm -f rabbitmq -``` - -### 用新的命令重新启用新的容器 - -```bash -docker run -d -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 61613:61613 -v `pwd`/mnesia:/var/lib/rabbitmq/mnesia --hostname rabbitmq --name rabbitmq rabbitmq:stomp-delay -``` - -### 检验 - -用浏览器打开`http://host:15672`: - -- 能打开管理界面,说明management插件已经生效。 -- 默认账号密码都是guest。 -- 在Overview界面的Ports and contexts列表中可以看到stomp端口和web-stomp端口,说明stomp插件和web-stomp插件已经生效。 -- 在Exchanges界面的Add a new exchange列表中,看到Type中出现x-delayed-message,说明delayed_message_exchange插件已经生效。 - -### 容器开机自启 - -```bash -docker update --restart=always rabbitmq + + +```sh +git clone git@git.wandoubaba.com:wandoubaba/docker-rabbitmq.git +cd docker-rabbitmq +# 先在conf/conf.d/10-defaults.conf文件中设置首次启动创建的默认用户名和密码 +# 然后再执行启动脚本 +./start ```