a20*_*umb 2 spring asynchronous event-driven microservices angular
在我的 Angular UI 中,我从 API 网关调用了一个端点,例如:
this.http.post(`/order`).subscribe(order => addNewOrderToList(order));
Run Code Online (Sandbox Code Playgroud)
根据微服务的最佳实践,/order处理程序应该发布一个由一个或多个微服务使用的事件,而不是使用同步 REST 相互调用。因此,我编写了以下处理程序:
@RequestMapping
public Future<Order> addOrder() {
CompletableFuture<Order> future = new CompletableFuture<>();
// publish event
// ...
// wait for final event raised by a service.
future.complete(createdOrder);
return future;
}
Run Code Online (Sandbox Code Playgroud)
从 UI 的角度来看,在我的端点返回新订单之前,用户不是不会看到新订单吗?我觉得即使后端是异步的,UI 仍然是同步的。在这种情况下,改进 UI 的最佳做法是什么?
也许你应该做的是在这种情况下接受异步和最终一致性。
您的 HTTP 端点在调用时实际上什么都不做,它只接受 UI 命令,并将其排入队列以供其他后端微服务最终处理,对吗?
因此,您可能应该做的只是接受命令,验证它,将它排入队列,然后向客户端返回 HTTP 状态代码202 Accepted。您可以在响应中包含一个 ETA 标头,指示客户端何时可以轮询另一个端点以检查结果是否准备就绪。如果您遵循真正的 RESTful 方法,则可以包含指向客户端可在准备好时用于轮询结果的资源的链接。
您可能需要阅读以下文章:
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |