【问题标题】:Chaining events/commands?链接事件/命令?
【发布时间】:2012-08-10 21:02:53
【问题描述】:

我正在尝试使用 NServiceBus 实现一个功能,但不确定要在此处使用的模式。 (我对 NServiceBus 还很陌生)

我将尝试解释我的不确定性来自哪里:

用户交互触发 MVC 控制器发送命令以执行域操作。此命令引发事件以通知其他人发生了这种情况。

订阅此事件的处理程序确定是否应该发生另一个域操作。

这是我不清楚要遵循的正确模式的地方。此时应该事件处理程序:

  • 只需进行所需的更改?
  • 发送一个新的命令来做呢?如果是,请将其发送回原始服务/进程?
  • 另一种选择?

我的一部分想知道我是否应该使用进程内域事件来处理这个问题,但我认为第一个命令不应该在第二个命令返回之前等待。事实上,它可能会在很久以后发生。这就是为什么我选择使用总线来异步处理它的原因。此外,一旦第二次操作完成,将需要生成一封电子邮件。是否应该从另一个事件/命令触发?

任何和所有指导表示赞赏。

【问题讨论】:

  • 因为还没有答案 - 你能用具体的名字来描述问题域吗?

标签: nservicebus


【解决方案1】:

如果不需要等待第二个动作,那么是的,它应该异步完成,所以第一个命令的处理应该发布一个 NServiceBus 事件。该事件的处理程序将(可能)托管在一个单独的端点中,然后该端点将完成工作 - 无需在那里发送另一个命令。

【讨论】:

  • 因此,如果事件处理程序可以修改域状态,那么我认为它也可以发布更多事件。我想我正在为 NServiceBus 端点是否应该代表有界上下文或应用程序/基础设施进程而苦苦挣扎。或根据需要组合使用。
  • 是的 - 事件处理程序将“修改域状态”作为其工作的一部分是完全可以的。
【解决方案2】:

为了补充 Udi 的答案,如果原始端点处的服务确实应该负责该命令的行为,我只会转身并将命令发送回原始服务。否则,接收事件的服务(端点)应该只做它需要做的事情来响应事件(这听起来像你的情况)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多