使用WebFlux Framework进行设计是否正确?

时间:2018-08-06 07:28:20

标签: spring spring-boot spring-webflux

已编写了一个微服务(使用webFlux),该微服务又调用了其他三个微服务(不使用webflux)。新的微服务使用flatmap调用其他三个。控制器返回Mono。这是正确的设计。我需要pushlishOn吗?

Mono<String> result  =service1.api(input)
.flatmap(innput-> service2.api).flatmap(input-> service3.api);

并且Controller也返回Mono。设计是否正确。它会以非阻塞方式工作吗?

1 个答案:

答案 0 :(得分:1)

publishOn方法不会将代码更改为非阻塞代码或阻塞代码。它所做的只是迫​​使下游运算符在不同的线程中运行。但是,如果在这些线程中进行的服务调用被阻塞,那么使用publishOn只会阻塞另一个线程。

因此,要回答“它将以非阻塞方式工作”,实际上取决于您如何实现service1.api()service2.api()service3.api()。如果他们同步获取您的数据,那么无论您做什么,该数据仍将处于阻塞状态。

但是,例如,如果您使用新的WebClient API从三个微服务正确地反应性地获取数据,那么是的,它应该是非阻塞的。