インターフェース SseEventSource
- すべてのスーパーインターフェース:
AutoCloseableSE
public interface SseEventSource extends AutoCloseableSE
incoming Server-Sent Eventsを読み取って処理するためのクライアント。このクラスの SSE イベントソースインスタンスはスレッドセーフです。新しいインスタンスをビルドするには、
SseEventSource.target(endpoint)ファクトリメソッドを使用して新しいイベントソースビルダーを取得します。このビルダーをさらにカスタマイズして、最終的に新しい SSE イベントソースを作成するために使用できます。SseEventSourceが作成されると、関連するweb targetへのopen a connectionに使用できます。接続を確立した後、イベントソースは受信受信イベントの処理を開始します。新しいイベントが受信されるたびに、登録されたイベントコンシューマーでConsumer<InboundSseEvent>#accept(InboundSseEvent)SE メソッドが呼び出されます。サポートの再接続
SseEventSourceは、最後に受信した SSE イベントidフィールド値に基づく欠落イベントの配信のネゴシエーションを含む、接続損失からの自動回復をサポートします。ただし、このフィールドがサーバーによって設定され、ネゴシエーション機能がサーバーによってサポートされている場合に限ります。接続が失われた場合、最後に受信した SSE イベントidフィールド値が、SSE エンドポイントに送信される新しい接続リクエストの一部として"Last-Event-ID"HTTP リクエストヘッダーで送信されます。このような再接続リクエストを受信すると、このネゴシエーション機能をサポートする SSE エンドポイントは、欠落したすべてのイベントを再生することが期待されます。ただし、これはベストエフォートメカニズムであり、すべてのイベントが損失なく配信されることを保証するものではないことに注意してください。すべてのイベントの受信に依存して、それに応じてクライアントアプリケーションコードを設計するべきではありません。デフォルトでは、SSE エンドポイントへの接続が失われると、イベントソースは SSE エンドポイントへの再接続を試みる前に 500 ミリ秒待機します。ただし、SSE エンドポイントは、送信されたイベントに特別な
retryフィールド値を含めることにより、クライアント側の再試行遅延を制御できます。JAX-RSSseEventSourceは、エンドポイントによって設定された受信 SSE イベントretryフィールド値を追跡し、最後に受信したretryフィールド値を再接続遅延として使用して、それに応じて再接続遅延を調整します。標準の接続損失障害の処理に加えて、JAX-RS
SseEventSourceはさまざまな HTTP レスポンスステータスコードおよびヘッダーに対して異なる動作をします。- 200-"text/event-stream" の
"Content-Type"ヘッダー付き: これは通常の操作です。onEventはイベントごとに呼び出されます。onCompleteは、イベントがなくなると呼び出されます。onErrorは、処理中に回復不能なエラーが発生した場合にのみ呼び出されます。 - 200- サポートされていない、または
"Content-Type"ヘッダーが欠落している: これはエラー状態です。onErrorが呼び出されます。 - 204- これは、サーバーに送信するイベントがないことを示します。
onCompleteのみが呼び出されます。 - 503-
"Retry-After"ヘッダーが有効な値に設定されている場合: これは、サーバーが使用できないが、クライアントは後で再接続する必要があることを示します。再接続する前にクライアントイベントソースが閉じられない限り、コンシューマーは呼び出されません(onCompleteが呼び出されます)。指定された遅延の後、クライアントは自動的に再接続を試行する必要があります。これにより、新しいレスポンスが発生します。 - 503-
"Retry-After"ヘッダーが無効または欠落している: これはエラー状態です。onErrorが呼び出されます。 - その他のステータスコード: これはエラー状態です。
onErrorが呼び出されます。
エラー条件レスポンスの場合、
onErrorコンシューマーに渡されるThrowableは、無効なResponseオブジェクトを含む WebApplicationException である必要があります。登録されたイベントコンシューマーのいずれかで、
Consumer<InboundSseEvent>#accept(InboundSseEvent)SE メソッドの呼び出しが例外をスローした場合、これはエラー状態ではないことに注意してください。onErrorは呼び出されず、イベント処理は停止されません。ユーザーは、イベント処理ロジックの一部として独自に例外を処理することをお勧めします。- 導入:
- 2.1
- 作成者:
- Marek Potociar
ネストされたクラスの概要
ネストされたクラス 修飾子と型 インターフェース 説明 static classSseEventSource.BuilderJAX-RSSseEventSourceビルダークラス。
方法の概要
すべてのメソッド 静的メソッド インスタンスメソッド 抽象メソッド デフォルトメソッド 修飾子と型 メソッド 説明 default voidclose()このイベントソースを閉じます。booleanclose(long timeout, TimeUnitSE unit)このイベントソースを閉じて、内部イベント処理タスクが指定された待機時間まで完了するのを待ちます。booleanisOpen()このイベントソースインスタンスがすでにopenedになっていることを確認してください。voidopen()web targetの基礎となる提供された SSE への接続を開き、受信eventsの処理を開始します。voidregister(ConsumerSE<InboundSseEvent> onEvent)InboundSseEventコンシューマーを登録します。voidregister(ConsumerSE<InboundSseEvent> onEvent, ConsumerSE<ThrowableSE> onError)InboundSseEventおよびThrowableSE コンシューマーを登録します。voidregister(ConsumerSE<InboundSseEvent> onEvent, ConsumerSE<ThrowableSE> onError, RunnableSE onComplete)InboundSseEventおよびThrowableSE コンシューマーと onComplete コールバックを登録します。static SseEventSource.Buildertarget(WebTarget endpoint)新しく準備されたイベントソースインスタンスのさまざまなアスペクトを構成および微調整する便利な方法を提供する新しいevent source builderを作成します。
メソッドの詳細
register
void register(ConsumerSE<InboundSseEvent> onEvent)
InboundSseEventコンシューマーを登録します。特定のコンシューマーは、受信したイベントごとに 1 回呼び出されます。
- パラメーター:
onEvent- イベントのコンシューマー。- 例外:
IllegalArgumentExceptionSE- 提供されたパラメーターがnullの場合。
register
void register(ConsumerSE<InboundSseEvent> onEvent, ConsumerSE<ThrowableSE> onError)
InboundSseEventおよびThrowableSE コンシューマーを登録します。イベントコンシューマーは、受信したイベントごとに 1 回呼び出され、
Throwableコンシューマーは、SseEventSourceで検出された回復不能なエラーが発生したときに呼び出されます。- パラメーター:
onEvent- イベントのコンシューマー。onError- エラーコンシューマー。- 例外:
IllegalArgumentExceptionSE- 提供されたパラメーターのいずれかがnullの場合。
register
void register(ConsumerSE<InboundSseEvent> onEvent, ConsumerSE<ThrowableSE> onError, RunnableSE onComplete)
InboundSseEventおよびThrowableSE コンシューマーと onComplete コールバックを登録します。イベントコンシューマーは、受信したイベントごとに 1 回呼び出され、
Throwableコンシューマーは、SseEventSourceで回復不能なエラーが発生したときに呼び出され、onComplete コールバックは、接続が成功した後、受信するイベントがなくなったときに呼び出されます。onError コールバックが呼び出された場合は、onComplete コールバックは呼び出されないことに注意してください。- パラメーター:
onEvent- イベントのコンシューマー。onError- エラーコンシューマー。onComplete- onComplete ハンドラー。- 例外:
IllegalArgumentExceptionSE- 提供されたパラメーターのいずれかがnullの場合。
target
static SseEventSource.Builder target(WebTarget endpoint)
新しく準備されたイベントソースインスタンスのさまざまなアスペクトを構成および微調整する便利な方法を提供する新しいevent source builderを作成します。- パラメーター:
endpoint- SSE ストリーミングエンドポイント。nullであってはなりません。- 戻り値:
- 指定された SSE ストリーミングエンドポイントを指す新しいイベントソースインスタンスのビルダー。
- 例外:
NullPointerExceptionSE- 提供された Web ターゲットがnullの場合。
open
void open()
web targetの基礎となる提供された SSE への接続を開き、受信eventsの処理を開始します。- 例外:
IllegalStateExceptionSE- イベントソースがすでに開かれている場合。
isOpen
boolean isOpen()
このイベントソースインスタンスがすでにopenedになっていることを確認してください。- 戻り値:
- このイベントソースが開いている場合は
true、それ以外の場合はfalse。
close
default void close()
このイベントソースを閉じます。このメソッドは、内部イベント処理タスクが完了するまで最大 5 秒待機します。
- 次で指定:
- インターフェース
AutoCloseableSE内のclose
close
boolean close(long timeout, TimeUnitSE unit)このイベントソースを閉じて、内部イベント処理タスクが指定された待機時間まで完了するのを待ちます。このメソッドは、シャットダウンリクエスト後にイベント処理タスクの実行が完了するまで、またはタイムアウトが発生するまで、現在のスレッドが中断されるまで、どちらか早い方でブロックします。
イベント処理タスクの待機が中断された場合、このメソッドは
falseを返す前にスレッドのinterruptフラグを復元します。- パラメーター:
timeout- 待機する最大時間。unit- タイムアウト引数の時間単位。- 戻り値:
- このエグゼキュータが終了した場合は
true、終了前にタイムアウトが経過した場合、終了が中断された場合はfalse。