SSE 在javax.ws.rs.sse包中的 JavaEE 8 到 JAX-RS 2.1 中可用。与可以是同步或异步的请求和响应不同,SSE 本质上是异步的。
有关 SSE 的演示,请查看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 在(至少)中实现:
- Jersey 2.26,包含在 Glassfish 5 和 Payara 5 alpha/snapshot/pre-release 中。
- RESTEasy 4.0.0.Beta1(不到一个月前发布),据报道可在 Wildfly 10 及更高版本上运行,尽管我认为只有 Wildfly 12 将实现完整的 JavaEE 8(公告随时间而变化......)。