Java 如何异步处理SSE事件?
最理想的情况是,我希望能够这样做Java 如何异步处理SSE事件?,java,jakarta-ee,jax-rs,server-sent-events,java-ee-8,Java,Jakarta Ee,Jax Rs,Server Sent Events,Java Ee 8,最理想的情况是,我希望能够这样做 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.onC
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"))
显然不一定要完全像那样,只是觉得这会有助于解释我想做什么
我看到在泽西岛有人对此表示支持。我想找到一个替代方案,但如果没有其他可用的话,我会使用它。SSE在JavaEE8中通过JAX-RS2.1在包中提供。与同步或异步的请求和响应不同,SSE本质上是异步的 有关sse的演示,请参见David Delabassee。您的代码(仅限于客户端)如下所示:
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();
Client-Client=ClientBuilder.newClient();
WebTarget=client.target(“http://someendpoint");
SSEventSource eventSource=SSEventSource.target(目标)
.重新连接(5,时间单位。秒)
.build();
eventSource.register(有效负载->系统.out.println(有效负载),//消费者
错误->错误。printStackTrace(),//消费者
()->System.out.println(“无更多事件”);
eventSource.open();
//最终
eventSource.close();
没有用于(重新)连接和关闭的内置处理程序,但是您可以自定义一些具有相同效果的处理程序
JAX-RS 2.1在(至少)中实现:
- 2.26,包含在Glassfish 5和Payara 5 alpha/快照/预发布中
- 4.0.0.Beta1(发布时间不到一个月),据报道它可以在Wildfly 10及以上版本上工作,但我认为只有Wildfly 12能够实现完整的JavaEE 8(公告会随着时间的推移而变化…)
reconnectingEvery()
做什么?另外,我不能直接使用JAX-RS吗,当我尝试创建一个新的客户端时,我得到了java.lang.ClassNotFoundException:org.glassfish.jersey.client.JerseyClientBuilder
@CalebBassham,我的意思是没有“重新连接时”事件处理程序,您可以插入(每次重新连接时执行的代码),比如“收到事件时”或“收到错误时”@CalebBassham不知道你所说的“直接使用JAX-RS”是什么意思。JAX-RS是一个规范,您必须使用一个实现它的库,比如Jersey或RESTEasy。看起来您正在使用Jersey,但是如果您对代码有特定问题,请提出新问题。如果你想的话,你可以在这里给我链接。当我说“直接使用它”时,我的意思是像得到maven依赖项一样,只使用它而不是球衣或其他东西。当我试图打开SSEventSource时,它会给我一个异常。我的问题是,我是否必须使用Jersey(或其他实现)才能使用JAX-RS?