channel rabbitmq 配置_RabbitMQ 配置

RabbitMQ自带默认的构建配置。默认配置对于大部分环境来说是完全足够的。对于其他的一些场景来说,比如生产环境,通过类似插件的方式来配置

broker。

由于配置项的修改会影响系统(包括插件)的许多地方,因此配置文档会将会深入的介绍哪些配置是可以修改的

产品清单指出了在生产环境下可能会被修改的配置项概要。RabbitMQ提供了三种通用的服务端的配置方式

(一)配置文件TCP监听器和其他的网络相关配置

TLS

资源约束(预警)

后台认证和授权

消息的存储设置

(二)环境变量

节点名称的定义,文件和目录的位置,运行时的标识取自shell或者是环境配置文件中(Linux,MacOS,BSD系统下为rabbitmq-env.conf windows下为rabbitmq-env-conf.bat)

(三)rabbitmqctl

当使用内部的后台认证和授权时,rabbitmqctl是用于管理虚拟主机,用户和权限的工具

(四)rabbitmq-plugins

rabbitmq-plugins是用于管理启用插件的工具

(五)运行时参数和策略

定义了集群范围的配置,可以在运行时改变从而比较方便的配置像包含可选参数的队列组,交换机组等等。

rabbitmq.conf中的核心服务变量配置listeners: 用于监听“plain” AMQP 0-9-1 和 AMQP 1.0的连接(不使用TLS)的主机名/端口num_acceptors.tcp:Erlang进程能够处理TCP的连接数量handshake_timeout:AMQP 0-9-1协议的握手最大时间(单位:毫秒)listeners.ssl:用于监听AMQP 0-9-1 and AMQP 1.0的TLS连接num_acceptors.ssl:Erlang进程能够处理的客户端的TLS连接数ssl_options: TLS的配置项ssl_handshake_timeout:TLS的握手超时时间(单位:毫秒)vm_memory_high_watermark:触发流量控制的内存临界值,取决于操作系统的内存容量的绝对值或相对值vm_memory_calculation_strategy:内存使用的报告策略。allocated:使用Erlang内存分配器统计

rss:使用操作系统的RSS内存报告。

legacy:使用legacy内存报告。这种统计方式是相当不准确的

erlang:和legacy相似vm_memory_high_watermark_paging_ratio:total_memory_available_override_valuedisk_free_limit:log.file.level:channel_max:channel_operation_timeout:heartbeat:default_vhost:

default_user

default_pass

default_user_tags

default_permissions

loopback_users

cluster_formation.classic_config.nodes

collect_statisticscollect_statistics_interval

可选参数可选的队列参数,“x-arguments”,这些属性名称被定义在AMQP 0-9-1协议中。可以再client端队列声明时提供的map集合。在插件和特定的

broker的特性中所使用。例如:Message and Queue TTL 消息和队列的存活时间

Queue length limit 队列长度限制

Mirroring settings 镜像配置

Max number of priorities 优先级的最大数量

Consumer priorities 消费者的优先级 等等可选参数可通过两种方式提供为队列组使用策略(推荐)

在客户端声明一个队列时的基础信息中配置临时队列,队列自动删除有三种方式:Exclusive queues 独占队列

TTLs 存活时间

Auto-delete 自动删除

如果一个队列没有任何消费者,例如,所有的消费行为均为“basic.get”方法,它是不会被自动删除的,这种情况下,需要使用独占队列或者设置队列存活时间。消息状态,队列消息可能处于一下两种状态准备投递

已经被投递但是还没被消费者确认决定队列的长度,队列长度的设定有很多中方法:在AMQP 0-9-1协议中,使用queue.declare方法的一个属性设置来响应。属性的名字叫做“message_count”,如何接入取决于客户端库的差异

队列的长度被定义为处于投递状态的消息数量RabbitMQ 支持一下几个协议:AMQP 0-9-1 with extensions

AMQP 0-9-1 提供了一种在单一TCP连接上进行多路传输的连接方式。也就是说应用可以在单一TCP连接上开启多个叫做“通道”(channel)的轻量级连接。

AMPQ 0-9-1客户端在连接建立后开启一个或多个通道然后在通道上执行协议操作。

在一条连接上可以同时建立的通道数量是由客户端和服务端在建立连接时协商决定的。客户端配置的通道最大数量不能超过服务端配置的通道最大数量。

AMQP 0-9-1 支持不同的认证机制。比较常用的是为应用提供一对X509认证的证书和PKI。

AMQP 1.0

AMQP 1.0 提供了一种在单一TCP连接上进行多路传输的连接方式。也就是说应用可以在单一TCP连接上开启多个叫做“会话”(session)的轻量级连接。应用可以建立一个或多个连接来发布或消费消息。

MQTT 3.1.1

MQTT 3.1也遵循下面所提的连接建立流程,MQTT支持可选身份认证,使用时RabbitMQ会提供预置的凭证。

STOMP 1.0 through 1.2

STOMP也遵循下面所提的连接建立流程。

操作系统对单一进程能够同时开启的TCP连接数量有一个限定范围。这个限定的连接数量在开发环境下或者是QA环境下是足够的,但在生产环境必须要调高此限制来应对大量客户端的并发连接。Connection LifeCycle为了客户端可以和RabbitMQ进行交互首先需要建立一条连接,这个过程包含以下几步:应用对使用明确的连接后台的客户端库进行配置

客户端库把配置的主机地址解析为一个或多个ip地址

客户端库与目标主机地址和端口建立一个TCP连接

在服务端接收TPC连接后,执行具体的协议协商程序

接下来服务端会对客户端进行验证

现在客户端可以进行操作了,服务端会对每一个操作进行认证检查。

这个流程不会因为协议不同而发生变化,但是会有一点细微的不同。Connection Leaks连接泄露是一种在应用重复的开启连接但是没有关闭连接或者是只关闭了其中的一部分的情况。High Connection Churn一个系统的新建连接的速率一直很高并且关闭连接的速率也一直很高时就说明该系统具有高连接丢失。这意味着该系统使用的是短连接。虽然对于系统的某些工作负载来说这是一个较为正常的状态,但还是尽可能的推荐使用长连接。RabbitMQ 中的 Connection和Channel无论是生产者还是消费者,都需要和RabbitMQ的broker建立连接,这个连接就是一条TCP连接,也就是Connection

一旦TCP连接建立起来,客户端就可以创建一个AMQP信道(Channel),每个信道都会被指派一个唯一的id。

信道是建立在Connection之上的虚拟连接,RabbitMQ处理的每条AMQP指令都是通过信道完成的。

原本使用Connection就能完成信道的工作,为什么要引入信道呢?

一个应用程序中有很多线程需要从RabbitMQ中消费消息,或者生产消息,那必然需要建立很多个Connection,也就是多个TCP连接,而对于操作系统来说,建立和销毁TCP连接是非常昂贵的开销,如果遇到使用高峰,性能瓶颈也随之显现。

RabbitMQ采用了TCP连接复用,每个线程把持一个信道,所以信道复用了Connection的TCP连接,同时RabbitMQ可以确保每个线程的私密性,就像独立的连接一样,当每个信道的连接不是很大时,复用单一的Connection可以在产生性能瓶颈的情况下有效的节省TCP连接资源,但是信道本身流量很大时,这个时候多个信道复用一个Connection就会产生性能瓶颈,进而使整体的流量被限制了,此时就需要开辟多个Connection,将这些信道均摊到这些Connection中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值