⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/yi_qingjun/article/details/128329147 「百慕卿君」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前面介绍了 RabbitMQ 基础入门、安装与简单使用等相关的知识点,今天我将详细的为大家介绍 RabbitMQ 基础配置相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!

RabbitMQ 配置概述

从前面的操作来看,我们并没有用到配置相关的东西,比如修改配置文件?比如运行时指定某某参数?

其实,大多数情况下我们默认启动rabbitmq服务时就是用的默认参数,并且也够用了。但是对于一名合格的运维来说,需要全面掌握每一个细节,才能更加高效的操作rabbitmq。当然也可以从系统调优层面上来调节系统范围内的参数来达到定制化的需求。

RabbitMQ三种定制化服务方式

  • 环境变量(Enviroment Variables )。RabbitMQ服务端参数可以通过环境变量进行配置,比如服务节点名称、RabbitMQ配置文件地址、节点内部通信端口等。
  • 配置文件(Configuration File)。可以定义RabbitMQ服务和插件设置,比如TCP监听端口、以及其他网络相关设置、内存限制、磁盘限制等。
  • 运行时指定参数和策略 (Runtime Parameters and Policies )。可以在运行时定义集群层面的服务设置。

环境变量

  • RabbitMQ的环境变量都是以”RABBITMQ_”开头的。
  • 之前有rabbitmg-env.conf文件也可以设置,不过现在高版本没有了,大部分情况下都是直接在 Shell 环境中设置,所以不做过多介绍。
  • 变量优先级: Shell 环境变量 > rabbitmg-env.conf 配置文件 > 默认内置规则。

默认内置规则

当shell环境没有定义RABBITMQ_NODENAME时,则直接采用默认规则“rabbit@hostname”。

[root@node1 ~]# rabbitmq-server -detached

[root@node1 rabbitmq]# rabbitmqctl status|grep name
Node name: rabbit@node1

Shell环境变量

当配置了shell环境变量时,则最优先读取shell里的设置变量。

#比如设置节点名称为baimu。
[root@node1 rabbitmq]# tail -1 /etc/profile
export RABBITMQ_NODENAME=baimu

[root@node1 ~]# rabbitmqctl status|grep name
Node name: baimu@node1

常见环境变量

一般情况下不建议随意更改变量,除非像集群里设寄到多个节点时,需要指定日志等文件的存放路径。

变量名称 描述
RABBITMQ_NODE_IP_ADDRESS 绑定某个特定的网络接口。默认值是空字符串,即绑定到所有网络接口上。如果要绑定两个或者更多的网络接口,可以参考 rabbitmq.config 中的 tcp_listeners 配置 。
RABBITMQ_NODE_PORT 监听客户端连接的端口号,默认为 5672
RABBITMQ_DIST_PORT RabbitMQ节点内部通信的端口号,默认值为:RABBITMQ_NODE_PORT+20000,即25672。如果设置了 kernel.inet_dist_listen_min 或者 kernel.inect_dist_listen_max时,此环境变量将被忽略。
RABBITMQ_NODENAME RabbitMQ的节点名称,默认为 rabbit\@SHOSTNAME。在每个 Erlang 节点和机器的组合中,节点名称必须唯一。
RABBITMQ_CONF_ENV_FILE RabbitMQ 环境变量的配置文件(rabbitmg-env.conf)的地址,默认值为\$RABBITMQ_HOME/etc/rabbitmg/rabbitmq-env.conf注意这里与 RabbitMQ配置文件 rabbitmg.config 的区别。
RABBITMQ_USE_LONGNAME 如果当前的 hostname 为 nodel.longname,那么默认情况下创建的节点名称为rabbit\@node1,将此参数设置为 true 时,创建的节点名称就为rabbit\@nodel.longname,即使用了长名称命名。默认值为空。
RABBITMQ_CONFIG_FILE RabbitMQ 配置文件 (rabbitmq.config)的路径,注意没有“.config”的后缀。默认值为\$RABBITMQ_HOME/etc/rabbitmq/rabbitmq
RABBITMQ_MNESIA BASE RABBITMQ_MNESIA_DIR 的父目录。除非明确设置了 RABBITMQ_MNESIA_DIR目录,否则每个节点都应该配置这个环境变量。默认值为SRABBITMQ_HOME/var/lib/rabbitmg/mnesia,注意对于 RabbitMQ的操作用户来说,需要有对当前目录可读、可写、可创建文件及子目录的权限。
RABBITMQ_MNESIA_DIR 包含 RabbitMQ服务节点的数据库、数据存储及集群状态等目录,默认值为\$RABBITMQ_MNESIA_BASE/ \$RABBITMQ_NODENAME。
RABBITMQ_LOG_BASE RabbitMQ服务日志所在基础目录。默认值为\$RABBITMQ_HOME/var/log/rabbitma。
RABBITMQ_LOGS RabbitMQ服务与 Erlang 相关的日志,默认值为:\$RABBITMQ_LOG_BASE/ \$RABBITMQ_NODENAME.Iog。
RABBITMQ_SASL_LOGS RabbitMQ 服务于 Erlang 的 SASL(Sstem Application Support Libraries)相关的日志默认值为SRABBITMQ_LOG_BASE/\$RABBITMQ_NODENAME-Sasl.log。
RABBITMQ_PLUGINS_DIR 插件所在路径。默认值为SRABBITMQ_HOME/plugins

配置文件

配置文件的位置取决于不同的操作系统和安装包,二进制安装的rabbitmq默认没有配置文件,如有需要可以在官网下载。

可以通过rabbitmq日志查看配置文件位置。

rabbitmq.conf文件下载流程

1.进入rabbitmq官网,查看rabbitmq.conf文件示例。

2.会直接跳转到github对应下载地址上。

3.将配置文件内容复制到本地,放在本机rabbitmq安装地址目录下的etc/rabbitmq/rabbitmq.conf。

常用配置项

网络相关
# Networking
# ====================

1. 默认监听端口,用于业务对接的接口,一般和第三方业务对接需要提供该端口。
# listeners.tcp.default = 5672

2. 监听本地ipv4格式的特地接口。
# listeners.tcp.local = 127.0.0.1:5672

3. 监听本地ipv6格式的特地接口。
# listeners.tcp.local_v6 = ::1:5672

4. 做监听器使用的端口及其需要监听的IP地址参数。
# listeners.tcp.other_port = 5673
# listeners.tcp.other_ip = 10.10.10.10:5672

5. ssl登陆的关键配置,后续客户端要连接5671端口。
# listeners.ssl.default = 5671

6. 禁用常规TCP(非tls)侦听器参数。客户未配置为使用TLS,且正确启用TLS的端口将无法使用连接到此节点。
# listeners.tcp = none

7. 控制TCP和TLS监听器连接Erlang进程数量。
# num_acceptors.tcp = 10
# num_acceptors.ssl = 10

8. 套接字写入器将强制GC每次传输的字节数,默认为1 GiB(' 1000000000 ')。
# socket_writer.gc_threshold = 1000000000
9. 设置为:disable,代表禁用。
# socket_writer.gc_threshold = off

10. AMQP 0-9-1 和 AMQP 1.0握手允许的最大时间量。
# handshake_timeout = 10000

11. 在接受连接时执行反向DNS查找,然后rabbitmqctl和管理UI将显示主机名,而不是IP地址。
# reverse_dns_lookups = false
访问策略
# Security, Access Control
# ==============

1. 默认“guest”用户只允许通过环回接口(例如localhost)访问服务器。
# loopback_users.guest = true
2. 当设置为false时,则其他电脑连接。
# loopback_users.guest = false

3. verify_peer参数表示要求验证对方证书。设置成false表示完全忽略验证证书的结果。
# ssl_options.verify = verify_peer
# ssl_options.fail_if_no_peer_cert = false

4. 服务端私钥和证书文件,不要修改。
# ssl_options.cacertfile = /path/to/cacert.pem
# ssl_options.certfile = /path/to/cert.pem
# ssl_options.keyfile = /path/to/key.pem
# ssl_options.honor_cipher_order = true
# ssl_options.honor_ecc_order = true

5. 推荐使用TLSv1.2,但不能使用TLSv1.3。如果启用TLSv1.3,需要删除这两行。(晦涩难懂,不能随意更改)
# ssl_options.client_renegotiation = false
# ssl_options.secure_renegotiate = true

6. 最前沿的TLS版本,需要最近的客户端运行时版本,并且没有与早期TLS版本相同的密码套件。(晦涩难懂,不能随意更改)
# ssl_options.versions.1 = tlsv1.3

7. 启用TLSv1.2以获得最佳兼容性。(晦涩难懂,不能随意更改)
# ssl_options.versions.2 = tlsv1.2

8. 限制服务器将为客户端TLS使用的密码套件连接,缩小范围可以阻止一些客户连接。如果启用TLSv1.3,密码套件被覆盖,TLSv1.3特定密码套件也必须显式启用。

只使用TLSv1.3密码套件示例:
# ssl_options.ciphers.1 = TLS_AES_256_GCM_SHA384
# ssl_options.ciphers.2 = TLS_AES_128_GCM_SHA256
# ssl_options.ciphers.3 = TLS_CHACHA20_POLY1305_SHA256
# ssl_options.ciphers.4 = TLS_AES_128_CCM_SHA256
# ssl_options.ciphers.5 = TLS_AES_128_CCM_8_SHA256
# ssl_options.ciphers.1 = ECDHE-ECDSA-AES256-GCM-SHA384
# ssl_options.ciphers.2 = ECDHE-RSA-AES256-GCM-SHA384
# ssl_options.ciphers.3 = ECDHE-ECDSA-AES256-SHA384
# ssl_options.ciphers.4 = ECDHE-RSA-AES256-SHA384
# ssl_options.ciphers.5 = ECDH-ECDSA-AES256-GCM-SHA384
# ssl_options.ciphers.6 = ECDH-RSA-AES256-GCM-SHA384
# ssl_options.ciphers.7 = ECDH-ECDSA-AES256-SHA384
# ssl_options.ciphers.8 = ECDH-RSA-AES256-SHA384
# ssl_options.ciphers.9 = DHE-RSA-AES256-GCM-SHA384
# ssl_options.ciphers.10 = DHE-DSS-AES256-GCM-SHA384
# ssl_options.ciphers.11 = DHE-RSA-AES256-SHA256
# ssl_options.ciphers.12 = DHE-DSS-AES256-SHA256
# ssl_options.ciphers.13 = ECDHE-ECDSA-AES128-GCM-SHA256
# ssl_options.ciphers.14 = ECDHE-RSA-AES128-GCM-SHA256
# ssl_options.ciphers.15 = ECDHE-ECDSA-AES128-SHA256
# ssl_options.ciphers.16 = ECDHE-RSA-AES128-SHA256
# ssl_options.ciphers.17 = ECDH-ECDSA-AES128-GCM-SHA256
# ssl_options.ciphers.18 = ECDH-RSA-AES128-GCM-SHA256
# ssl_options.ciphers.19 = ECDH-ECDSA-AES128-SHA256
# ssl_options.ciphers.20 = ECDH-RSA-AES128-SHA256
# ssl_options.ciphers.21 = DHE-RSA-AES128-GCM-SHA256
# ssl_options.ciphers.22 = DHE-DSS-AES128-GCM-SHA256
# ssl_options.ciphers.23 = DHE-RSA-AES128-SHA256
# ssl_options.ciphers.24 = DHE-DSS-AES128-SHA256
# ssl_options.ciphers.25 = ECDHE-ECDSA-AES256-SHA
# ssl_options.ciphers.26 = ECDHE-RSA-AES256-SHA
# ssl_options.ciphers.27 = DHE-RSA-AES256-SHA
# ssl_options.ciphers.28 = DHE-DSS-AES256-SHA
# ssl_options.ciphers.29 = ECDH-ECDSA-AES256-SHA
# ssl_options.ciphers.30 = ECDH-RSA-AES256-SHA
# ssl_options.ciphers.31 = ECDHE-ECDSA-AES128-SHA
# ssl_options.ciphers.32 = ECDHE-RSA-AES128-SHA
# ssl_options.ciphers.33 = DHE-RSA-AES128-SHA
# ssl_options.ciphers.34 = DHE-DSS-AES128-SHA
# ssl_options.ciphers.35 = ECDH-ECDSA-AES128-SHA
# ssl_options.ciphers.36 = ECDH-RSA-AES128-SHA
虚拟空间设置
# Default User / VHost
# ====================

1. 第一次启动RabbitMQ将创建一个vhost和一个用户及密码。
# default_vhost = /
# default_user = guest
# default_pass = guest

2. 指定用户对应权限,可配置、可读、可写。
# default_permissions.configure = .*
# default_permissions.read = .*
# default_permissions.write = .*

3. 是否开启用户角色标签。
# default_user_tags.administrator = true

4. 开启定义以他用户角色标签。
# default_user_tags.management = true
# default_user_tags.custom_tag = true
网络协议相关
# Additional network and protocol related configuration
# =====================================================
##

1. 设置服务器AMQP 0-9-1心跳超时时间,单位为秒。
# RabbitMQ节点将发送心跳帧(timeout / 2)时间间隔。两次错过的心跳客户端将关闭连接。
# 低于6秒的值很可能产生假阳性,不建议使用。
# heartbeat = 60

2. 设置AMQP帧的最大允许大小(以字节为单位)。
# frame_max = 131072

3. 设置服务器在连接前接受的最大帧大小,调优参数。
# initial_frame_max = 4096

4. 设置每个连接允许的最大通道数,0表示“无限制”。
# channel_max = 128

5. 设置队列未接受连接的最大数目。当达到此值时,新连接会被拒绝。
# tcp_listen_options.backlog = 128

6. 设置为ture,则禁用Nagle算法,默认设置为true,也推荐设置为true。
# tcp_listen_options.nodelay = true
# tcp_listen_options.exit_on_close = false

7. 设置为ture,则启用TCP的存活时间。
# tcp_listen_options.keepalive = true
# tcp_listen_options.send_timeout = 15000

8. 设置TCP缓冲区大小。
# tcp_listen_options.buffer = 196608
# tcp_listen_options.sndbuf = 196608
# tcp_listen_options.recbuf = 196608
资源流量限制相关
# Resource Limits & Flow Control
# ==============================

1. 设置基于内存的流量控制阈值。
# vm_memory_high_watermark.relative = 0.4

2. 设置节点使用的RAM的限制(字节)。
# vm_memory_high_watermark.absolute = 1073741824

3. 从Rabbitmq 3.6.0版本开始,你可以使用内存单位设置绝对值。
# vm_memory_high_watermark。absolute = 2GB

##支持的单元符号:
# k, kiB: kibibytes (2^10 - 1,024 bytes)
# M, MiB: mebibytes (2^20 - 1,048,576 bytes)
# G, GiB: gibibytes (2^30 - 1,073,741,824 bytes)
# kB: kilobytes (10^3 - 1,000 bytes)
# MB: megabytes (10^6 - 1,000,000 bytes)
# GB: gigabytes (10^9 - 1,000,000,000 bytes)

4. 设置队列开始的高水位限制的百分比,将页消息输出到磁盘以释放内存。
##例如,当vm_memory_high_watermark设置为0.4,该值设置为0.5时,分页可以在节点使用总可用RAM的20%时就开始。大于1.0的值可能是危险的,应谨慎使用。
##一个替代方案是使用持久队列并发布消息作为持久的(传递模式= 2)更快地将消息移动到磁盘。另一种替代方法是配置队列来分页所有消息(两者都可以)持久和瞬时到磁盘。
# vm_memory_high_watermark_paging_ratio = 0.5

5. 选择Erlang虚拟机内存消耗计算策略。(' allocated '、 ' rss '、' legacy '(别名为' erlang ')。' rss '是3.6.12时的默认值。
# vm_memory_calculation_strategy = rss

6. 设置执行内存检查的时间间隔(以毫秒为单位)
# memory_monitor_interval = 2500

7. 设置可用的总内存可以从操作系统资源中计算。可以时默认选项,也可以作为配置参数提供。
# total_memory_available_override_value = 2GB

8. 设置磁盘空闲限制(字节)。
# disk_free_limit.absolute = 50000

9. 从RabbitMQ 3.6.0版本开始,自定义设置磁盘空闲限制大小。
# disk_free_limit.absolute = 500KB
# disk_free_limit.absolute = 50mb
# disk_free_limit.absolute = 5GB

10. 设置一个相对于总可用RAM的限制,低于1.0比较危险,谨慎使用。
# disk_free_limit.relative = 2.0
集群相关
# Clustering
# =====================

1. 设置网络分区处理策略,一共有四种(ignore模式、pause-minority模式、pause-if-all-down模式、autoheal模式),默认为ignore模式。
# cluster_partition_handling = ignore

2. 设置暂停分区少数部分的所有节点。集群节点数必须为奇数。
# cluster_partition_handling = pause_minority

3. 若设置为pause_if_all_down模式策略,还需要额外配置。
# cluster_partition_handling = pause_if_all_down

4. 恢复策略。可以是autoheal,或者是ignore。
# cluster_partition_handling.pause_if_all_down.recover = ignore

5. 设置集群节点名称。
# cluster_partition_handling.pause_if_all_down.nodes.1 = rabbit@localhost
# cluster_partition_handling.pause_if_all_down.nodes.2 = hare@localhost

6. 从RabbitMQ 3.6.0版本开始,可以设置镜像同步批处理大小,但总批大小(字节)不得超过2 GiB。
# mirroring_sync_batch_size = 4096

7. 集群首次启动设置。
# cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
# cluster_formation.classic_config.nodes.1 = rabbit1@hostname
# cluster_formation.classic_config.nodes.2 = rabbit2@hostname
# cluster_formation.classic_config.nodes.3 = rabbit3@hostname
# cluster_formation.classic_config.nodes.4 = rabbit4@hostname
# cluster_formation.peer_discovery_backend = rabbit_peer_discovery_dns
# cluster_formation.dns.hostname = discovery.eng.example.local

8. 配置节点类型。默认使用'disc'。
# cluster_formation.node_type = disc

9. 设置发送keepalive消息的间隔(以毫秒为单位)到其他集群成员。
# cluster_keepalive_interval = 10000
数据收集参数
# Statistics Collection
# =====================

1. 设置统计信息收集间隔(单位:毫秒)
# collect_statistics_interval = 5000
管理相关
# Management section
# =======================================

1. 管理页面端口,绑定可以支持tcp协议的IP。
# management.tcp.port = 15672
# management.tcp.ip = 0.0.0.0

2. web页面管理相关参数。
# management.tcp.shutdown_timeout = 7000
# management.tcp.max_keepalive = 120
# management.tcp.idle_timeout = 120
# management.tcp.inactivity_timeout = 120
# management.tcp.request_timeout = 120
# management.tcp.compress = true

3. HTTP监听器和嵌入式Web服务器设置。
# 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

4. 更多TLS选项
# management.ssl.honor_cipher_order = true
# management.ssl.honor_ecc_order = true
# management.ssl.client_renegotiation = false
# management.ssl.secure_renegotiate = true
# Supported TLS versions
# management.ssl.versions.1 = tlsv1.2

5. 服务器允许使用的密码套件:
# 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

6. HTTP API和管理UI的URL路径前缀。
# management.path_prefix = /a-prefix

7. 设置聚合数据的长度(例如消息速率和队列)长度被保留。(分、时、日)
# 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
配置加密
  • 配置文件中有一些敏感的配置项可以被加密,然后在 RabbitMQ 启动时可以对这些项进行解密。
  • 对这些项进行加密并不是意味着系统的安全性增强了,而是遵从一些必要的规范,让一些敏感的数据不会出现在文本形式的配置文件中。在配置文件中将加密之后的值以“{encrypted,加密的值)”形式包裹,
  • 比如下面的示例中使用口令“adjhsajk”将密码“guest”加密。
  • 默认情况下,加密机制 PBKDF2 用来从口令中派生出密钥。
  • 默认的 Hash 算法是 SHA512
  • 默认的迭代次数是 1000
  • 默认的加密算法为 AES 256 CBC

我们也可以通过encode的其他参数来自定义。

rabbitmgctl encode 的完整命令为:

rabbitmqctl encode [ --decode ] [Kvalue>] [ < passphrase > ) [–list-ciphers]–list-hashes) --cipher < cipher >] --hash < hash > --iterations < iterations >

[–list-ciphers]:#罗列当前 RabbitMQ所支持的加密算法。
[–list-hashes]:#罗列当前 RabbitMQ所支持的Hash 算法。

参数策略

当我们在使用某项配置不需要同步到集群中的其他节点中,或者某项配置需要在运行时更改,这时候就不适合通过修改rabbitmq.conf配置文件来玩。因为 rabbitmq.config文件需要重启 Broker 才能生效。

这种类型的配置在 RabbitMQ中的另一种称呼为,参数 (Parameter),也称运行时参数(Runtime Parameter)。

  • Parameter 可以通过 rabbitmqctl 工具或者 RabbitMQ Management 插件提供的 HTTPAPI接口来设置。RabbitMQ 中一共有两种类型的 Parameter。vhost 级别的 Parameter 和 global 级别的 Parameter。不管是 vhost 级别还是 global 级别的参数,其所对应的值都是JSON 类型的。

    • vhost 级别的 Parameter 由一个组件名称 (component name)、名称 (name) 和值(value) 组成,
    • global 级别的参数由一个名称和值组成。

比如,Federation upstream 是一个 vhost 级别的Parameter,它用来定义 Federation link 的上游信息,其对应的 Parameter 的组件名称为“federation-upstream”,名称对应于其自身的名称,而值对应于与上游的相关的连接参数等:对于Shovel而言也可以通过 Parameter 设置,其对应组件名称为“shovel”。

vhost级别的参数对应的rabbitmqctl相关命令有三种:

  • set_parameter
  • list_parameters
  • clear_parameter

常见Parameter命令用法

设置参数
set_parameter设置(绑定vhost)

命令格式:rabbitmqctl set_parameter [-p vhost] {component_name} {name} {valuel}

  • {component_name}:表示待设置参数的组件名称。
  • {name}: 表示待设置的参数名称。
  • {value}:表示待设置的参数值,是一个JSON项。

开启rabbitmq_federation插件。

[root@node1 rabbitmq]# rabbitmq-plugins enable rabbitmq_federation

将默认vhost “/”的federation-upstream组件的参数f1的值设置为JSON项。

[root@node1 rabbitmq]# rabbitmqctl set_parameter federation-upstream f1 '{"uri":"amqp://qingjun:citms@192.168.130.128:5672","ack-mode":"on-confirm"}'

set_global_parameter设置(不绑定vhost)

命令格式:rabbitmqctl set_global_parameter {name} {value}

类似set_parameter,但此处的key-value不绑定vhost。

[root@node1 rabbitmq]# rabbitmqctl set_global_parameter mqtt_default_vhosts '{"0=client,CN=qingjun":"/"}'

查看参数
list_parameters查看(绑定vhost)

命令格式:rabbitmqctl list_parameters [-p vhost]

[root@node1 rabbitmq]# rabbitmqctl list_parameters -p /

list_global_parameters查看(不绑定vhost)

命令格式:rabbitmqctl list_global_parameters

类似于 list_parameters,但是该命令不绑定于任何vhost

[root@node1 rabbitmq]# rabbitmqctl list_global_parameters
Listing global runtime parameters ...
name value
mqtt_default_vhosts {"0=client,CN=qingjun":"/"}
internal_cluster_id "rabbitmq-cluster-id-RGju8hDGnxgSBG2VBR0j7A"

清除参数

clear_parameter清除(绑定vhost)

命令格式:rabbitmqctl clear_parameter [-p vhost] {componenet_name} {key}

  • {componenet_name}:表示待清理的组件名称。- {key}:表示待清理的参数名称。
[root@node1 rabbitmq]# rabbitmqctl clear_parameter -p / federation-upstream f1

clear_global_parameter清除(不绑定vhost)

命令格式:rabbitmqctl clear_global_parameter {name}

类似于 clear_parameter,但是此 key-value 对并不绑定于vhost。

[root@node1 rabbitmq]# rabbitmqctl  clear_global_parameter mqtt_default_vhosts
Clearing global runtime parameter "mqtt_default_vhosts" ...

特殊Parameter命令用法——Policy

除了一些固定的参数 (比如 durable 或者 exclusive),客户端在创建交换器或者队列的时候可以配置一些可选的属性参数来获得一些不同的功能,比如 x-message-ttlx-expires、x-max-length 等。通过客户端设定的这些属性参数一旦设置成功就不能再改变(不能修改也不能添加),除非删除原来的交换器或队列之后再重新创建新的。

  • Policy是一种特殊的 Parameter 的用法。
  • Policy是vhost级别的。
  • 一个 Policy 可以匹配一个或者多个队列(或者交换器,或者两者兼有)。
  • Policy 也可以支持动态地修改一些属性参数,大大地提高了应用的灵活度。
  • 一般来说,Policy 用来配置 Federation、镜像、备份交换器、死信等功能。

常见参数:

  • virtual host:表示当前 Policy 所在的 vhost 是哪个。

  • Name:表示当前 Policy 的名称。

  • Pattern:一个正则表达式,用来匹配相关的队列或者交换器

  • Apply to:用来指定当前 Policy 作用于哪一方。一共有三个选项:

    • “Exchanges andqueues”:表示作用与 Pattern 所匹配的所有队列和交换器。
    • “Exchanges”:表示作用于与Pattern 所匹配的所有交换器。
    • “Queues”表示作用于与 Pattern 所匹配的所有队列。
  • Priority:定义优先级。如果有多个 Policy 作用于同一个交换器或者队列,那么Priority 最大的那个 Policy 才会有用。

  • Definition:定义一组或者多组键值对,为匹配的交换器或者队列附加相应的功能。

设置Policy

命令格式:rabbitmqctl set_policy [-p vhost] [- -priority priority] [- -apply-to apply-to] {name} {pattern} {definition}

  • {name}: 表示策略名称;
  • {pattern}:表示当匹配到给定资源的正则表达式,使的该策略得以应用;
  • {definition}:表示策略的定义,作为一个JSON项,在多数shell中,你很可能需要去应用它
  • {priority}:表示策略的优先级的整数,数据越大表示优先级越高,默认值为0
  • {apply_to}:表示策略应该应用的类型: queues/exchange/all,默认值是 all
#设置默认的 vhost 中所有以“^qingjun.”开头的交换器为联邦交换器。
[root@node1 rabbitmq]# rabbitmqctl set_policy --apply-to exchanges --priority 1 p1 "^qingjun." '{"federation-upstream":"f1"}'
Setting policy "p1" for pattern "^qingjun." to "{"federation-upstream":"f1"}" with priority "1" for vhost "/" ...

查看Policy

命令格式:rabbitmqctl list_policies [-p vhost]

#列出默认vhost中所有的Policy。
[root@node1 rabbitmq]# rabbitmqctl list_policies
Listing policies for vhost "/" ...
vhost name pattern apply-to definition priority
/ heihei ^qingjun.* all {"ha-mode":"all","ha-sync-mode":"automatic"} 0
/ ha ^ all {"ha-mode":"all","ha-sync-mode":"automatic"} 0
/ p1 ^qingjun. exchanges {"federation-upstream":"f1"} 1

清除Policy

命令格式:rabbitmqctl clear_policy [-p vhost] {name}

[root@node1 rabbitmq]# rabbitmqctl clear_policy p1
Clearing policy "p1" on vhost "/" ...

  • 如果两个或多个 Policy 都作用到同一个交换器或者队列上,且这些 Policy 的优先级都是样的,则参数项最多的 Policy 具有决定权。如果参数一样多,则最后添加的 Policy 具有决定权。
  • 关于Policy咱们先简单认识一下,后面讲镜像队列时再深度讨论。
文章目录
  1. 1. RabbitMQ 配置概述
    1. 1.0.1. RabbitMQ三种定制化服务方式
  • 2. 环境变量
    1. 2.0.1. 默认内置规则
    2. 2.0.2. Shell环境变量
    3. 2.0.3. 常见环境变量
  • 3. 配置文件
    1. 3.0.1. rabbitmq.conf文件下载流程
    2. 3.0.2. 常用配置项
      1. 3.0.2.0.1. 网络相关
      2. 3.0.2.0.2. 访问策略
      3. 3.0.2.0.3. 虚拟空间设置
      4. 3.0.2.0.4. 网络协议相关
      5. 3.0.2.0.5. 资源流量限制相关
      6. 3.0.2.0.6. 集群相关
      7. 3.0.2.0.7. 数据收集参数
      8. 3.0.2.0.8. 管理相关
      9. 3.0.2.0.9. 配置加密
  • 4. 参数策略
    1. 4.0.1. 常见Parameter命令用法
      1. 4.0.1.0.1. 设置参数
      2. 4.0.1.0.2. set_parameter设置(绑定vhost)
      3. 4.0.1.0.3. set_global_parameter设置(不绑定vhost)
      4. 4.0.1.0.4. 查看参数
      5. 4.0.1.0.5. list_parameters查看(绑定vhost)
      6. 4.0.1.0.6. list_global_parameters查看(不绑定vhost)
    2. 4.0.1.1. 清除参数
      1. 4.0.1.1.1. clear_parameter清除(绑定vhost)
      2. 4.0.1.1.2. clear_global_parameter清除(不绑定vhost)
  • 4.0.2. 特殊Parameter命令用法——Policy
    1. 4.0.2.0.1. 设置Policy
    2. 4.0.2.0.2. 查看Policy
    3. 4.0.2.0.3. 清除Policy