Spring Boot 2 - 将 Mono 转换为 rx.Observable?

Posted

技术标签:

【中文标题】Spring Boot 2 - 将 Mono 转换为 rx.Observable?【英文标题】:Spring Boot 2 - Transforming a Mono to a rx.Observable? 【发布时间】:2018-12-17 04:17:48 【问题描述】:

我正在尝试将 HystrixObservableCommand 与 Spring WebFlux WebClient 一起使用,我想知道是否有一个“干净”的方法可以将 Mono 转换为 rx.Observable。我的初始代码如下所示:

public Observable<Comment> getComment() 

    return webClient.get()
            .uri(url)
            .accept(MediaType.APPLICATION_JSON)
            .retrieve()
            .bodyToMono(Comment.class)
            // stuff missing here :(.

有没有简单的方法?

问候

【问题讨论】:

【参考方案1】:

推荐的方法是使用RxJavaReactiveStreams,更具体地说:

public Observable<Comment> getComment() 

    Mono<Comment> mono = webClient.get()
            .uri(url)
            .accept(MediaType.APPLICATION_JSON)
            .retrieve()
            .bodyToMono(Comment.class);

    return RxReactiveStreams.toObservable(mono); // <-- convert any Publisher to RxJava 1

【讨论】:

【参考方案2】:

你可以使用

Observable.fromFuture(webClient.get()
        .uri(url)
        .accept(MediaType.APPLICATION_JSON)
        .retrieve()
        .bodyToMono(Comment.class).toFuture());

【讨论】:

以上是关于Spring Boot 2 - 将 Mono 转换为 rx.Observable?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spring boot webflux 上从 mono<user> 获取用户名?

Log Spring webflux 类型 - Mono 和 Flux

在 Spring Boot 中使用 Web Client Mono 获取 API 响应错误消息

使用 Spring Boot 2 WebClient 从响应中获取标头

Spring Boot响应式WebClient调用遗留端点

spring-boot-webflux 中未使用配置的 ObjectMapper