首页 > 解决方案 > 使用重新连接功能编写基于 WebFlux 的 SSE 客户端

问题描述

我正在使用 WebFlux 开发 SSE 客户端。我想要实现的是以某种方式设置客户端,即

  1. 如果 SSE 服务器暂时不可用,它会自动重新连接到 SSE 服务器
  2. 它也可以在运行时连接,以防 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."));

标签: javaclientfluxspring-webfluxserver-sent-events

解决方案


推荐阅读