我正在使用webflux开发一个sse客户机。我想实现的是以某种方式设置客户机
-
如果SSE服务器暂时不可用,它将自动重新连接到SSE服务器
-
它还可以在运行时连接,以防SSE服务器从一开始就不存在。
然而,据我所知,基于JavaScript的客户机基本上能够实现(1)和(2)。
我的问题是:有没有一种方法可以配置WebFlux客户端来显示所需的行为(1)和(2)(理想情况下是通过构建器和流畅的编码风格“声明性地”显示)-我没有找到任何关于如何做到这一点的信息,但是,我假设这些是SSE客户机的标准要求。
下面是我用于测试的基本代码:
final SslContext sslContext
= SslContextBuilder
.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build();
final HttpClient httpClient
= HttpClient
.create()
.secure(t -> t.sslContext(sslContext));
final WebClient client
= WebClient
.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient))
.build();
final ParameterizedTypeReference<ServerSentEvent<String>> type = new ParameterizedTypeReference<ServerSentEvent<String>>() {};
final Flux<ServerSentEvent<String>> eventStream
= client.get()
.uri(endpointURL)
.exchange()
.flatMapMany(it -> it.bodyToFlux(type))
.repeat();
eventStream
.subscribe(
this::updateInformation
, error -> LOGGER.error("Error - {}", error.getMessage())
, () -> LOGGER.info("Got event stream completion signal."));