rabbitmq-stomp

This commit is contained in:
wandoubaba 2024-07-23 12:19:43 +08:00
parent 568dd0e03a
commit 7aeb9042fb

View File

@ -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
<https://git.wandoubaba.com/wandoubaba/docker-rabbitmq>
```sh
git clone git@git.wandoubaba.com:wandoubaba/docker-rabbitmq.git
cd docker-rabbitmq
# 先在conf/conf.d/10-defaults.conf文件中设置首次启动创建的默认用户名和密码
# 然后再执行启动脚本
./start
```