将 NServiceBus Sagas 与 REST API 集成/交互的最明智的方法是什么?
场景如下,
- 我们有一个负载平衡的 REST API。根据负载,我们可以添加更多节点。
- REST API 是围绕 DomainServices API 的包装器。这意味着可以直接使用 API。
- 我们想将 Sagas 用于工作流并实现 NServiceBus Distributor 以进行横向扩展。
问题是,如果我们使用 Sagas 的 REST API,实际处理发生在 API 场中。这在某种程度上违背了实现分发者模式的目的。
另一方面,直接从 Sagas 使用 DomainServives API,允许在工作节点内进行本地处理。使用这种方法,我们将不得不在多个位置维护 API 程序集,但吞吐量可能会更高。
我试图了解最好的方法。就个人而言,我更喜欢使用 API(如果随时可用),但这可能会给系统带来麻烦,并且与进程内相比可能需要更长的时间才能完成。
一个典型的序列可能类似于发布在线广告,
- 广告商通过 Web 应用程序提交新的广告请求。
- Web 应用程序调用相关的 API 端点并发送命令消息。
- 命令消息启动一个新的发布广告 Saga 实例。
- Saga 发送一个命令来验证调用者权限(进程内/进程外 API 调用)
- Saga 发送一个命令来验证广告数据(进程中/进程外 API 调用)
- Saga 向欺诈服务(第三方服务)发送命令
- 一旦内容和欺诈验证成功,
- Saga 向计费系统发送命令。
- Saga 调用 API 调用以保存添加详细信息。(进程中/进程外 API 调用)
这种情况一直持续到广告过期,有许多重试和失败条件路径。