微服务异步操作HTTP响应

时间:2017-05-11 08:53:19

标签: http asynchronous architecture microservices event-driven

我们正在构建一个微服务应用程序,客户可以在其中创建项目。下图显示了此过程的技术流程:

Create Project Flow

我的问题: API网关应该返回客户端的HTTP响应(步骤1)?

我最初的想法是回馈202,但问题是我还不知道Location/projects/{id}),因为项目的ID 将在Project Management Service中创建。

1 个答案:

答案 0 :(得分:0)

考虑到新创建的project实体的ID在请求时是未知的(即它是在插入数据库之后生成的),您确实无法生成project资源的URL

相反,您可以在发送到总线之前为命令分配一个ID(即1234-abcd-5678-efgh),并在API网关本身上跟踪其执行状态。然后,您可以使用命令执行状态端点(如/commands/1234-abcd-5678-efgh)响应客户端,以便通过轮询进行查询。

替代方案是使用另一种可以保留和提供唯一ID的服务,但是您必须对其进行阻止调用,这会损害可扩展性。或者,您可以在API网关本身(在同一节点上)托管此服务,以最大限度地减少延迟。此外,在项目创建失败的情况下存在丢失某些ID的风险,但这可以通过在这些情况下释放这些ID来补偿(从而增加架构复杂性)。

第三个解决方案可能是使用project surogate ID,如GUID,被指定为project的属性,包含在命令中,具有可以替代身份的目的仅用于该过程的预创建阶段。然后,对客户端的响应可能如下所示:/projects/by-guid/1234-abcd-5678-efgh在创建project后,GET url会永久重定向到最终项目网址。< / p>