【问题标题】:How do I implement competing consumers of consumers that can consume multiple things?如何实现可以消费多种事物的消费者的竞争消费者?
【发布时间】:2019-07-16 16:22:34
【问题描述】:

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

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

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

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

  • 蓝色:消费者 1
  • 黑色:消费者 2
  • 红色:首先完成处理的消费者(假设消费者 1)
  • 1000 万条红色消息:两个消费者将竞争消息并处理它们
  • 100 万条蓝色消息:只有在所有 1000 万条红色消息都完成后,消费者 1 才应该开始处理蓝色消息
  • 100 万条红色消息:只有在消费者 1 处理完蓝色消息后,它才应该开始处理新的红色消息,因为消费者 2 没有黑色消息,它可以立即开始处理红色消息。

有什么方法可以使用 RabbitMQ 实现这一点吗? 如果我只是为每种消息类型创建一个队列,我看不到确保消息排序的方法。

如果 RabbitMQ 不是适合这项工作的工具,是否有更合适的工具?

【问题讨论】:

    标签: rabbitmq messaging


    【解决方案1】:

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

    使用priority queue 时,请确保保持较低的basic.qos 值。这允许消息在队列中被优先考虑。

    【讨论】:

    • 感谢您的回答,也许我过于简化了我的示例,如果在处理 100 万条蓝色消息期间,另一条红色消息到达我希望消费者 1 在开始处理红色之前完成对蓝色的处理,我会更新我的问题
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多