关于消息队列速率的解决方案
消息队列在执行过程中, 如何统计消息队列执行一轮的时间以及效率呢? 如果消息队列中的任务变多, 则需要对应增加消费进程, 保证队列不被堆积。
一、一般消息队列生产和消费类型1. 一次性任务消费从某个地方一次性写入多个任务到队列, 消费完成后就算完成
2. 不断写入的任务消费一般是判断队列任务少了, 就开始写入任务, 队列任务足够则不写入任务。对应的消费进程也是持久性进程。
3. 有任务则写入, 然后持续消费随时可能有任务产生, 之后不断消费。任务写入时间不可控, 所以消费进程一般也得是持久性进程。
二、如何计算出来消费一轮的时间以及消费速率1. 通过统计任务开始和结束, 计算消费总时间当时最早想到的就是这种方式, 这种方式的优点:
统计相对准确缺点:
流程复杂且耦合性高如果中间有队列暂停之类的时间, 也会被包含进时间内。2. 通过读取队列状态, 获取到一定时间内消耗数量
根据两次读取的任务数, 得到固定时间内的消耗掉的任务数, 计算出来执行的任务。
之后根据运行进程数, 以及任务总数, 来获取到一轮的更新时间。 或者一段时间内取样, 来计算需要的机器和进程数。
如果有其他更好的办法, 希望可以一起交流下。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。