如何检测事件的所有订阅者都已响应

时间:2013-11-12 11:07:15

标签: msmq masstransit

我目前正在调查公共交通。我根据星巴克样本编写了一个简单的样本。

我有以下传奇:

    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()
            );
    });

我遇到的问题是我有ReportRequest事件的X订阅者,每个订阅者创建报告的一小部分。因此,要使报告完整,所有订阅者都需要发布ReportComplete事件。目前,第一个完成ReportComplete事件的用户和saga也将完成。

如何设置一个传奇,以便等待所有X订阅者在完成之前响应给定的消息?

1 个答案:

答案 0 :(得分:0)

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

  • 首先,您需要“登记”您希望参与的所有订阅者。这可能是静态/共享信息,在传奇之外维护,具体取决于您的方案。
  • 只有当您收到所有入伍参与者的“完整”时,您才能进入完成状态。你可以指示传奇必须转移到另一个州。