Spring WebFluxでエラー処理を実装する方法に関する良い例を見つけるのに苦労しています。Spring WebFlux Broken Streamエラー処理
処理したいユースケースは、ストリームが予期せず終了したことをHTTPクライアントに通知することです。私が何を発見したのは、ストリーム処理が終了したとき、例えばx項目が処理された後にRuntimeExceptionを発生させるなどの処理が、あまりにも上手く処理されるということです。例外が発生して接続が閉じられるまで、クライアントはすべての項目をフラッシュします。クライアントが関心を持つ限り、要求は成功しました。次のコードは、これが設定されている方法を示しています。
public Mono<ServerResponse> getItems(ServerRequest request) {
Counter counter = new Counter(0);
return ServerResponse
.ok()
.contentType(MediaType.APPLICATION_STREAM_JSON)
.body(operations.find(query, Document.class, "myCollection")
.map(it -> {
counter.increment();
if(counter.getCount() > 500) {
throw new RuntimeException("an error has occurred");
}
return it;
}), Document.class);
}
エラーを処理し、ストリームが予期せず終了したことをHTTPクライアントに通知する推奨方法は何ですか?
返信が遅れるのをお詫び申し上げます。バックエンドのmongoサーバー接続がダウンした場合、エラーが発生したことをクライアントに通知し、構成されたとおりに再試行できるようにしたいとします。非反応性システムでは、これは500ステータスコードと通信されている可能性があります。このシナリオでサーバー送信イベントをもう一度お勧めしますか?エラーイベントがポンピングされる前にエラーがストリームを閉じることはありませんか? – Ellis
要件をさらに説明した後、提案されている解決策の1つは、後続のHTTPヘッダーを使用して成功または失敗を通知することです。ストリームの完了時またはエラー時にWebFluxでこれらを設定するメカニズムはありますか? – Ellis
現在、Spring WebFluxでは末尾のヘッダはサポートされていません。私はそれらが最初にSSEと互換性があるかどうかわかりません。 –