我正在创建一个基于 Jax-rs 服务器发送事件的项目。我有一个小问题。当服务器打开时,我的客户端应用程序 (Jax-rs SseEventSource) 工作正常,但是当我重新启动服务器(以模拟可能的错误)时,客户端将不再接收事件。我知道服务器何时重新启动客户端会关闭其连接,但我想知道的是如何在服务器再次启动时让我的客户端重新连接。我已经在客户端尝试过这个,但没有用。
public void consumeEvents() {
WebTarget target = ClientBuilder
.newClient()
.target(URL);
eventSource = SseEventSource.target(target).build();
eventSource.register(eventConsumer, onError);
eventSource.open();
}
private final Consumer<InboundSseEvent> eventConsumer =
event -> {
JsonObject jsonEvent = Json.createObjectBuilder()
.add("id", event.getId())
.add("data", event.readData())
.build();
logger.info(jsonEvent.toString());
};
private final Consumer<Throwable> onError =
error -> {
logger.error(error.getMessage(), error);
logger.info("Trying to reconnect...");
LockSupport.parkNanos(3_000_000_000L);
eventSource.open();
};