队列速率

速率,可能很多人理解的就是在管理界面上看到的 Message rates

其实不完全是哦,Mesaage rates 模块是需要rabbitmq.config配置文件中设置 rates_mode 设置非none后才会显的

然而在队列进程中,不管我们 rates_mode 设置的是什么参数,队列进程里都会计算写入,消费等速率保存在当前进程里,用于计算内存持续平均时间等数据,用于判断是否需要将一部分数据强刷磁盘等操作

在新的消费写入,ACK及NACK等操作的时候

==距上一次速率统计时间段内写入和消费出去的条数总和 > 100 会进行更新当前队列的速率==

  • 速率分 in(写入)
  • out(消费)
  • ack_in(等待ack)
  • ack_out(ack完成)
%% math:exp() 自然常数e为底的指数函数 (然常数e约为:2.71828)
%% math:log() 然常数e的对数函数 (e^b=n,那么log n=b)
Weight = math:exp(Time * math:log(0.5) / HalfLife),
Next * (1 - Weight) + Current * Weight.
  • Time: 据上一次更新速率的时间,单位秒
  • HalfLife: 5.0
  • Next: 上次更新时间内的条数 / Time
  • Current: 上一次的速率

假如我们第一次更新速率,并且是1秒里写入了100条数据,没有任何消费

100/1 (1-math:exp(1 math:log(0.5) / 5.0))+0.00 (1-math:exp(1 math:log(0.5) / 5.0))

in的rate 结果为:12.944943670387588

每次更新完速率之后,所有的据一次速率统计的条数等信息进行清零,以供下一次使用