Docker使用rabbitmq
什么是RabbitMQ?
RabbitMQ是开源消息代理软件(有时称为面向消息的中间件),它实现了高级消息队列协议(AMQP)。RabbitMQ服务器采用Erlang编程语言编写,构建于Open Telecom Platform框架之上,用于集群和故障转移。与代理接口的客户端库可用于所有主要编程语言。
如何在Docker使用RabbitMQ镜像
运行守护进程
关于RabbitMQ的一个重要注意事项是它根据所谓的“节点名称”存储数据,默认为主机名。这对于在Docker中的使用意味着我们应该为每个守护进程指定-h
/ --hostname
explicit,这样我们就不会获得随机主机名并且可以跟踪我们的数据:
$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3
这将启动一个侦听默认端口5672的RabbitMQ容器。如果你给它一分钟,那么docker logs some-rabbit
你会在输出中看到类似于的块:
=INFO REPORT==== 6-Jul-2015::20:47:02 ===
node : rabbit@my-rabbit
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.config
cookie hash : UoNOcDhfxW9uoZ92wh6BjA==
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia/rabbit@my-rabbit
请注意database dir
那里,特别是它的“节点名称”附加到文件存储的末尾。/var/lib/rabbitmq
默认情况下,此图像会生成所有卷。
内存限制
RabbitMQ包含明确跟踪和管理内存使用的功能,因此需要了解cgroup强加的限制。
上游配置设置为vm_memory_high_watermark
,文档中的“Memory Alarms”中对此进行了描述。
在此图像中,此值通过设置RABBITMQ_VM_MEMORY_HIGH_WATERMARK
。此环境变量的值解释如下:
0.49
被视为49%
,就像上游({ vm_memory_high_watermark, 0.49 }
)56%
被视为56%
(0.56
;{ vm_memory_high_watermark, 0.56 }
)1073741824
被视为绝对字节数({ vm_memory_high_watermark, { absolute, 1073741824 } }
)1024MiB
被视为具有unit({ vm_memory_high_watermark, { absolute, "1024MiB" } }
)的绝对字节数
主要的行为差异在于如何处理百分比。如果当前容器具有内存限制(--memory
/ -m
),则将根据内存限制将百分比值计算为绝对字节值,而不是按原样传递给RabbitMQ。例如,对于一个容器运行--memory 2048m
(以及隐含的上游默认RABBITMQ_VM_MEMORY_HIGH_WATERMARK
的40%
)将设置有效限制819MB
(这是40%
的2048MB
)。
管理插件
默认情况下安装并启用了管理插件提供的第二组标签,可在标准管理端口15672上使用,默认用户名和密码为guest
/ guest
:
$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3-management
您可以通过http://container-ip:15672
浏览器访问它,或者如果您需要在主机外部访问,请访问端口8080:
$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672
rabbitmq:3-management
然后,您可以转到http://localhost:8080
或http://host-ip:8080
在浏览器中。
环境变量
Dockerfile中定义了一小部分可能的环境变量,这些变量将通过docker引擎传递(如下所示)。有关RabbitMQ本身支持的环境变量列表,请参阅:https://www.rabbitmq.com/configure.html
对于没有管理插件的SSL配置:
代码语言:javascript复制RABBITMQ_SSL_CACERTFILE
RABBITMQ_SSL_CERTFILE
RABBITMQ_SSL_DEPTH
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_SSL_KEYFILE
RABBITMQ_SSL_VERIFY
对于使用管理插件的SSL配置:
代码语言:javascript复制RABBITMQ_MANAGEMENT_SSL_CACERTFILE
RABBITMQ_MANAGEMENT_SSL_CERTFILE
RABBITMQ_MANAGEMENT_SSL_DEPTH
RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_MANAGEMENT_SSL_KEYFILE
RABBITMQ_MANAGEMENT_SSL_VERIFY
设置默认用户和密码
如果你想改变默认的用户名和密码guest
/ guest
,你可以用这样做RABBITMQ_DEFAULT_USER
和RABBITMQ_DEFAULT_PASS
环境变量:
$ docker run -d --hostname my-rabbit --name some-rabbit
-e RABBITMQ_DEFAULT_USER=user
-e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management
然后,您可以转到http://localhost:8080
或http://host-ip:8080
在浏览器中使用user
/ password
来访问管理控制台
要从文件而不是环境变量中获取用户名和密码_FILE
,请在环境变量名称中添加后缀(例如,RABBITMQ_DEFAULT_USER_FILE=/run/secrets/xxx
使用Docker Secrets)。
设置默认vhost
如果要更改默认vhost,可以使用RABBITMQ_DEFAULT_VHOST
环境变量:
$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost rabbitmq:3-management
启用HiPE
有关各种配置选项的更多信息,请参见RabbitMQ“配置”。
要在启动时启用HiPE编译器,请使用RABBITMQ_HIPE_COMPILE
set to 1
。根据官方文件:
设置为true以使用HiPE预编译RabbitMQ的部分,HiPE是Erlang的即时编译器。这将以增加启动时间为代价来增加服务器吞吐量。您可能会在启动时延迟几分钟后看到20-50%的性能提升。
因此,在配置运行状况检查,自动群集等时考虑启动延迟非常重要。
启用插件
例 enabled_plugins
[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].
附加配置
如果需要其他配置,建议提供适当的/etc/rabbitmq/rabbitmq.conf
文件(有关详细信息,请参阅RabbitMQ文档的“配置文件”部分),例如通过bind-mount,Docker Configs或Dockerfile
带有COPY
指令的short 。
或者,可以使用RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS
环境变量,其语法在Erlang OTP设计原则用户指南的7.8节(“配置应用程序”)中描述(-ApplName
is 的适当值-rabbit
),此方法需要稍微不同的再现相当于rabbitmq.conf
。例如,配置channel_max
看起来像-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007"
。变量channel_max
与其值之间的空间在4007
环境中翻译时正确变为逗号的位置。
其他配置键将被指定为列表。例如,配置两者channel_max
并auth_backends
看起来像-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007 auth_backends [rabbit_auth_backend_ldap,rabbit_auth_backend_internal]"
。请注意,某些变量(例如for)auth_backends
要求将其值括在括号中,并将多个值明确地包括在逗号中作为分隔符。
连接到守护进程
代码语言:javascript复制$ docker run --name some-app --link some-rabbit:rabbit
-d application-that-uses-rabbitmq
spring cloud bus中使用
拉取rabbitmq镜像
执行以下命令,拉取latest
版官方镜像:
docker pull rabbitmq:management
使用带管理界面的镜像。
使用镜像
执行以下命令,使用镜像:
代码语言:javascript复制docker run -d --name rabbitmq --publish 5671:5671
--publish 5672:5672 --publish 4369:4369
--publish 25672:25672 --publish 15671:15671 --publish 15672:15672
rabbitmq:management
启动之后访问http://localhost:15672/能够看到Web
管理界面,使用guest / guest登录之后看到如下界面,说明镜像已经运行。
参考
- rabbitmq
- https://blog.cayzlh.com/2019/01/01/2019010101/
分享计划
博客内容将同步至腾讯云 社区,邀请大家一同入驻:https://cloud.tencent.com/
许可协议
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 许可协议,转载请注明出处。