【发布时间】:2019-07-16 16:22:34
【问题描述】:
我想使用 RabbitMQ 实现竞争消费者,我有 2 个(或更多)消费者:
消费者 1 可以消费“红色”类型和“蓝色”类型的消息
消费者 2 可以消费“红色”类型和“黑色”类型的消息
现在我想使用竞争消费者模式在消费者(可能还有更多具有相同配置的消费者实例)之间进行负载平衡,并且我想保持消息排序“松散”完整(我不需要完美的排序,但希望 2 小时前的消息比 2 分钟前的消息更早得到处理)。
示例:我想按以下方式处理以下消息:
- 蓝色:消费者 1
- 黑色:消费者 2
- 红色:首先完成处理的消费者(假设消费者 1)
- 1000 万条红色消息:两个消费者将竞争消息并处理它们
- 100 万条蓝色消息:只有在所有 1000 万条红色消息都完成后,消费者 1 才应该开始处理蓝色消息
- 100 万条红色消息:只有在消费者 1 处理完蓝色消息后,它才应该开始处理新的红色消息,因为消费者 2 没有黑色消息,它可以立即开始处理红色消息。
有什么方法可以使用 RabbitMQ 实现这一点吗? 如果我只是为每种消息类型创建一个队列,我看不到确保消息排序的方法。
如果 RabbitMQ 不是适合这项工作的工具,是否有更合适的工具?
【问题讨论】: