【问题标题】:How to detect that all subscribers to an event have responded如何检测事件的所有订阅者都已响应
【发布时间】:2013-11-24 12:04:13
【问题描述】:

我目前正在调查公共交通。我基于 Starbucks 示例编写了一个简单的示例。

我有以下传奇:

    Define(() =>
    {
        Initially(
            When(ReportRequest)
                .Then((saga, message) => saga.ProcessReportRequest(message))
                .TransitionTo(WaitingForReportToComplete)
            );

        During(WaitingForReportToComplete, When(ReportComplete)
            .Then((saga, message) =>
                {
                    Console.WriteLine("Report Complete for '{0}'", saga.Name);
                    saga.CompleteReportRequest(message);
                })
                .Complete()
            );
    });

我遇到的问题是我有 X 个订阅者到 ReportRequest 事件并且每个订阅者创建报告的一小部分。因此,为了使报告被认为是完整的,所有订阅者都需要发出ReportComplete 事件。目前,第一个完成的订阅者发出 ReportComplete 事件,然后 saga 也完成了。

如何设置 saga 以等待所有 X 订阅者在完成之前对给定消息做出响应?

【问题讨论】:

  • stackoverflow.com/questions/20347748/…;虽然您可以使用 MSMQ(不太可能是 RabbitMQ)有效地检查管道,但这仍然不是您应该构建解决方案的方式。这不是 pub/sub 的用途,需要将其引入您的应用程序级别。

标签: msmq masstransit


【解决方案1】:

我认为这是一个两步解决方案:

  • 首先,您需要“登记”您希望参与的所有订阅者。这可能是静态/共享信息,在传奇之外维护,具体取决于您的场景。
  • 只有当您从所有已登记的参与者那里收到“完成”时,您才能进入完成状态。您可以命令 saga 强制转移到另一个状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2020-03-29
    • 2018-07-27
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多