惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
T
The Exploit Database - CXSecurity.com
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
月光博客
月光博客
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
NISL@THU
NISL@THU
爱范儿
爱范儿
S
Securelist
博客园 - 叶小钗
C
CERT Recently Published Vulnerability Notes
Recorded Future
Recorded Future
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
D
DataBreaches.Net
G
GRAHAM CLULEY
P
Proofpoint News Feed
A
About on SuperTechFans
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
博客园 - 【当耐特】
H
Help Net Security
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss

CAYZLH

MacBook上备忘录APP的快捷键和手势 让Google屏蔽某些搜索结果 WSL自定义安装Ubuntu typora自动上传图片配置 自建giscus服务 Windows下结束指定端口的进程 批量修改maven多模块版本号 使用winsw部署SpringBoot项目 Gson简易指南 docker搭建Consul集群 使用Docker部署SpringBoot项目 Docker使用redis镜像 Docker使用zookeeper Docker使用MySQL Dockerfile常用指令 Docker免sudo操作 雷鸟电视去广告 使用ADB卸载MIUI系统应用 利用GitHub做图床 将网站变成灰色 Github上传大文件 Android远程调试命令adb vscode快捷键的使用 SpringBoot文件上传异常处理 SpringBoot封装JedisUtils工具类 SpringBoot自动部署脚本 使用Spring读取文件的几种方式 Spring统一异常返回 利用Github做Maven私服 Redis常用指令 Maven常用指令 使用mysqldump导出数据 SpringBoot动态切换多数据源 Java8的日期处理实践 lambda表达式语法 Stream表达式语法 使用Optional优雅地判空 Android Support vs AndroidX 「Vue」Runtime-Complier和Runtime-only的区别 RecyclerView使用记录 动态设置布局之LayoutInflater Redis分布式锁的几种方案 打造一个舒服的写作环境(Hexo) 深入了解与使用ThreadLocal Maven中dependencyManagement的作用 Redis配置认证密码 nginx简单配置示例 Linux(macOS)换源 Linux搭建Git服务器 Linux配置ssh使用公钥登录远程服务器 Linux下find与exec的使用 Linux排查Java问题工具单 Linux常用命令 MySql数据库优化细节 API签名验证方案 Java集合框架 Redis基础知识总结 Spring事务管理 Redis为什么这么快 SpringBoot实现Jwt单点登录 SpringBoot实现Redis分布式锁 Spring面向切面编程(知识梳理) SpringBoot异步请求和异步调用 Mybatis中用到的几种设计模式 Docker Swarm RocketMQ相关流程图/原理图 SonarQube的安装与使用 宝塔面板部署vue项目 Tomcat的三种接收请求处理方式 Docker知识扫盲 安装Jenkins并用于部署SpringBoot项目 Tomcat单机多实例部署 Maven中Scope的分类 Springboot集成Shiro(前后端分离) Linux搭建frp服务(内网穿透) Redis高逼格指令 Docker私有仓库的搭建与使用 Dockerfile使用介绍 Redis的使用场景 Docker的网络模式
Docker使用rabbitmq
Ant丶 · 2023-01-10 · via CAYZLH

什么是RabbitMQ?

RabbitMQ是开源消息代理软件(有时称为面向消息的中间件),它实现了高级消息队列协议(AMQP)。RabbitMQ服务器采用Erlang编程语言编写,构建于Open Telecom Platform框架之上,用于集群和故障转移。与代理接口的客户端库可用于所有主要编程语言。

如何在Docker使用RabbitMQ镜像

运行守护进程

关于RabbitMQ的一个重要注意事项是它根据所谓的“节点名称”存储数据,默认为主机名。这对于在Docker中的使用意味着我们应该为每个守护进程指定-h/ --hostnameexplicit,这样我们就不会获得随机主机名并且可以跟踪我们的数据:

$ 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_WATERMARK40%)将设置有效限制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:8080http://host-ip:8080在浏览器中。

环境变量

Dockerfile中定义了一小部分可能的环境变量,这些变量将通过docker引擎传递(如下所示)。有关RabbitMQ本身支持的环境变量列表,请参阅:https//www.rabbitmq.com/configure.html

对于没有管理插件的SSL配置:

RABBITMQ_SSL_CACERTFILE
RABBITMQ_SSL_CERTFILE
RABBITMQ_SSL_DEPTH
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_SSL_KEYFILE
RABBITMQ_SSL_VERIFY

对于使用管理插件的SSL配置:

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_USERRABBITMQ_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:8080http://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_COMPILEset 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 ConfigsDockerfile带有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_maxauth_backends看起来像-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit channel_max 4007 auth_backends [rabbit_auth_backend_ldap,rabbit_auth_backend_internal]"。请注意,某些变量(例如for)auth_backends要求将其值括在括号中,并将多个值明确地包括在逗号中作为分隔符。

连接到守护进程

$ docker run --name some-app --link some-rabbit:rabbit \
-d application-that-uses-rabbitmq

spring cloud bus中使用

拉取rabbitmq镜像

执行以下命令,拉取latest版官方镜像:

docker pull rabbitmq:management

使用带管理界面的镜像。

docker-rabbitmq

使用镜像

执行以下命令,使用镜像:

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登录之后看到如下界面,说明镜像已经运行。

docker-rabbitmq

参考