は、私のようなAPIゲートウェイからエンドポイントを呼び出す:microservicesにおけるベストプラクティスによると非同期マイクロサービス通信はUIの観点からどのようにしてベターを実行できますか?私の角度UIで
this.http.post(`/order`).subscribe(order => addNewOrderToList(order));
、/order
ハンドラは、一つ以上のmicroservicesによって消費するイベントを発行する代わりに、必要があります同期RESTを使用して互いに呼び出します。だから、私は次のハンドラ記述:UIの観点から
@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;
}
を、私のエンドポイントが新しい順に返されるまで、そのユーザーが新しい順は表示されませんではないでしょうか?バックエンドが非同期であっても、UIはまだ同期しているように感じます。この場合のUIを改善するベストプラクティスは何ですか?
「UIの最終的な一貫性を処理する4つの方法」の記事で私の問題が説明されています。私は最終的に記事の中で解決策3を選択します:「それを偽造する」。そこで、私はバックエンドと呼ばれるとすぐにAngularの新しいOrderを作成しました。バックエンドはidのような偽のオブジェクトを作成するのに必要な情報を返します。しかし、どういうわけか、ユーザーがこの偽の「注文」とすぐにやりとりすると、私は安全ではないと感じます(実際の「注文」が保存されるまで数秒かかる)。あなたがこのUIの問題についてより多くのリンクやパターンを提供できるなら、私はそれを高く評価します。 –
バックエンドが202 Acceptedと応答した場合、バックエンドから400または500のエラーが発生する可能性がありますので、偽装しないでください。あなたができることは、ユーザーがバックエンドで完了する前に注文とやり取りする場合、限られた機能しか提供できないということです。フロントエンドではすでに知られている小さな部分しか見ることができず、バックエンドで注文が再確認されたら残りの機能が有効になることをユーザーに知らせることができます。あなたはそれが起こったときにユーザーに通知する機能を追加することができます。 –