我如何异步处理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"))

显然不一定像那样,只是认为这将有助于解释我要做的事情。

我已经看到在泽西岛有某种支持。我想找到一个替代方案,但如果没有其他可用的话,它将使用它。

sses在Javaee 8到Jax-rs 2.1中可用,Javax.ws.rs.sse软件包。与可以同步或异步的请求和响应不同,SSE本质上是异步的。

有关SSES的演示,请查看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();

没有用于(RE)连接和关闭的内置处理程序,但是您可以自定义一些具有相同效果的东西。

JAX-RS 2.1在(至少)中实现:

  • 泽西岛2.26,其中包含在Glassfish 5和Payara 5 Alpha/napshot/Pre-Release中。
  • Resteasy 4.0.0.beta1(不到一个月前发布),据报道在Wildfly 10及以上工作,尽管我认为只有Wildfly 12将实施完整的Javaee 8(公告随着时间的变化而变化...)。

最新更新