关于消息队列速率的解决方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于消息队列速率的解决方案相关的知识,希望对你有一定的参考价值。
消息队列在执行过程中, 如何统计消息队列执行一轮的时间以及效率呢? 如果消息队列中的任务变多, 则需要对应增加消费进程, 保证队列不被堆积。
一、一般消息队列生产和消费类型
1. 一次性任务消费
从某个地方一次性写入多个任务到队列, 消费完成后就算完成
2. 不断写入的任务消费
一般是判断队列任务少了, 就开始写入任务, 队列任务足够则不写入任务。对应的消费进程也是持久性进程。
3. 有任务则写入, 然后持续消费
随时可能有任务产生, 之后不断消费。任务写入时间不可控, 所以消费进程一般也得是持久性进程。
二、如何计算出来消费一轮的时间以及消费速率
1. 通过统计任务开始和结束, 计算消费总时间
当时最早想到的就是这种方式, 这种方式的优点:
- 统计相对准确
缺点:
- 流程复杂且耦合性高
- 如果中间有队列暂停之类的时间, 也会被包含进时间内。
2. 通过读取队列状态, 获取到一定时间内消耗数量
根据两次读取的任务数, 得到固定时间内的消耗掉的任务数, 计算出来执行的任务。
3. 通过计算单个任务的执行时间, 然后根据运行的进程数, 来计算一轮的时间。
之后根据运行进程数, 以及任务总数, 来获取到一轮的更新时间。 或者一段时间内取样, 来计算需要的机器和进程数。
如果有其他更好的办法, 希望可以一起交流下。
以上是关于关于消息队列速率的解决方案的主要内容,如果未能解决你的问题,请参考以下文章