我遵循jersey文档“在jersey客户端中使用sse事件”中给出的示例:
import javax.ws.rs.sse.SseEventSource;
...
Client client = ClientBuilder.newBuilder().build();
WebTarget target = client.target("http://example.com/events");
SseEventSource sseEventSource = SseEventSource.target(target).build();
sseEventSource.subscribe((event) -> System.out.println(event.getName() + "; "
+ event.readData(String.class)));
sseEventSource.open();
首先,文档中似乎有错误。该方法基于jax-rsapi-javadoc register
,不是 subscribe
.
我的客户端代码如下所示:
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.sse.InboundSseEvent;
import javax.ws.rs.sse.SseEventSource;
...
Client client = ClientBuilder.newClient();
WebTarget statsTarget = client.target( "http://localhost:8080/notifications/stats");
SseEventSource statsES = SseEventSource.target( statsTarget).build();
statsES.register( (statsEvent) -> handleStatsEvent( statsEvent),
(t) -> handleStatsError( t));
statsES.open();
boolean isOpen = statsES.isOpen();
Thread.sleep( 60000);
statsES.close();
``` `isOpen` 是假的。不会引发异常。未创建日志。未调用错误处理程序。
我已经登录到服务器,并且可以看到发出了一个请求(并且返回了一个错误-这是一个单独的问题)。如果我将url更改为不存在的主机,仍然没有反馈。
使用 `curl -v -H "Accept: text/event-stream" http://localhost:8080/notifications/stats` 我在服务器日志中看到请求,并得到错误响应。
我用的是泽西2.26。当我使用2.25.1时,我得到一个运行时异常(classnotfoundexception),因为没有 `jersey-hk2` 2点26分之前。
我的客户机代码中有什么错误,我没有得到任何类型的错误反馈吗?
暂无答案!
目前还没有任何答案,快来回答吧!