【发布时间】:2012-02-17 15:06:27
【问题描述】:
我正在尝试以更非传统的方式使用 RabbitMq(尽管此时我可以根据需要选择任何其他消息队列实现)。消费者没有将 Rabbit 推送消息留给我的消费者,而是连接到一个队列并获取一批 N 条消息(在此期间它消耗一些消息并可能拒绝一些消息),然后跳转到另一个队列等等。这样做是为了冗余。如果某些消费者崩溃,则所有消息都保证会被其他消费者消费。
问题是我有多个消费者,我不希望他们在同一个队列中竞争。有没有办法保证对队列的锁定?如果不是,我是否至少可以确保如果 2 个消费者连接到同一个队列,他们不会读取相同的消息?事务可能在某种程度上对我有帮助,但我听说它们将从 RabbitMQ 中删除。
也欢迎其他架构建议。
谢谢!
编辑: 正如评论中所指出的,我需要如何处理消息有一个特殊性。它们仅在分组中才有意义,并且相关消息很可能在队列中聚集在一起。例如,如果我提取了一批 100 条消息,那么我很有可能能够对消息 1-3、4-5,6-10 等做一些事情。如果我无法为某些消息找到一个组,我'将它们重新提交到队列中。 WorkQueue 不起作用,因为它会将消息从同一组传播到多个不知道如何处理它们的工作人员。
【问题讨论】:
-
显然消费者可以使用 Gossip 之类的东西在他们自己之间同步,以防万一这是不可能的,但我很好奇......
标签: message-queue rabbitmq amqp