Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nservicebus传奇-一直试图理解其目的和好处_Nservicebus_Nservicebus Sagas - Fatal编程技术网

nservicebus传奇-一直试图理解其目的和好处

nservicebus传奇-一直试图理解其目的和好处,nservicebus,nservicebus-sagas,Nservicebus,Nservicebus Sagas,我已经多次阅读了网站上的文档。我一次又一次地读着同样的文章,我无法理解他们试图用传奇来实现什么。此外,互联网上几乎没有与此相关的资源 但我完全无法理解定义所谓传奇的目的和好处。我理解处理程序(IHandleMessages)——它们是拦截器。但我不明白这部传奇是为了什么。文档中的语言假设我应该知道一些特殊的东西来理解这个想法,但我不知道 有人能用简单的语言向我解释一下,希望用现实生活中的例子来说明我必须或应该定义传奇的情况,以及这样做的好处是什么?我已经创建了一个具有多个端点和Saga定义的应用

我已经多次阅读了网站上的文档。我一次又一次地读着同样的文章,我无法理解他们试图用传奇来实现什么。此外,互联网上几乎没有与此相关的资源

但我完全无法理解定义所谓传奇的目的和好处。我理解处理程序(IHandleMessages)——它们是拦截器。但我不明白这部传奇是为了什么。文档中的语言假设我应该知道一些特殊的东西来理解这个想法,但我不知道

有人能用简单的语言向我解释一下,希望用现实生活中的例子来说明我必须或应该定义传奇的情况,以及这样做的好处是什么?我已经创建了一个具有多个端点和Saga定义的应用程序,如示例所示,它可以工作(我猜),但我不明白这些Saga的定义是为了什么。。。在许多示例中,它们在Saga类中使用RequestTimeout()方法。为什么,为什么有人想故意造成超时?我不想在这里放任何代码片段,因为它是不相关的,我需要理解为什么我要使用“Sagas”不管它是什么意思


谢谢。

NServiceBus Saga是企业集成模式中描述的一种变体

要理解何时使用传奇,必须要有它。假设您使用常规消息处理程序只是为了实现新的用户注册过程。在某个时间点,你会发现只有40%的全新注册者确认他们的电子邮件地址并成为活跃的用户帐户。有两件事你想解决

  • 提醒新注册者在注册24小时后通过发送提醒确认其电子邮件
  • 从数据存储中删除注册人信息(例如电子邮件),以便在48小时内遵守
  • 现在,如何使用常规消息处理程序来实现这一点?处理程序将通过生成一封带有确认链接的电子邮件来接收启动注册的初始请求(第一条消息,m1),仅此而已。一旦处理程序完成,它就永远完成了。但您的过程尚未完成。这是一个长期运行的逻辑过程,必须跨越48小时才能完成。在这一点上,它不再只是一个单一的消息处理,而是一个工作流。具有多个检查点的工作流。类似于状态机。要从一种状态转移到另一种状态,必须满足一定的条件。对于NServiceBus,这些将是消息。24小时后发送提醒的消息(我们称之为m2)不会被任何用户操作触发。这是一个“系统”信息。应自动启动的定时消息。如果未激活验证链接,则指示系统删除注册人信息的消息也是如此。可以观察到这样的主题:需要在将来安排消息,以重新水合工作流并从上次保留的状态继续

    这就是超时。这些请求是从上次在某个时间点(分钟、小时、天、月、年)留下的时间点开始重新补充/继续saga/工作流的请求

    这就是这种工作流作为传奇的样子(过于简单,没有考虑所有的边缘情况)

    超时只不过是被延迟的普通的
    IMessage
    s。此示例中使用的超时为

    class NoResponseFor24Hours : IMessage {}
    class NoResponseFor48Hours : IMessage {}
    
    希望这澄清了一般的概念,它们是什么以及如何使用。我没有进入,其他一些细节可以在你提到的文档站点上找到。这就引出了下一点

    我已经阅读了他们网站上的文档多次。真是太可怕了。我一次又一次地阅读同样的文章,我无法理解他们想要达到什么目的

    该网站有一个反馈机制,你绝对应该提供。

    此外,互联网上几乎没有与此相关的资源

    希望看到你就这个话题发表一篇博客(或一系列文章)。通过这样做,你将做出积极的贡献


    完整免责声明:我在NServiceBus上工作

    感谢您的精彩解释,Seanytime。请不要犹豫,通过“反馈”按钮在网站上提供反馈。在Sagas或任何其他您在.lol++上遇到问题的文档中,我正要在superuser(StackExchange)上问同样的问题,但是感谢Sean Feldman的回答
    class WorkflowState : ContainSagaData
    {
      public string RegistrationEmail { get; set; }
      public bool ConfirmationReceived { get; set; }
    }
    
    class NoResponseFor24Hours : IMessage {}
    class NoResponseFor48Hours : IMessage {}