摘要
主要讲述RabbitMQ的配置,以此可以通过环境变量、配置文件、运行时参数(和策略)等三种方式来定制化相应的服务。
RabbitMQ环境变量
环境变量( Enviroment Variables). RabbitMQ 服务端参数可以通过环境变量进行配直,例如,节点名称、RabbitMQ 配直文件的地址、节点内部通信端口等。
RabbitMQ 的环境变量都是以"RABBITMQ_"开头的,可以在Shell 环境中设置,也可以在rabbitmq-env . conf 这个RabbitMQ 环境变量的定义文件中设置。如果是在非Shell 环境中配置,则需要将"RABBITMQ "这个前缀去除。优先级顺序按照Shell 环境最优先,其次rabbitmq - env . conf 配置文件,最后是默认的配置。
当采用rabbitmq-server -detached 启动RabbitMQ 服务的时候,此服务节点默认以"rabbit@" 加上当前的Shell 环境的hostname (主机名)来命名,即rabbit@$HOSTNAME 。参考下面,当前Shell 环境的hostname 为" nodel " 。
如何配置rabbitrnq-env . conf 这个文件(默认在$RABBITMQ HOME/etc/rabbitrnq/ 目录下,可以通过在启动RabbitMQ 服务时指定R阻BITMQ CONF ENV FILE 变量来设置此文件的路径) :
# RabbitMQ 环境变量的定义文件
#定义节点名称
NODENAME=rabbit@node1
#定义RabbitMQ 的对外通信端口号
NODE PORT=5672
#定义RabbitMQ 配置文件的目录,注意对于rabbitmq . config
#文件来说这里不用添加、'. config 后缀"
CONFIG FILE=/opt/rabbitmq/etc/rabb 工tmq/rabbitmq
对于默认的取值规则,这个在$RABBITMQ HOME/sbin/rabbitrnq - defaults 文件中有相关设置,当然也可以通过修改这个文件中的内容来修改RabbitMQ 的环境变量,但是并不推荐这么做,还是建议读者在rabbitrnq-env . conf 中进行相应的设置。
注意,如果没有特殊的需求,不建议更改RabbitMQ 的环境变量。如果在实际生产环境中,
对于配量和日志的目录有着特殊的管理目录,那么可以参考以下相应的配置:
#配置文件的地址
CONFIG_FILE=/apps/conf/rabbitmq/rabbitmq
#环境变量的配置文件的地址
CONF_ENV_FILE=/apps/conf/rabbitmq/rabbitmq-env.conf
#服务日志的地址
LOG_BASE=/apps/logs/rabbitmq
#Mnesia 的路径
MNE5IA BA5E=/apps/dbdat/rabbitmq/mnesia
RabbitMQ配置文件
配置文件(Configuration File) . 可以定义RabbitMQ 服务和插件设直,例如,TCP 监听端口,以及其他网络相关的设直、内存限制、磁盘限制等。
前面提到默认的配置文件的位置取决于不同的操作系统和安装包。最有效的方法就是检查RabbitMQ 的服务日志, 在启动RabbitMQ 服务的时候会打印相关信息。如下所示,其中的"configfiles(s) "为目前的配置文件所在的路径。
配置文件中有一些敏感的配置项可以被加密, 然后在RabbitMQ 启动时可以对这些项进行解密。对这些项进行加密并不是意味着系统的安全性增强了, 而是遵从一些必要的规范, 让一些敏感的数据不会出现在文本形式的配置文件中。在配置文件中将加密之后的值以"(encrypted ,加密的值) " 形式包裹.,比如下面的示例中使用口令"zzhpassphrase" 将密码"guest" 加密。
网络是客户端和RabbitMQ 之间通信的媒介。RabbitMQ 支持的所有协议都是基于TCP 层面的。包括操作系统和RabbitMQ 本身都提供了许多可调节的参数,除了操作系统内核参数和DNS ,所有的RabbitMQ 设置都可以通过在rabbitmq. config 配置文件中配置来实现。网络本身就是一个非常宽泛的话题,其中涉及许多的配置选项,这些选项可以对某些任务产生积极的或者消极的影响。本节并不囊括所有的知识点,而是提供一些关键的可调节参数的索引,以作抛砖引玉之用。RabbitMQ 在等待接收客户端连接时需要绑定一个或者多个网络接口( 可以理解成E 地址),井监听特定的端口。网络接口使用rabbit .tcp listeners 选项来配置。默认情况下,RabbitMQ 会在所有可用的网络接口上监昕5672 端口。下面的示例演示了如何在一个指定的地址和端口上进行监听:
优化网络配置的一个重要目标就是提高吞吐量,比如禁用Nagle 算法、增大TCP 缓冲区的大小。每个TCP 连接都分配了缓冲区。一般来说,缓冲区越大,吞吐量也会越高,但是每个连接上耗费的内存也就越多,从而使总体服务的内存增大,这是一个权衡的问题。在Linux 操作系统中,默认会自动调节TCP 缓冲区的大小,通常会设置为80KB 到120KB 之间。要提高吞吐量可以使用rabbit.tcp listen options 来加大配置。
RabbitMQ运行时参数(策略)
运行时参数和策略( Runtime Parameters and Policies )。可以在运行时定义集群层面的服务设直.
RabbitMQ 绝大大多数的配置都可以通过修改rabbitrnq.config 配置文件来完成,但是其中有些配置并不太适合在rabbitrnq.config 中去实现。比如某项配置不需要同步到集群中的其他节点中,或者某项配置需要在运行时更改,因为rabbitrnq.config 需要重启Broker 才能生效。这种类型的配置在RabbitMQ 中的另一种称呼为参数(P缸ameter) ,也可以称之为运行时参数(Runtime Parameter) 。英文中的"缸guments" 也翻译为参数,比如channel .basicPublish 方法中的参数就是指" gumen俗",为了与之能够有效地区分,后边都使用Parameter或者RuntimeParameter 的称谓来进行相应的阐述。
Parameter 可以通过rabbitrnqctl 工具或者RabbitMQ Management 插件提供的HTTPAPI接口来设置。RabbitMQ 中一共有两种类型的Parameter: vhost 级别的Parameter 和global 级别的Parameter。 vhost 级别的Parameter 由一个组件名称(component name) 、名称(name) 和值( value) 组成,而global 级别的参数由一个名称和值组成,不管是vhost 级别还是global 级别的参数,其所对应的值都是JSON 类型的。举例来说, Federation upstream 是一个vhost 级别的Parameter ,它用来定义Federation 1尬的上游信息,其对应的Parameter 的组件名称为" federation-ups位eam飞名称对应于其自身的名称,而值对应于与上游的相关的连接参数等;对于Shovel 而言也可以通过Parameter 设置,其对应组件名称为"shovel"。
vhost 级别的参数对应的rabb 工trnqctl 相关的命令有三种: set pararneter 、list parameters 和clear parametero
rabbitmqctl set_parameter [-p vhost] {component_name} {name} {value}
用来设置一个参数。示例如下(例子中演示的Federation ups位eam 的Parameter 设置, 需要
先开启rabbitmq federation 插件) :
rabbitmqctllist_parameters [-p vhost]
用来列出指定虚拟主机上所有的Parameter。
rabbitmqctl clear_parameter [-p vhost] {componenet_name} {key}
用来清除指定的参数
global 级别Parameter 的set、clear 和list 功能所对应的rabbitmq c tl 工具与HTTP API接口如表6-5 所示。
rabbitmqctl set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}
用来设置一个Policy。其中的参数name 、patte口和definition 是必填项,相关的参
数细节可以参考图6-1 中的参数。
rabbitmqctl list_policies [-p vhost]
列出默认vhost 中所有的Policy
rabbitmqctl clear_policy [-p vhost] {name}
清除指定的Policy