消息队列RabbitMQ和ActiveMQ的生产者流量控制
来源:互联网 发布:在数据库储存的是 编辑:程序博客网 时间:2024/05/17 09:26
Q:MQ 们为什么要做生产者流量控制?
[{rabbit, [{vm_memory_high_watermark, 0.4}]}].
当 MQ 启动时,该内存阈值也会写入到 RABBITMQ_NODENAME.log 文件里,如下所示:
Memory limit set to 2048MB.
=WARNING REPORT==== 29-Oct-2009::17:23:44 ===Unknown total memory size for your OS {unix,magic_homebrew_os}. Assuming memory size is 1024MB.
- 不管 mq 有无做持久化配置:
- !ActiveMQ所使用的内存到达 memoryUsage 配置值,默认值64MB;
- 如果 mq 做了持久化配置:
- !要打开了useCache开关,表明要将持久化消息缓存起来以便快速访问,默认是True;
- !缓存在内存中消息总字节数到达 memoryLimit 配置值,默认值是1MB。
一,基于信用证(Credit)的拥塞控制机制
1993年,ATM领域开始寻找一种可以动态分配带宽并防止信元丢失的传输机制。因此提出了ABR(Available Bit Rate,可用比特率)业务,ABR 不强制网络为其分配固定的带宽,网络通过反馈信息动态调整分配给每个 ABR 连接的带宽。很多专家都投入到 ABR 业务的拥塞控制规范研究上。
基于 Credit 的方案由哈佛大学的H.T.Kung教授首先提出,采用链路级流控机制,以单一链路或虚电路VC作为基本的控制单位。每条链路有一个信元发送节点(可以是一个源端或一个交换节点)和一个接收节点(可以是一个交换节点或一个目的端系统),每个节点为每一条VC维持一个排队队列,信元接收端监视每条VC的排队队列长度,决定发送端可以发到VC上的信元数量(用信用证通知),信元发送端只能发送信用证值所允许的最大信元数量,如果只有一条VC,则信用证的值应足够大,以充分利用链路的带宽。一般来说,信用证值应满足下列条件:信用证值大于等于 链路信元速率乘以链路来回程传输时延。
图6-17 给出了基于信用证拥塞控制机制的基本工作原理。信元接收方首先发送信用证到信元发送方,通知可用的缓冲区容量,发送方收到信用证之后,就可决定发送的信元数量。
它的最大缺点是实现复杂,在每一对相邻的节点之间都需要维持这一信用证机制,同时也增加了信元的时延。
二,RabbitMQ 是如何实现的
『实质上 RabbitMQ 就是通过监控每个进程的mailbox,当某个进程负载过高来不及接收消息时,这个进程的mailbox就开始堆积消息。
当堆积到一定量时,就会阻塞住上游进程,让其不得接收新消息。从而慢慢上游进程的mailbox也开始积压消息。
到了一定的量又会阻塞上游的上游的进程接收消息,最后就会使得负责网络数据包接收的进程阻塞掉,暂停接收数据。
这就有点像一个多级水库,当下游水库压力过大时,上游水库就得关闭闸门,使得自己的压力也越来越大,需要关闭更上游的水库闸门,直到关闭最最上游的闸门。』——http://ybbct.iteye.com/blog/
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- RabbitMQ消息队列生产者和消费者
- RabbitMQ消息队列之二:消费者和生产者 Demo
- 【中间件】消息队列(一):RabbitMQ、ActiveMQ、Kafka和Redis
- 【消息队列】ActiveMQ的简单实例 - 生产者消费者模式
- 谁才是最快的消息队列:ActiveMQ, RabbitMQ, HornetQ, QPID
- 消息队列与 ActiveMQ, RabbitMQ,ZeroMQ 等
- RabbitMQ消息通信,生产者发送消息给指定的消费者的消息队列
- ActiveMQ 生产者流量控制(Producer Flow Control)
- ActiveMQ 生产者流量控制(Producer Flow Control)
- RabbitMQ-理解消息通信-消费者和生产者
- 消息队列、AMQP和RabbitMQ
- 消息队列RabbitMQ和Kafka
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
- 链表 小注意
- JAVA实现串口通信
- 串的模式匹配
- SMTP 与 ESMTP
- [Virtual Judge]SGU171:Sarov zones
- 消息队列RabbitMQ和ActiveMQ的生产者流量控制
- JSON(JavaScript Object Notation)
- Martin Fowler:持续集成(很有参考意义)
- binder机制底层驱动浅析
- ARM特殊生存之道及Cortex-A12架构解析
- 微信,微微之我见
- android中ImageView设置图片边框的方法
- eucalyptus 云平台搭建
- Entity Framework 4中的Code-First, Model-First和Database-First模式