我目前正在调查公交。我已经基于星巴克示例编写了一个简单示例。

我有以下传奇:

    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事件,并且传奇也将完成。

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

最佳答案

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

  • 首先,您需要“征募”您希望参加的所有订户。根据您的情况,这可能是静态/共享的信息,可以在传奇之外维护。
  • 只有当您从所有应征者那里收到“完成”时,您才能进入“完成”状态。您可以指示传奇故事转移到其他状态。
  • 关于msmq - 如何检测事件的所有订阅者均已响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19927499/

    10-12 15:57