Я разрабатываю SSE-клиент с использованием WebFlux.Чего я хочу добиться, так это настроить клиента таким образом, чтобы
- он автоматически переподключался к 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."));