首页 > 其他 > 详细

关于消息队列速率的解决方案

时间:2018-06-12 14:06:15      阅读:223      评论:0      收藏:0      [点我收藏+]
消息队列在执行过程中, 如何统计消息队列执行一轮的时间以及效率呢? 如果消息队列中的任务变多, 则需要对应增加消费进程, 保证队列不被堆积。

一、一般消息队列生产和消费类型

1. 一次性任务消费

从某个地方一次性写入多个任务到队列, 消费完成后就算完成

2. 不断写入的任务消费

一般是判断队列任务少了, 就开始写入任务, 队列任务足够则不写入任务。对应的消费进程也是持久性进程。

3. 有任务则写入, 然后持续消费

随时可能有任务产生, 之后不断消费。任务写入时间不可控, 所以消费进程一般也得是持久性进程。

二、如何计算出来消费一轮的时间以及消费速率

1. 通过统计任务开始和结束, 计算消费总时间

技术分享图片

技术分享图片

当时最早想到的就是这种方式, 这种方式的优点:

  1. 统计相对准确

缺点:

  1. 流程复杂且耦合性高
  2. 如果中间有队列暂停之类的时间, 也会被包含进时间内。

2. 通过读取队列状态, 获取到一定时间内消耗数量

技术分享图片
根据两次读取的任务数, 得到固定时间内的消耗掉的任务数, 计算出来执行的任务。

3. 通过计算单个任务的执行时间, 然后根据运行的进程数, 来计算一轮的时间。

技术分享图片

之后根据运行进程数, 以及任务总数, 来获取到一轮的更新时间。 或者一段时间内取样, 来计算需要的机器和进程数。

如果有其他更好的办法, 希望可以一起交流下。

关于消息队列速率的解决方案

原文:http://blog.51cto.com/a3147972/2128409

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!