等待所有消息并运行回调

时间:2017-03-07 11:01:19

标签: python rabbitmq

由于某些原因,我的制作人同时向兔子MQ发送X消息。这些消息只是通知,说“我更新一些东西,做你的东西”

但是我的消费者不应该为所有消息调用他的回调,只调用一个消息(而不是无限期地等待所有消息)。有可能吗?

1 个答案:

答案 0 :(得分:0)

这取决于具体的细节,所以我将尝试解决一些示例场景。我假设消息并非都是相同的,最后一个是正确的(例如更新的数据)。

  • X是固定的,第一条和最后一条消息之间的时间差是99%的时间是m秒,处理多次消息是好的

    在这种情况下,你知道你不会得到1条消息而是n条消息,因此每次收到新的(唯一的)消息时,你都会排队,当你收到n时你可以处理它;如果该过程占用超过m秒,则立即处理;如果迟到的消息到达,它将在m秒超时后再次处理,没有问题。

  • X是可变的,第一个和最后一个消息之间的时间差是m秒< 50%的时间,处理一次以上的消息是可以的

    与前一种情况相同,您只需要仔细调整超时,以实现可接受的消息处理时间,同时仍然保持对消息的重新处理足够低。

  • 多次处理邮件不行,超时后的最后一条消息是好消息

    我放宽了处理最后一条消息的要求,并将其转换为时间间隔中的最后一条消息。 这样,您可以将消息排队并在允许的时间范围内等待最后一个消息,然后对其进行处理。您还需要保留已处理消息的缓存,以便可以在不进行重新处理的情况下识别和丢弃已处理的消息,因为这样就不行了。

这些是一些场景,当然可以结合起来以实现更多可能性,但最终都取决于有关如何生成和传递消息的具体细节以及对哪些消息进行处理的要求。