在异步微服务上向客户端确认
Acknowledgement to clients on asynchronous microservice
我到处都读到,服务到服务的调用在微服务中应该是异步的。当请求必须经过 2 个或多个异步服务时,我们如何进行客户端确认?
这是我的实时场景。我们正在我们的组织中开发电子邮件发送功能。我们计划按以下顺序为此提供 4 API 项服务。
- Public API - 将电子邮件功能公开给 public
- 验证API - 验证电子邮件和其他字段的真实性
- 模板获取API - 从database/CMS获取电子邮件模板并准备要发送的最终内容
- 邮件发送API - 将收到收件人和邮件内容
问题是,如果成功,我们必须使用某个 id 确认发起请求的客户端,否则必须 return 错误代码。如果我们必须采用将异步服务应用于服务调用的最佳实践,我们如何才能通过电子邮件发送 API(final API) 来确认客户端?
简单的方法是创建一个 token 客户端可以在以后检查请求的状态。您需要将 GetStatus 方法添加到 public API 到 return 请求时的状态。
在收到初始请求时创建一个 GUID,return 此 令牌 到调用客户端。这将是他们确认已收到请求。保留 token 并将其与请求的当前状态一起记录,该状态最初将被接收。使用请求调用验证 API 并包含 令牌 。
当验证 API 完成其工作时,它将更新请求的状态。如果存在验证问题,它将使用适当的错误消息更新状态,否则会将状态更新为已验证,然后调用模板 API,传递请求和 token。
使用模板 API 和发送 API 重复上述操作。当发送 API 完成其工作时——它应该简单地将请求的状态更新为完成。
客户端可以随时调用 API 上的 GetStatus 方法,只需提供由其初始请求提供的 令牌 return。如果提供了不存在的 GUID,该方法应该只是 return 请求的状态或未找到状态。
这样做的好处是您不必陷入回调和其他疯狂的事情,调用客户端只需担心两件事:发出请求并检查其状态。客户可以根据自己的意愿关心或不关心状态。它还允许您在链中添加更多服务,而无需重写外部接口。
细微差别涉及如何以及多长时间保持请求状态。这实际上取决于系统需求和可用资源。可以是数据库、缓存或某种组合。
我到处都读到,服务到服务的调用在微服务中应该是异步的。当请求必须经过 2 个或多个异步服务时,我们如何进行客户端确认?
这是我的实时场景。我们正在我们的组织中开发电子邮件发送功能。我们计划按以下顺序为此提供 4 API 项服务。
- Public API - 将电子邮件功能公开给 public
- 验证API - 验证电子邮件和其他字段的真实性
- 模板获取API - 从database/CMS获取电子邮件模板并准备要发送的最终内容
- 邮件发送API - 将收到收件人和邮件内容
问题是,如果成功,我们必须使用某个 id 确认发起请求的客户端,否则必须 return 错误代码。如果我们必须采用将异步服务应用于服务调用的最佳实践,我们如何才能通过电子邮件发送 API(final API) 来确认客户端?
简单的方法是创建一个 token 客户端可以在以后检查请求的状态。您需要将 GetStatus 方法添加到 public API 到 return 请求时的状态。
在收到初始请求时创建一个 GUID,return 此 令牌 到调用客户端。这将是他们确认已收到请求。保留 token 并将其与请求的当前状态一起记录,该状态最初将被接收。使用请求调用验证 API 并包含 令牌 。
当验证 API 完成其工作时,它将更新请求的状态。如果存在验证问题,它将使用适当的错误消息更新状态,否则会将状态更新为已验证,然后调用模板 API,传递请求和 token。
使用模板 API 和发送 API 重复上述操作。当发送 API 完成其工作时——它应该简单地将请求的状态更新为完成。
客户端可以随时调用 API 上的 GetStatus 方法,只需提供由其初始请求提供的 令牌 return。如果提供了不存在的 GUID,该方法应该只是 return 请求的状态或未找到状态。
这样做的好处是您不必陷入回调和其他疯狂的事情,调用客户端只需担心两件事:发出请求并检查其状态。客户可以根据自己的意愿关心或不关心状态。它还允许您在链中添加更多服务,而无需重写外部接口。
细微差别涉及如何以及多长时间保持请求状态。这实际上取决于系统需求和可用资源。可以是数据库、缓存或某种组合。