【发布时间】:2020-01-10 03:25:58
【问题描述】:
我有 1 个大任务,其中包含 200 个子任务(消息),它们将被发布到一个队列中。如果我想取消这 1 个任务,则应删除 200 条消息(或尚未处理的未处理消息)。有什么方法可以删除队列中这些已发布的消息?
我能想到的一个解决方案是创建一个队列 (Q),我在其中发布一个新队列 (X) 的名称。然后每个消费者连接到这个新的动态创建的队列 (X) 并处理 200 条已发布的消息。如果我想中止整个任务,我只从发布者端删除该队列 (X)。这是一种常见的方法吗?
【问题讨论】:
-
听起来不错。
-
数据库事务的类似方法怎么样。从初始启动消息开始,将其推送到队列中,然后插入剩余的消息。如果处理顺利,则插入最终提交消息,否则插入回滚或丢弃消息。确保开始消息、最终消息和丢弃/回滚消息在另一消费者端被唯一标识和处理。
-
虽然对于这种需求。 Kafka 将是我的首选,因为它提供了消息队列中的事务功能。在这里,您可以获得将子任务消息发送到 Kafka 队列的功能。在您提交正在进行的事务之前,其他队列消费者不会读取主题。即使您不必担心删除中止事务中的消息。见Kafka Transactional Messaging
标签: python python-3.x rabbitmq amqp