14.6.2. RabbitMQ
目录:
14.6.2.4. Plugins
Management Plugin <https://www.rabbitmq.com/management.html>
14.6.2.5. 参考链接
14.6.2.6. docker构建admin
Dockerfile:
FROM rabbitmq:3.12-management
# 设置 rabbitmqadmin 目录
WORKDIR /root/
# 安装 curl 和 wait-for-it 脚本(用于等待 15672 端口就绪)
RUN apt-get update && apt-get install -y curl netcat \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# 复制等待脚本
COPY wait-for-it.sh /usr/local/bin/wait-for-it
RUN chmod +x /usr/local/bin/wait-for-it
# 复制启动脚本
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# 覆盖默认 entrypoint
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["rabbitmq-server"]
docker-entrypoint.sh:
#!/usr/bin/env bash
set -e
# 启动 RabbitMQ 作为后台进程
rabbitmq-server &
# 记录 RabbitMQ 进程 ID
RABBITMQ_PID=$!
# 等待 RabbitMQ 管理界面启动
/usr/local/bin/wait-for-it localhost 15672 60
# 下载 rabbitmqadmin
curl -o /usr/local/bin/rabbitmqadmin http://localhost:15672/cli/rabbitmqadmin
chmod +x /usr/local/bin/rabbitmqadmin
# 等待 RabbitMQ 进程
wait "$RABBITMQ_PID"
docker-entrypoint.sh:
#!/usr/bin/env bash
set -e
# 启动 RabbitMQ 作为后台进程
rabbitmq-server &
# 记录 RabbitMQ 进程 ID
RABBITMQ_PID=$!
# 等待 RabbitMQ 管理界面启动
/usr/local/bin/wait-for-it localhost 15672 60
# 下载 rabbitmqadmin
curl -o /usr/local/bin/rabbitmqadmin http://localhost:15672/cli/rabbitmqadmin
chmod +x /usr/local/bin/rabbitmqadmin
# 等待 RabbitMQ 进程
wait "$RABBITMQ_PID"
chenjie@chenjie:~/work/docker/rabbitmqadmin$ cat wait-for-it.sh
#!/usr/bin/env bash
# 用于等待 RabbitMQ 管理界面端口就绪
HOST="$1"
PORT="$2"
TIMEOUT="${3:-30}" # 默认超时时间 30s
echo "Waiting for $HOST:$PORT to be available..."
for i in $(seq $TIMEOUT); do
if nc -z "$HOST" "$PORT"; then
echo "$HOST:$PORT is available!"
exit 0
fi
sleep 1
done
echo "Timeout waiting for $HOST:$PORT"
exit 1
docker build -t my-rabbitmq:latest .
docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 my-rabbitmq:latest
现在可以利用rabbitmqadmin来管理rabbitmq了。
前提要开启15672端口,默认是关闭的。
rabbitmqadmin --host=172.16.100.96 --port=15672 --username=xx --password=xx list queues
rabbitmqadmin --host=172.16.100.96 --port=5672 \
--username=xx --password=xx --vhost="/" \
declare queue name=xxx durable=true arguments='{"x-message-ttl":60000}'
如果想基于amqp去管理,只能老老实实的连接5672端口,然后去管理。