2017-12-03 23 views
1

最適には、私はちょうどそれは私がやろうとしたものを説明するのに役立つだろうと思った、まさにそのようにする必要はありません。もちろん、このSSEイベントを非同期で処理する方法はありますか?

Request request = new Request("http://someendpoint") 
request.onMessage(payload -> System.out.println(payload)) 
request.onError(error -> error.printStackTrace()) 
request.onClose(() -> System.out.println("closed")) 
request.onConnect(isReconnect -> System.out.println("connected")) 

ような何かをできるようにしたいと思います。

私はジャージーでこれについて何らかのサポートがあることを知りました。私は代替案を探していますが、他に何も利用できない場合はそれを使用します。

+0

私はあなたがあなたが質問 – ezzzCash

+0

に懸賞金をかけたときに、「ApacheのHTTPコンポーネント」への具体的な何かを探している場合、あなたのようなあなたの質問にタグを付けなければならない50個の評判ポイントを失うことを知っ願っています。関連性のないタグを削除することを検討します。つまり、あなたの質問に特定のKotlin固有のタグが表示されません。あなたの質問に右にタグを付けることで、答えを知っている人の注意を引く可能性が高まります。 – Holger

+0

@Holger私はKotlinタグを削除しました。削除するのを忘れました。 Apache HTTPコンポーネント固有のものである必要はありません。私がJerseyを使いたくない理由は、それが完全な他のHTTPクライアントでもあり、すでにApacheを使用しているからです。混乱させて申し訳ありません。 –

答えて

2

SSEは、javax.ws.rs.sseパッケージのJavaEE 8〜JAX-RS 2.1で利用できます。非同期または非同期の要求および応答とは異なり、SSEは性質上非同期です。

SSEのデモンストレーションについては、video by David Delaba sse eをご覧ください。あなたのコード(クライアント側のみ)だろうが、このようなものになります。

Client client = ClientBuilder.newClient(); 
WebTarget target = client.target("http://someendpoint"); 

SseEventSource eventSource = SseEventSource.target(target) 
              .reconnectingEvery(5, TimeUnit.SECONDS) 
              .build(); 
eventSource.register(payload -> System.out.println(payload), // Consumer<InboundSseEvent> 
        error -> error.printStackTrace(),   // Consumer<Throwable> 
        () -> System.out.println("no more events")); 
eventSource.open(); 
// and eventually 
eventSource.close(); 

が(再)接続と終了のための組み込みのハンドラはありませんが、しかし、あなたは同じ効果を持つために何かをカスタマイズすることができます。

JAX-RS 2.1は、(少なくとも)に実装されている:Glassfishの5及びペーシュ・カショーロ5アルファ/スナップショット/プレリリースに含まれる

    Jersey
  • 2.26を、。
  • RESTEasy 4.0.0.Beta1(1か月以内にリリース)、Wildfly 10以上で動作することが報告されていますが、Wildfly 12のみがJavaEE 8の完全な実装となると思います。
+0

"(再)接続とクローズのための組み込みハンドラがない"場合、 'reconnectingEvery()'は何をしますか? –

+0

また、JAX-RSを直接使用することはできません。新しいクライアントを作成しようとすると、java.lang.ClassNotFoundException:org.glassfish.jersey.client.JerseyClientBuilder'を取得します。 –

+0

@CalebBassham 「再受信時」や「受信エラー時」のように何かを(再接続毎に実行するコードに)プラグインできる「再接続時」のイベントハンドラはありません。 – user1803551

関連する問題