首页 > 解决方案 > 流中出现故障时如何重新连接?

问题描述

我有一个看起来像这样的代码

@PostConstruct
public void setUpStreamer() {
    WebClient.create(daemonEndpoint)
        .get()
        .uri("/events)
        .retrieve()
        .bodyToFlux(String.class)
        .flatMap(Mono::justOrEmpty)
        .map(s -> {
            try {
                return mapper.readValue(s, Map.class);
            } catch (IOException e) {
                log.warn("unable to parse {} as JSON", s);
                return null;
            }
        })
        .flatMap(Mono::justOrEmpty)
        .subscribe(
            events -> {
                log.info("service event(s) detected");
            },
            throwable -> log.error("Error on event stream: {}", throwable.getMessage(), throwable),
            () -> log.warn("event stream completed")
        );
}

我想要做的是流失败,基本上事件端点决定断开或重新启动,流媒体将再次重新创建。

像这样的东西

            throwable -> {
                log.error("Error on event stream: {}", throwable.getMessage(), throwable);
                setUpStreamer();
            },
            () -> {
                log.warn("event stream completed");
                setUpStreamer();
            }

这是做到这一点的唯一方法,还是有一些更好的注释或运算符可以为我完成工作?

标签: javaspring

解决方案


推荐阅读