如何实现可以消费多种商品的消费者的竞争消费者?

时间:2019-02-22 14:33:52

标签: rabbitmq messaging

我想使用RabbitMQ实现竞争的消费者,我有2个(或更多)消费者:

消费者1可以使用“红色”类型和“蓝色”类型的消息
使用者2可以使用类型为“红色”和类型为“黑色”的消息

现在,我希望使用竞争性使用者模式在使用者(以及可能具有相同配置的更多使用者实例)之间进行负载平衡,并且我希望保持消息的“松散”完整(我不愿意)需要完美的订购,但希望2小时前的邮件比2分钟前的邮件要早处理)。

示例:我想通过以下方式处理以下消息:

  • 蓝色:消费者1
  • 黑色:消费者2
  • 红色:首先完成处理的消费者(假设消费者1)
  • 1000万条红色消息:两个消费者都将争夺这些消息并对其进行处理
  • 100万条蓝色消息:只有在完成1000万次红色消息之后,消费者1才应开始处理蓝色消息
  • 1百万条红色消息:仅在消费者1处理完蓝色消息之后,它才应开始处理新的红色消息,因为对于消费者2没有黑色消息,它可以立即开始处理红色消息。

有什么办法可以使用RabbitMQ做到这一点? 如果只为每种消息类型排队,那么我将无法确保消息顺序。

如果RabbitMQ不是适合该工作的工具,那么还有其他更合适的选择吗?

1 个答案:

答案 0 :(得分:0)

您可以使用priority queue解决此问题。通过为red消息赋予更高的优先级,您的consumers将首先获取red消息。当不再有red条消息时,您的consumers将开始使用blue条消息。

使用priority queue时,请确保保持较低的basic.qos值。这样可以在队列中确定消息的优先级。