RabbitMQ——RabbitMQ配置文件

摘要

主要讲述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
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是RabbitMQ整合Spring Boot的配置文件编写: 1. 首先,在pom.xml中添加RabbitMQ依赖: ```xml <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>2.2.4.RELEASE</version> </dependency> ``` 2. 在application.yml中配置RabbitMQ连接信息: ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest ``` 3. 创建一个RabbitMQ配置类,用于配置RabbitMQ的连接工厂、交换机、队列等信息: ```java @Configuration public class RabbitMQConfig { // 定义队列名称 public static final String QUEUE_NAME = "test_queue"; // 定义交换机名称 public static final String EXCHANGE_NAME = "test_exchange"; // 定义路由键 public static final String ROUTING_KEY = "test_routing_key"; // 定义队列 @Bean public Queue queue() { return new Queue(QUEUE_NAME, true, false, false); } // 定义交换机 @Bean public Exchange exchange() { return new DirectExchange(EXCHANGE_NAME, true, false); } // 将队列与交换机绑定,并指定路由键 @Bean public Binding binding() { return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY).noargs(); } // 创建连接工厂 @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory factory = new CachingConnectionFactory(); factory.setHost("localhost"); factory.setPort(5672); factory.setUsername("guest"); factory.setPassword("guest"); return factory; } // 创建RabbitMQ模板 @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); return rabbitTemplate; } } ``` 4. 在需要使用RabbitMQ的地方注入RabbitMQ模板,并发送消息: ```java @Service public class MessageService { @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String message) { rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, message); } } ``` 这样就完成了RabbitMQ和Spring Boot的整合,可以通过RabbitMQ发送和接收消息了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值