, 나는 API 게이트웨이에서 엔드 포인트를 호출 microservices의 모범 사례에 따르면비동기 마이크로 서비스 통신은 UI의 관점에서 어떻게 더 나은 성능을 낼 수 있습니까? 같은 내 코너 UI에서
this.http.post(`/order`).subscribe(order => addNewOrderToList(order));
의 /order
핸들러는 하나 또는 그 이상의 microservices에 의해 소비되는 이벤트를 게시, 대신한다 동기 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;
}
을 내 엔드 포인트가 새로운 질서를 반환 할 때까지 해당 사용자가 새로운 질서를 볼 수 없습니다 아닌가요? 백엔드가 비동기 일지라도 UI가 여전히 동기화되어 있다고 느낍니다. 이 경우 UI를 향상시키는 가장 좋은 방법은 무엇입니까?
"UI에서 최종 일관성을 처리하는 4 가지 방법"문서는 내 문제점을 설명합니다. 마침내 기사에서 해결책 3을 선택했습니다. "거짓". 그래서 저는 백엔드를 호출하자마자 Angular라는 새로운 Order를 만들었습니다. 백엔드는 id와 같은 위조 된 객체를 만드는 데 필요한 정보를 반환합니다. 하지만 어쨌든, 사용자가이 가짜'주문 '과 즉시 상호 작용하면 안전하지 않습니다. (실제'주문 '이 저장되기까지는 몇 초가 걸립니다.)이 UI 문제에 대해 더 많은 링크 또는 패턴을 제공 할 수 있다면 크게 감사하겠습니다. –
분명히 백엔드가 202 Accepted로 응답하면 백엔드에서 400 또는 500 개의 오류가 발생할 수 있기 때문에 가짜로 만들 것입니다.이 경우 사용자는 위조를해서는 안됩니다. 사용자가 백엔드에서 완료되기 전에 주문과 상호 작용하면 제한된 기능을 제공 할 수 있습니다. 프런트 엔드에 이미 알려진 사소한 세부 사항 만 볼 수 있으며, 일단 백엔드에서 주문이 구체화되면 나머지 기능을 사용할 수 있음을 사용자에게 알릴 수 있습니다. 해당 기능이 추가되면 사용자에게 알릴 수 있습니다. –