【发布时间】:2016-04-18 10:22:44
【问题描述】:
在 Rebus 中,有没有一种方法可以按顺序处理消息来控制消息的处理?即第一个处理,然后删除,然后第二个处理等
【问题讨论】:
标签: rebus
在 Rebus 中,有没有一种方法可以按顺序处理消息来控制消息的处理?即第一个处理,然后删除,然后第二个处理等
【问题讨论】:
标签: rebus
是 - 也不是:)
首先,我只想说,你最好尽你所能来设计你的系统,使其能够容忍重新排序的消息。如果您的系统能够以一致的状态结束,即使在此过程中一条或多条消息在错误队列中停留了一段时间,您将来也会更快乐。
当我说“容忍重新排序的消息”时,我并不一定是指“所有消息都按完全随机的顺序”......更像是“稍微重新排序”和/或“其中一些消息需要按顺序排列” ,但可以容忍其中许多重新排序”。在合理范围内。
在我看来,您的要求非常严格——实现这一点的唯一方法是让一个线程(并行度为 1)处理消息,丢弃(或移动到队列的后面,如果消息很重要)预计不会是下一个消息。
如果将消息移动到队列的后面太粗略(如果您有很多消息,或者如果它们经常乱序到达,它会变得很慢),您可以使用 saga 将消息排队,直到您有正确的消息,到那时你就可以做你需要做的事情了。
我希望这是有道理的 :) 如果有什么不清楚的地方请告诉我。
【讨论】: