【问题标题】:Sequential processing of messages消息的顺序处理
【发布时间】:2016-04-18 10:22:44
【问题描述】:

在 Rebus 中,有没有一种方法可以按顺序处理消息来控制消息的处理?即第一个处理,然后删除,然后第二个处理等

【问题讨论】:

    标签: rebus


    【解决方案1】:

    是 - 也不是:)

    首先,我只想说,你最好尽你所能来设计你的系统,使其能够容忍重新排序的消息。如果您的系统能够以一致的状态结束,即使在此过程中一条或多条消息在错误队列中停留了一段时间,您将来也会更快乐。

    当我说“容忍重新排序的消息”时,我并不一定是指“所有消息都按完全随机的顺序”......更像是“稍微重新排序”和/或“其中一些消息需要按顺序排列” ,但可以容忍其中许多重新排序”。在合理范围内。

    在我看来,您的要求非常严格——实现这一点的唯一方法是让一个线程(并行度为 1)处理消息,丢弃(或移动到队列的后面,如果消息很重要)预计不会是下一个消息。

    如果将消息移动到队列的后面太粗略(如果您有很多消息,或者如果它们经常乱序到达,它会变得很慢),您可以使用 saga 将消息排队,直到您有正确的消息,到那时你就可以做你需要做的事情了。

    我希望这是有道理的 :) 如果有什么不清楚的地方请告诉我。

    【讨论】:

    • @mooid8000 :如果我在多台机器上运行我的处理程序,这将不起作用。对吗?
    • 正确 - 你需要某种分布式序列化机制才能工作......但一般来说,最好使用队列来处理可以同时分发和处理的工作,可能在多台机器上并行处理,因此如果处理每条消息所需的工作相当独立并且不竞争相同的资源,则效果最佳
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2014-05-18
    • 2019-03-02
    相关资源
    最近更新 更多