问题1:RabbitMq如何解决消息堆积的问题?
解决方案
Work Queues 任务模型,简单来说让多个消费者绑定一个队列,共同消费队列中的消息。
问题2 :一个队列绑定多个消费者,每个消费者的消费能力不同,默认情况下RabbitMQ会将消息依次轮询投递给绑定在队列的每一个消费者,但这并没有考虑到消费者是否已经处理完消息,可能出现消息堆积。
解决方案
确保同一时刻最多投递给消费者1条消息,每次只能获取一条消息,处理完成才能获取下一个消息。
Work模型的使用:
- 多个消费者绑定到一个队列,可以加快消息处理速度
- 同一条消息只会被一个消费者处理
- 通过设置prefetch来控制消费者预取的消息数量,处理完一条再处理下一条,实现能者多劳。