背景
RabbitMQ 默认不含有 delayed_message_exchange 模块,需要下载并启用,同时部署到 KS 集群。
Dockerfile 基础镜像
由于 KS 应用商店中有 RabbitMQ 应用,可以稍微修改并使用。主要修改的就是基础镜像,使其含有 delayed_message_exchange 模块。
- 从 Github下载 delayed_message_exchange 模块,具体版本根据自己的需求进行下载即可。
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/tag/v3.8.0
- 下载完后,创建 Dockerfile 文件并输入下列内容。
FROM rabbitmq:3.8.1-alpine
# 使用 3.8.1-alpine 的版本,根据自己的需要进行调整。
ADD rabbitmq_delayed_message_exchange-3.8.0.ez /opt/rabbitmq/plugins
# 复制rabbitmq_delayed_message_exchange插件到plugins目录下。
RUN rabbitmq-plugins enable rabbitmq_delayed_message_exchange
# 启用rabbitmq_delayed_message_exchange插件
WORKDIR /opt/rabbitmq
- 构建镜像
docker build -t rabbitmq:3.8.1-alpine-delayed-message .
- 推送到自己的镜像仓库
KS 上部署 RabbitMQ
在KS的应用商店里找到MQ,然后通过YAML进行编辑,具体配置如下:
image:
rabbitmq:
repository: registry-vpc.cn-hangzhou.aliyuncs.com/mq_basic/rabbitmq
tag: 3.8.1-alpine-delayed-message
pullPolicy: IfNotPresent
imagePullSecrets:
- name: docker-repo-secret
nameOverride: ''
fullnameOverride: ''
persistence:
size: 5Gi
extraPlugins:
- rabbitmq_delayed_message_exchange
extraConfigurations: |-
## Number of Erlang processes that will accept connections for the TCP
## and TLS listeners.
##
# num_acceptors.tcp = 10
# num_acceptors.ssl = 10
advancedConfigurations: |-
[
{rabbitmq_auth_backend_ldap, [
%% Authorisation
]}
].
defaultUsername: bmp
defaultPassword: bmpmqtest@123
service:
type: ClusterIP
resources:
limits:
memory: 256Mi
requests:
memory: 256Mi
nodeSelector: {}
tolerations: []
affinity: {}
其中的镜像地址采用上面Dockerfile打出来的基础镜像,其中包含了rabbitmq_delayed_message_exchange插件,并且在YAML里也指定了启动该插件。
部署完成后,登录 RabbitMQ 控制台,确认 Exchanges 中含有 x-delayed-message 类型。

image.png
也可以在 Pod 中执行下列命令进行查看:
rabbitmqctl list_exchanges