管理插件
介绍
RabbitMQ管理插件提供基于HTTP的API,用于管理和监控RabbitMQ节点和集群,以及基于浏览器的UI和命令行工具rabbitmqadmin。
它定期收集和汇总有关系统许多方面的数据。这些指标在UI和监控系统中都向操作员公开,用于长期存储,警报,可视化,图表分析等。
该插件可以配置为使用HTTPS,非标准端口,路径前缀,HTTP服务器选项,自定义严格传输安全设置, 跨源资源共享等。
它还提供了分析节点内存使用情况的工具,使用导出的模式定义文件预配置节点,以及与监视,度量和节点管理相关的一些其他功能。
在多节点群集中,管理插件最常在每个节点上启用。
该插件还提供了其他插件的扩展点,例如 rabbitmq-top或 rabbitmq-shovel-management 用于扩展UI。
入门
管理插件包含在RabbitMQ发行版中。与任何其他插件一样,必须先启用它,然后才能使用它。这是使用rabbitmq-plugins完成的:
rabbitmq-plugins enable rabbitmq_management
插件激活后不需要重新启动节点。
在自动部署期间,可以通过 启用的插件文件启用插件。
用法
管理UI访问
可以使用Web浏览器访问管理UI :http:// {node-hostname}:15672 /。例如,对于在主机名为warp10.local的计算机上运行的节点,可以在http://warp10.local:15672 / 或http:// localhost:15672 /访问它(假设localhost正确解析) 。
请注意,UI和HTTP API端口(通常为15672)不支持AMQP 0-9-1,AMQP 1.0,STOMP或MQTT连接。 这些客户端应使用单独的端口。
必须为用户授予管理UI访问权限。
显着特点
管理UI实现为依赖于HTTP API的单页面应用程序。一些功能包括:
- 声明,列出和删除交换,队列,绑定,用户,虚拟主机和用户权限。
- 监视队列长度,消息速率(全局和每个队列,交换或通道),队列的资源使用情况,节点GC活动,客户端连接的数据速率等。
- 监视节点资源使用:套接字和文件描述符, 内存使用情况细分,可用磁盘空间和节点间通信链路上的带宽使用情况。
- 管理用户(提供当前用户的管理权限)。
- 管理策略和运行时参数(提供当前用户的足够权限)。
- 导出模式(虚拟主机,用户,权限,队列,交换,绑定,参数,策略)并在节点启动时导入它。这可用于恢复目的或设置新节点和群集的自动化。
- 强制关闭客户端连接,清除队列。
- 发送和接收消息(在开发环境和故障排除中很有用)。
UI应用程序支持最新版本的Google Chrome Safari,Firefox和Microsoft Edge浏览器。
集群中的管理UI访问
任何启用了rabbitmq-management插件的集群节点都可以通过监视工具用于管理UI访问或数据收集。它将联系其他节点并收集其统计信息,然后聚合并向客户端返回响应。
要访问管理UI,用户必须进行身份验证并具有某些权限(被授权)。这将在以下部分中介绍。
访问权限和权限
管理UI需要身份验证和授权,就像RabbitMQ需要连接客户端一样。除了成功的身份验证之外,管理UI访问还受用户标记控制。标签使用rabbitmqctl进行管理。默认情况下,新创建的用户没有设置任何标记。
标签 | 功能 |
---|---|
(没有) | 无权访问管理插件 |
管理 | 用户可以通过消息传递协议做的任何事情:
|
政策制定者 | 一切“管理”都可以加:
|
监控 | 一切“管理”都可以加:
|
管理员 | 一切“决策者”和“监督”都可以加:
|
请注意,由于“管理员”执行“监视”所做的一切,而“监视”执行“管理”所做的一切,每个用户通常最多需要一个标记。
正常的RabbitMQ 资源权限仍然适用于监视器和管理员; 仅仅因为用户是监视器或管理员不通过管理插件或其他方式授予他们对交换,队列和绑定的完全访问权限。
所有用户只能列出他们拥有任何权限的虚拟主机中的对象。
如果由于缺少具有足够权限或忘记/不正确权限的用户而无法访问管理UI,则必须使用CLI工具来管理用户及其凭据。 应使用rabbitmqctl add_user创建用户,rabbitmqctl set_permissions以授予用户所需的权限,最后,应使用rabbitmqctl set_user_tags为用户提供管理UI访问权限。
HTTP API
API端点
激活后,管理插件默认情况下在http:// server-name:15672 / api /提供HTTP API 。浏览到该位置以获取有关API的更多信息。为方便起见 ,GitHub提供了相同的API参考 。
HTTP API和监控
该API旨在用于监视和警报目的。它提供对节点,连接,通道,队列,消费者等状态的详细信息的访问。
任何启用了rabbitmq-management插件的集群节点都可以通过监视工具用于管理UI访问或数据收集。它将联系其他节点并收集其统计信息,然后聚合并向客户端返回响应。
监视节点集群时,无需单独通过HTTP API联系每个节点。而是联系位于群集前面的随机节点或负载平衡器。
HTTP API客户端和工具
rabbitmqadmin是一个与HTTP API交互的Python命令行工具。它可以从任何启用了http:// {node-hostname}:15672 / cli /的管理插件的RabbitMQ节点下载。
对于多种语言的HTTP API客户端,请参阅开发人员工具。
一些API端点返回大量信息。通过过滤`HTTP GET`请求返回的列,可以减少卷。有关详细信息, 请参阅最新HTTP API文档
配置
有几个配置选项会影响管理插件。这些是通过主RabbitMQ 配置文件管理的。
可以配置HTTP API和管理UI以使用不同的端口或网络接口,启用HTTPS等。
虽然很少需要,但可以配置多个侦听器(端口),例如,既启用HTTPS又保留对只能使用HTTP(不使用TLS)的客户端的支持。这使用一组备用配置键,从RabbitMQ 3.7.9开始提供。
端口
使用management.listener.port键配置端口:
management.listener.port = 15672
或者,使用经典配置格式:
[
{rabbitmq_management, [{listener, [{port, 15672}]}]},
].
HTTPS
管理插件可以配置为使用HTTPS。 有关证书颁发机构,证书和私钥文件的详细信息,请参阅TLS指南。
management.ssl.port = 15671
management.ssl.cacertfile = /path/to/ca_certificate.pem
management.ssl.certfile = /path/to/server_certificate.pem
management.ssl.keyfile = /path/to/server_key.pem
也可以使用经典配置格式配置HTTP侦听器:
[{rabbitmq_management,
[{listener, [{port, 15671},
{ssl, true},
{ssl_opts, [{cacertfile, "/path/to/ca_certificate.pem"},
{certfile, "/path/to/server_certificate.pem"},
{keyfile, "/path/to/server_key.pem"}]}
]}
]}
].
可以为HTTPS侦听器配置 更多TLS选项。在新式配置格式中,它们从RabbitMQ 3.7.10开始提供:
management.ssl.port = 15671
management.ssl.cacertfile = /path/to/ca_certificate.pem
management.ssl.certfile = /path/to/server_certificate.pem
management.ssl.keyfile = /path/to/server_key.pem
# For RabbitMQ 3.7.10 and later versions
management.ssl.honor_cipher_order = true
management.ssl.honor_ecc_order = true
management.ssl.client_renegotiation = false
management.ssl.secure_renegotiate = true
management.ssl.versions.1 = tlsv1.2
management.ssl.versions.2 = tlsv1.1
management.ssl.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384
management.ssl.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384
management.ssl.ciphers.3 = ECDHE-ECDSA-AES256-SHA384
management.ssl.ciphers.4 = ECDHE-RSA-AES256-SHA384
management.ssl.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384
management.ssl.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384
management.ssl.ciphers.7 = ECDH-ECDSA-AES256-SHA384
management.ssl.ciphers.8 = ECDH-RSA-AES256-SHA384
management.ssl.ciphers.9 = DHE-RSA-AES256-GCM-SHA384
以上经典配置格式的示例:
[
{rabbitmq_management,
[
{listener, [{port, 15671},
{ssl, true},
{ssl_opts, [{cacertfile, "/path/to/ca_certificate.pem"},
{certfile, "/path/to/server_certificate.pem"},
{keyfile, "/path/to/server_key.pem"},
%% don't do peer verification to HTTPS clients
{verify, verify_none},
{fail_if_no_peer_cert, false},
{client_renegotiation, false},
{secure_renegotiate, true},
{honor_ecc_order, true},
{honor_cipher_order, true},
{versions,['tlsv1.1', 'tlsv1.2']},
{ciphers, ["ECDHE-ECDSA-AES256-GCM-SHA384",
"ECDHE-RSA-AES256-GCM-SHA384",
"ECDHE-ECDSA-AES256-SHA384",
"ECDHE-RSA-AES256-SHA384",
"ECDH-ECDSA-AES256-GCM-SHA384",
"ECDH-RSA-AES256-GCM-SHA384",
"ECDH-ECDSA-AES256-SHA384",
"ECDH-RSA-AES256-SHA384",
"DHE-RSA-AES256-GCM-SHA384"
]}
]}
]}
]}
].
一起使用HTTP和HTTPS
从RabbitMQ 3.7.9开始,可以在不同的端口上使用HTTP和HTTPS:
management.tcp.port = 15672
management.ssl.port = 15671
management.ssl.cacertfile = /path/to/ca_certificate.pem
management.ssl.certfile = /path/to/server_certificate.pem
management.ssl.keyfile = /path/to/server_key.pem
可以使用相同的配置键来配置单个侦听器(仅HTTP或HTTPS),并匹配Web STOMP和Web MQTT使用的侦听器。
高级HTTP选项
Cowboy是管理插件使用的嵌入式Web服务器,它提供了许多可用于自定义服务器行为的选项。大多数选项都是在RabbitMQ 3.7.9中引入的。
响应压缩
默认情况下启用响应压缩。要显式启用它,请使用management.tcp.compress (RabbitMQ 3.7.9或更高版本)或management.listener.server.compress:
# For RabbitMQ 3.7.9 and later versions
management.tcp.compress = true
# For versions older than 3.7.9
management.listener.server.compress = true
使用经典配置格式:
%% For RabbitMQ 3.7.9 and later versions
[{rabbitmq_management,
[{tcp_config, [{port, 15672},
{cowboy_opts, [{compress, true}]}
]}
]}
].
客户端不活动超时
一些HTTP API端点可以快速响应请求,但是其他HTTP端点可能需要将大型数据集返回或流式传输到客户端(例如,数千个连接)或执行与输入成比例的时间操作(例如,导入大型定义文件)。在这些情况下,处理请求所花费的时间可能超过Web服务器和HTTP客户端中的某些超时。可以使用management.tcp.idle_timeout, management.tcp.inactivity_timeout,management.tcp.request_timeout选项来阻止Cowboy超时:
# For RabbitMQ 3.7.9 and later versions.
#
# Configures HTTP (non-encrypted) listener,
# sets all types of timeouts to 120 seconds
management.tcp.idle_timeout = 120000
management.tcp.inactivity_timeout = 120000
management.tcp.request_timeout = 120000
# For RabbitMQ 3.7.9 and later versions.
#
# Configures HTTPS (TLS-enabled) listener,
# sets all types of timeouts to 120 seconds
management.ssl.idle_timeout = 120000
management.ssl.inactivity_timeout = 120000
management.ssl.request_timeout = 120000
在经典的配置格式中:
%% For RabbitMQ 3.7.9 and later versions.
%%
%% Configures HTTP (non-encrypted) listener,
%% sets all types of timeouts to 120 seconds
[{rabbitmq_management,
[{tcp_config, [{port, 15672},
{cowboy_opts, [{idle_timeout, 120000},
{inactivity_timeout,120000},
{request_timeout, 120000}]}
]}
]}
].
%% For RabbitMQ 3.7.9 and later versions.
%%
%% Configures HTTPS (TLS-enabled) listener,
%% sets all types of timeouts to 120 seconds
[{rabbitmq_management,
[{ssl_config, [{port, 15672},
{cowboy_opts, [{idle_timeout, 120000},
{inactivity_timeout,120000},
{request_timeout, 120000}]}
]}
]}
].
所有值均以毫秒为单位,默认为“60000”(1分钟)。如果需要更改超时,建议同时增加所有超时。
HTTP请求记录
要创建对HTTP API的请求的简单访问日志,请将rabbitmq_management应用程序中的http_log_dir变量的值设置为可以在其中创建日志的目录的名称,然后重新启动RabbitMQ。
management.http_log_dir = /path/to/folder
或者使用经典的配置格式:
[
{rabbitmq_management, [{http_log_dir, "/path/to/folder"}]}
].
统计间隔
默认情况下,服务器将每隔5000毫秒发出一次统计事件。管理插件中显示的消息速率值是在此期间计算的。因此,您可能希望增加此值以便在较长时间内采样率,或者减少具有大量队列或通道的服务器上的统计信息负载。
为了做到这一点,以毫秒为单位设置collect_statistics_interval的值 作为收集应用数据的时间间隔,并重新启动的RabbitMQ。
消息率
默认情况下,管理插件会全局显示消息速率,并显示每个队列,通道,交换和虚拟主机的消息速率。这些被称为基本消息速率。
它还可以显示要交换的通道,交换到队列和队列到通道的所有组合的消息速率。这些被称为详细的消息率。默认情况下禁用详细的消息速率,因为当存在大量通道,队列和交换的组合时,它们可能具有大的内存占用。
或者,可以完全禁用消息速率。这有助于从CPU绑定服务器中获得最佳性能。
消息速率模式由 rabbitmq_management中的rates_mode配置变量 控制。This can be one of basic (the default), detailed or none.
事件积压
在负载较重的情况下,统计事件的处理会增加内存消耗。为了减少这种情况,可以调整通道和队列统计信息收集器的最大积压大小。rabbitmq_management应用程序中stats_event_max_backlog变量的值 设置两个积压的最大大小。默认为250。
样本(数据点)保留
管理插件将保留一些数据的样本,例如消息速率和队列长度。根据数据的保留时间,UI图表上的某些时间范围选项可能不完整或不可用。
有三个政策:
- global:保留概述和虚拟主机页面的数据的时间
- 基本:为各个连接,通道,交换和队列保留数据的时间
- 详细信息:保留连接,通道,交换和队列对之间的消息速率数据的时间长度(如“消息速率分解”中所示)
以下是配置示例:
management.sample_retention_policies.global.minute = 5
management.sample_retention_policies.global.hour = 60
management.sample_retention_policies.global.day = 1200
management.sample_retention_policies.basic.minute = 5
management.sample_retention_policies.basic.hour = 60
management.sample_retention_policies.detailed.10 = 5
上述示例中的配置以5秒的分辨率(每5秒采样一次)保留全局数据,然后以1分钟(60秒)的分辨率保持1小时,然后以20分钟的分辨率保留一天。它以5秒的分辨率保留基本数据1分钟,1分钟(60秒)分辨率保持1小时,详细数据仅保留10秒。
这三项政策都是强制性的,必须至少包含一项保留设置(期间)。
内容安全政策(CSP)
可以配置HTTP API响应使用的CSP标头值。默认值为default-src 'self':
management.csp.policy = default-src 'self'
该值可以是任何有效的CSP头字符串:
management.csp.policy = default-src https://rabbitmq.eng.example.local
在经典的配置格式中:
{rabbitmq_management, [
{content_security_policy,
"management.csp.policy = default-src https://rabbitmq.eng.example.local"}
]}.
通配符也是允许的:
management.csp.policy = default-src 'self' *.eng.example.local
在经典的配置格式中:
{rabbitmq_management, [
{content_security_policy,
"management.csp.policy = default-src 'self' *.eng.example.local"}
]}.
严格的运输安全(HSTS)
可以配置HTTP API响应使用的Strict Transport Security标头值:
management.hsts.policy = max-age=31536000; includeSubDomains
在经典的配置格式中:
rabbitmq_management, [
{strict_transport_security, "max-age=31536000; includeSubDomains"}
]}.
跨域资源共享(CORS)
默认情况下,管理UI应用程序将使用跨源资源共享机制(也称为CORS)拒绝访问托管在与自己不同的源上的网站。白名单来源可能是:
management.cors.allow_origins.1 = https://origin1.org
management.cors.allow_origins.2 = https://origin2.org
在经典的配置格式中:
[
{rabbitmq_management,
[{cors_allow_origins, ["https://origin1.org", "https://origin2.org"]}]},
].
可以允许任何源使用通配符来使用API。这是非常鼓励的部署中的UI应用程序可被公开曝光。
management.cors.allow_origins.1 = *
在经典的配置格式中:
[
{rabbitmq_management,
[{cors_allow_origins, ["*"]}]},
].
CORS请求由浏览器缓存。管理插件默认定义超时30分钟。值可以是更改。它在几秒钟内配置:
management.cors.allow_origins.1 = https://origin1.org
management.cors.allow_origins.2 = https://origin2.org
management.cors.max_age = 3600
在经典的配置格式中:
[
{rabbitmq_management,
[{cors_allow_origins, ["https://origin1.org", "https://origin2.org"]},
{cors_max_age, 3600}]},
].
登录会话超时
用户登录后,默认情况下,她的Web UI登录会话将在8小时后过期。可以使用login_session_timeout设置配置不同的超时 。
该值应为整数:它以分钟为单位控制登录会话的长度。当时间到了,用户将退出。
以下示例将会话超时设置为1小时:
management.login_session_timeout = 60
或者,使用经典配置格式:
[
%% ...
{rabbitmq_management,
[{login_session_timeout, 60}]},
%% ...
].
路径前缀
某些环境要求对管理插件的所有HTTP请求使用自定义前缀。该 串流中设置允许的任意的前缀来在管理插件的所有HTTP请求处理程序来设定。
将path_prefix设置为/ my-prefix 指定使用URI 主机的所有API请求 :port / my-prefix / api / [...]
管理UI登录页面将具有URI host:port / my-prefix / - 请注意,在这种情况下需要使用尾部斜杠。
[
%% ...
{rabbitmq_management,
[{path_prefix, "/my-prefix"}]},
%% ...
].
例
RabbitMQ的一个示例配置文件,用于打开请求日志记录,将统计间隔增加到10秒,并将其他一些相关参数显式设置为默认值,如下所示:
listeners.tcp.default = 5672
collect_statistics_interval = 10000
# management.load_definitions = /path/to/exported/definitions.json
management.listener.port = 15672
management.listener.ip = 0.0.0.0
management.listener.ssl = true
management.listener.ssl_opts.cacertfile = /path/to/ca_certificate.pem
management.listener.ssl_opts.certfile = /path/to/server_certificate.pem
management.listener.ssl_opts.keyfile = /path/to/server_key.pem
management.http_log_dir = /path/to/rabbit/logs/http
management.rates_mode = basic
# Configure how long aggregated data (such as message rates and queue
# lengths) is retained.
# Your can use 'minute', 'hour' and 'day' keys or integer key (in seconds)
management.sample_retention_policies.global.minute = 5
management.sample_retention_policies.global.hour = 60
management.sample_retention_policies.global.day = 1200
management.sample_retention_policies.basic.minute = 5
management.sample_retention_policies.basic.hour = 60
management.sample_retention_policies.detailed.10 = 5
或者,使用经典配置格式:
[
{rabbit, [{tcp_listeners, [5672]},
{collect_statistics_interval, 10000}]},
{rabbitmq_management,
[
%% Pre-Load schema definitions from the following JSON file.
%%
%% {load_definitions, "/path/to/definitions.json"},
%% Log all requests to the management HTTP API to a directory.
%%
{http_log_dir, "/path/to/rabbit/logs/http"},
%% Change the port on which the HTTP listener listens,
%% specifying an interface for the HTTP server to bind to.
%% Also set the listener to use TLS and provide TLS options.
%%
%% {listener, [{port, 15672},
%% {ip, "0.0.0.0"},
%% {ssl, true},
%% {ssl_opts, [{cacertfile, "/path/to/ca_certificate.pem"},
%% {certfile, "/path/to/server_certificate.pem"},
%% {keyfile, "/path/to/server_key.pem"}]}]},
%% One of 'basic', 'detailed' or 'none'.
{rates_mode, basic},
%% increasing this parameter will make HTTP API cache data retrieved
%% from other cluster peers more aggressively
%% {management_db_cache_multiplier, 5},
%% If event collection falls back behind stats emission,
%% up to this many events will be kept in the backlog, the rest
%% will be dropped to avoid runaway memory consumption growth.
%% This setting is per-node. Unless there is evidence of
%% a stats collector backlog, you don't need to change this value.
%% {stats_event_max_backlog, 250},
%% CORS settings for HTTP API
%% {cors_allow_origins, ["https://rabbitmq.eng.megacorp.local", "https://monitoring.eng.megacorp.local"]},
%% {cors_max_age, 1800},
%% Configure how long aggregated data (such as message rates and queue
%% lengths) is retained.
%%
%% {sample_retention_policies,
%% [{global, [{60, 5}, {3600, 60}, {86400, 1200}]},
%% {basic, [{60, 5}, {3600, 60}]},
%% {detailed, [{10, 5}]}]}
]}
].
在启动时加载定义(模式)
可以通过HTTP API或管理UI导出定义文件。定义文件包含所有代理对象(队列,交换,绑定,用户,虚拟主机,权限和参数)的定义。然后可以在节点启动时导入文件,从而提供一种使用虚拟主机,用户,权限,策略,队列,交换,绑定等预配置节点的方法。
要在节点引导时从本地文件导入定义,请将management.load_definitions( 经典配置格式中的rabbitmq_management.load_definitions)配置键设置为包含所需定义的先前导出的JSON文件的路径:
management.load_definitions = /path/to/definitions/file.json
使用经典配置格式:
[
{rabbitmq_management, [
{load_definitions, "/path/to/definitions/file.json"}
]}
].
请注意,文件中的定义将覆盖代理中已有的任何内容; 使用此选项不会删除任何已存在的内容。但是,如果从完全重置的代理启动,则使用此选项将阻止创建通常的默认用户/虚拟主机/权限。
集群中的度量标准集合和HTTP API
客户请求
管理插件了解集群。它可以在群集中的一个或多个节点上启用,无论您连接到哪个节点,都可以查看与整个群集相关的信息。
在节点子集上运行管理插件
可能仅在群集节点的子集上部署管理插件。在这种情况下,只有运行插件的节点才能提供客户端HTTP API请求。要使每个群集节点都收集其度量标准,仍然需要 在每个节点上启用rabbitmq-management-agent插件,否则来自该节点的度量标准将不可用。
客户请求
在群集中,HTTP API在处理客户端请求时执行群集范围的查询,这意味着它可能受到网络分区和减速的影响。通过网络滴答机制控制节点间聚合查询的超时 。
(反向HTTP)代理设置
可以通过任何符合RFC 1738的代理使Web UI可用。以下示例Apache配置说明了使Apache符合一致性的最低必要指令。它假设默认端口为15672的管理Web UI:
AllowEncodedSlashes On
ProxyPass /api http://localhost:15672/api nocanon
ProxyPass / http://localhost:15672/
ProxyPassReverse / http://localhost:15672/
重启统计数据库
统计数据库完全存储在内存中。它的所有内容都是短暂的,应该这样处理。在版本3.6.7之前,stats数据库存储在单个节点上。从版本3.6.7开始,每个节点都有自己的统计数据库,其中包含此节点上记录的一小部分统计信息。可以重新启动统计数据库。
统计数据库先前存储在RabbitMQ 3.6.2的stats进程的内存中,并存储在RabbitMQ 3.6.2的ETS表中。要使用早于3.6.2的版本重新启动数据库,请使用
rabbitmqctl eval 'exit(erlang:whereis(rabbit_mgmt_db), please_terminate).'
从RabbitMQ 3.6.7开始,可以使用每个节点重置数据库
rabbitmqctl eval 'rabbit_mgmt_storage:reset().'
在所有节点上重置整个管理数据库
rabbitmqctl eval 'rabbit_mgmt_storage:reset_all().'
还有HTTP API端点用于重置数据库对于整个数据库
DELETE /api/reset
对于单个节点
DELETE /api/reset/:node
内存使用分析和内存管理
管理UI可用于检查节点的内存使用情况,包括显示每个类别的细分。有关详细信息,请参阅内存使用分析指南
管理数据库围绕周期性发出的统计数据构建,由上述统计间隔调节,或者在创建/声明某些组件时(例如,打开新连接或通道,或声明队列)或关闭/删除。消息速率不会直接影响管理数据库内存使用情况。
统计数据库消耗的内存总量取决于拓扑大小(例如队列数),并发连接和通道数,事件发射间隔,有效速率模式和保留策略。
将rabbit.collect_statistics_interval值增加到30-60s(注意:该值应以毫秒为单位,例如30000)将减少具有大量队列/通道/连接的系统的内存消耗。调整保留策略以保留较少的数据也会有所帮助。
通过使用参数stats_event_max_backlog设置最大积压队列大小,可以限制通道和统计信息收集器进程的内存使用情况 。如果积压队列已满,则将删除新的通道和队列统计信息,直到处理完前一个。
统计间隔也可以在运行时更改。这样做不会影响现有的连接,通道或队列。只有新的统计数据发射实体受到影响。
rabbitmqctl eval 'application:set_env(rabbit, collect_statistics_interval, 60000).'
可以重新启动统计数据库(参见上文),从而强制释放所有内存。管理UI的“概述”页面包含用于重置各个节点以及群集中所有节点的统计数据库的按钮。
通过HTTP API发布和使用
可以使用HTTP API发布和使用消息。不鼓励使用这种消息传递方式:首选RabbitMQ支持的二进制消息传递协议之一。以这种方式发布和使用将显着提高效率,并提供对各种消息传递协议功能(如确认)的访问。
通过HTTP API发布在无法使用长期消息传递协议连接的环境中非常有用 。