第6章 RabbitMQ配置

第6章 RabbitMQ配置

一般情况下,可以使用默认的内建配置来有效地运行RabbitMQ,并且大多数情况下也并不需要修改任何RabbitMQ的配置。当然,为了更加有效地操控RabbitMQ,也可以利用调节系统范围内的参数来达到定制化的需求。

RabbitMQ提供了三种方式来定制化服务:

(1)环境变量(Enviroment Variables)。RabbitMQ服务端参数可以通过环境变量进行配置,例如,节点名称、RabbitMQ配置文件的地址、节点内部通信端口等。

(2)配置文件(Configuration File)。可以定义RabbitMQ服务和插件设置,例如,TCP监听端口,以及其他网络相关的设置、内存限制、磁盘限制等。

(3)运行时参数和策略(Runtime Parameters and Policies)。可以在运行时定义集群层面的服务设置。

6.1 环境变量

RabbitMQ的环境变量都是以“RABBITMQ_”开头的,可以在Shell环境中设置,也可以在rabbitmq-env.conf这个RabbitMQ环境变量的定义文件中设置。如果是在非Shell环境中配置,则需要将“RABBITMQ_”这个前缀去除。优先级顺序按照Shell环境优先,其次rabbitmq-env.conf配置文件,最后时默认的配置

当采用rabbitmq-server -detached启动RabbitMQ服务的时候,此服务节点默认以“rabbit@”加上当前Shell环境的hostname(主机名)来命名,即rabbit@$HOSTNAME。

如果需要定制节点的名称,而不是采用默认的方式,可以在rabbitmq-server命令前添加RABBITMQ_NODENAME变量来设定指定的名称。如下所示,此时创建的节点名称为“RabbitMQ-node1@RabbitMQ-node2”而非“rabbit@RabbitMQ-node2”。

RABBITMQ_NODENAME=RabbitMQ-node1 rabbitmq-server -detached

注意要点 

如果先执行RABBITMQ_NODENAME=RabbitMQ-node1,再执行rabbitmq-server -detached命令,相当于只执行rabbitmq-server -detached命令,即对RABBITMQ_NODENAME的定义无效。

以RABBITMQ_NODENAME这个变量为例,RabbitMQ在启动服务的时候首先判断当前Shell环境中有无RABBITMQ_NOENAME的定义,如果有则启用此值;如果没有,则查看rabbitmq-env.conf中是否定义了NODENAME这个变量,如果有则启用此值,如果没有则采用默认的取值规则,即rabbit@$HOSTNAME。

下面演示如何配置rabbitmq-env.conf这个文件(默认在$RABBITMQ_HOME/etc/rabbitmq/目录下,可以通过在启动RabbitMQ服务时指定RABBITMQ_CONF_ENV_FILE变量来设置此文件的路径。默认rabbitmq-env.conf文件不存在,需要手动生成。):

# RabbitMQ 环境变量的定义文件 

# 定义节点名称 
NODENAME=rabbit-node1
# 定义RabbitMQ 的对外通信端口号 
NODE_PORT=5672
# 定义RabbitMQ配置文件的目录,注意对于rabbitmq.config文件来说这里不用加“.config后缀” 
CONFIG_FILE=/opt/rabbitmq/etc/rabbitmq/rabbitmq

对于默认的取值规则,这个在$RABBITMQ_HOME/usr/lib/rabbitmq/bin/rabbitmq-defaults文件中有相关设置,当然也可以通过修改这个文件中的内容来修改RabbitMQ的环境变量,但是并不推荐这么做,还是建议读者在rabbitmq-env.conf中进行相应的设置。rabbitmq-defaults 文件中的内容如代码清单6-1所示。

############################## 代码清单6-1




#!/bin/sh -e
##  The contents of this file are subject to the Mozilla Public License
##  Version 1.1 (the "License"); you may not use this file except in
##  compliance with the License. You may obtain a copy of the License
##  at https://www.mozilla.org/MPL/
##
##  Software distributed under the License is distributed on an "AS IS"
##  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
##  the License for the specific language governing rights and
##  limitations under the License.
##
##  The Original Code is RabbitMQ.
##
##  The Initial Developer of the Original Code is GoPivotal, Inc.
##  Copyright (c) 2012-2021 VMware, Inc. or its affiliates.  All rights reserved.
##

### next line potentially updated in package install steps
SYS_PREFIX=

CLEAN_BOOT_FILE=start_clean
SASL_BOOT_FILE=start_sasl
BOOT_MODULE="rabbit"

if test -z "$CONF_ENV_FILE" && test -z "$RABBITMQ_CONF_ENV_FILE"; then
    CONF_ENV_FILE=${SYS_PREFIX}/etc/rabbitmq/rabbitmq-env.conf
fi
~              

表6-1中梳理一些常见的RabbitMQ变量,这里包括但不仅限于这些变量。

表6-1 常见的RabbitMQ变量

变量名称

描述

RABBITMQ_NODE_IP_ADDRESS

 

RABBITMQ_NODE_PORT

 
RABBITMQ_DIST_PORT 
RABBITMQ_NODENAME

RabbitMQ的节点名称,默认为rabbit@$HOSTNAME。在每个Erlang节点和机器的组合中,节点名称必须唯一。

RABBITMQ_CONF_ENV_FILE

RabbitMQ环境变量的配置文件(rabbitmq-env.conf)的地址,默认值为$RABBITMQ_HOME/etc/rabbitmq/rabbitmq-env.conf

注意这里与RabbitMQ配置文件rabbitmq.config的区别

RABBITMQ_USE_LONGNAME 

RABBITMQ_CONFIG_FILE

RabbitMQ配置文件(rabbitmq.config)的路径,注意没有“.config”的后缀,默认值为$RABBITMQ_HOME/etc/rabbitmq/rabbitmq

RABBITMQ_MNESIA_BASE

RABBITMQ_MNESIA_DIR的父目录。除非明确设置了RABBITMQ_MNESIA_DIR目录,否则每个节点都应该配置这个环境变量。默认值为$RABBITMQ_HOME/var/lib/rabbitmq/mnesia

注意对于RabbitMQ的操作用户来说,需要有对当前目录可读、可写、可创建文件及子目录的权限。

RABBITMQ_MNESIA_DIR 
RABBITMQ_LOG_BASE

RabbitMQ服务日志所在基础目录。默认值为$RABBITMQ_HOME/var/log/rabbitmq

RABBITMQ_LOGS

RabbitMQ服务与Erlang相关的日志,默认值为$RABBITMQ_LOG_BASE/$RABBITMQ_NODENAME.log

RABBITMQ_SASL_LOGS 
RABBITMQ_PLUGINS_DIR 

注意,如果没有特殊的需求,不建议更改RabbitMQ的环境变量。如果在实际生产环境中,对于配置和日志的目录有着特殊的管理目录,那么可以参考一下相应的配置:

# 配置文件的地址 
CONFIG_FILE=/apps/conf/rabbitmq/rabbitmq 
# 环境变量的配置文件的地址 
CONF_ENV_FILE=/apps/conf/rabbitmq/rabbitmq-env.conf 
# 服务日志的地址 
LOG_BASE=/apps/logs/rabbitmq 
# Mnesia 的路径 
MNESIA_BASE=/apps/dbdat/rabbitmq/mnesia

 

6.2 配置文件

6.2.1 配置项

6.2.2 配置加密

6.2.3 优化网络配置

6.3 参数及策略

RabbitMQ绝大多数的配置都可以通过修改rabbitmq.config配置文件来完成,但是其中有些配置并不太适合在rabbitmq.config中去实现。比如某项配置不需要同步到集群中的其他节点中,或者某项配置需要在运行时更改,因为rabbitmq.cinfig需要重启Broker才能生效。这种类型的配置在RabbitMQ中的另一种称呼为参数(Parameter),也可以称之为运行时参数(Runtime Parameter)。英文中的“arguments”也翻译为参数,比如channel.basicPublish方法中的参数就是指“arguments”,为了与之能够有效的区分,后边都使用Parameter或者Runtime Parameter的称谓来进行相应的阐述。

Parameter可以通过rabbitmqctl工具或者RabbitMQ Management插件提供的HTTP API接口来设置,RabbitMQ中一共有两种类型的Parameter:vhost级别的Parameter和global界别的Parameter。vhost级别的Parameter由一个组件名称(component name)、

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

rabbitmqctl set_parameter [-p vhost] {component_name} {name} {value}

用来设置一个参数。示例如下(例子中演示的Federation upstream的Parameter设置,需要先开启rabbitmq_federation插件):

rabbitmqctl list_parameters

用来列出执行虚拟主机上所有

rabbitmqctl clear_parameter

用来清除指定

与rabbitmqctl 工具相对应

设置一个参数:

清除一个参数:

列出指定vhost中的所有参数:

global级别的Parameter

表6-5 global级别的Parameter的操作

方式

详细内容
  
 
 
  
 
 

global级别

除了一些 

Policy 的介入就可以很好的解决这类问题,它是一种特殊的Parameter的用法。Policy是vhost级别的。一个Policy可以匹配一个或多个队列(或者交换器,或者两者兼有),这样便于批量管理。与此同时,Policy也可以支持动态地修改一些属性参数,大大地提高了应用的灵活度。一般来说,Policy用来配置Federation、镜像、备份交换器、死信等功能。

rabbitmq_management插件本身就提供了Policy的支持。可以在“admin”->“Policies”->“Add/update a policy”中添加一个Policy。参考图6-1,包含以下几个参数。

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

Name:表示当前Policy的名称。

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

Apply to:用来指定当前Policy作用于哪一方。一共有三个选项——“Exchanges and queues”表示作用于与Pattern所匹配的所有队列和交换器;“Exchanges”表示作用于与Pattern所匹配的所有交换器;“Queues”表示作用于与Pattern所匹配的所有队列。

Priority:定义优先级。如果有多个Policy作用于同一个交换器或队列,那么Priority最大的那个Policy才会有用。

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

图6-1 添加Policy

作为一种Parameter,Policy也可以通过rabbitmqctl工具或者HTTP API接口来操作。与前面所讲的Parameter对应,rabbitmqctl工具或者HTTP API接口各种都有set、clear和list的功能。

rabbitmqct set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}

用来设置一个Policy。其中的参数name、pattern和definition是必填项,相关的参数细节可以参考图6-1中的参数。

示例如下,

对应的HTTP API 

rabbitmqctl list_policies [-p vhost]

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,它实现了AMQP(高级消息队列协议)并提供了可靠的消息传递机制。下面是RabbitMQ配置介绍: 1. 安装和启动:首先需要在服务器上安装RabbitMQ,并启动RabbitMQ服务。 2. 配置文件:RabbitMQ配置文件位于/etc/rabbitmq目录下,主要包括rabbitmq.config和rabbitmq-env.conf两个文件。其中,rabbitmq.config用于配置RabbitMQ的各种参数,如监听端口、虚拟主机等;rabbitmq-env.conf用于设置环境变量。 3. 虚拟主机:RabbitMQ支持虚拟主机的概念,可以将消息队列划分为多个逻辑上独立的部分。在配置文件中可以通过添加如下配置来创建虚拟主机: ``` {rabbit, [ {virtual_hosts, [ {"/", []}, {"/vhost1", []}, {"/vhost2", []} ]} ]}. ``` 4. 用户和权限:RabbitMQ可以通过用户名和密码进行身份验证,并通过权限控制来限制用户对消息队列的访问。可以通过以下命令创建用户并设置权限: ``` rabbitmqctl add_user username password rabbitmqctl set_permissions -p vhost username ".*" ".*" ".*" ``` 5. 集群配置RabbitMQ支持集群模式,可以将多个节点组成一个集群,提高可用性和性能。在配置文件中可以通过添加如下配置配置集群: ``` {rabbit, [ {cluster_nodes, {['rabbit@node1', 'rabbit@node2'], disc}} ]}. ``` 6. 插件管理:RabbitMQ提供了丰富的插件来扩展其功能,可以通过rabbitmq-plugins命令来管理插件。例如,启用管理插件可以通过以下命令实现: ``` rabbitmq-plugins enable rabbitmq_management ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值