前言
在Spring Cloud项目中,通常我们会使用Spring Cloud OpenFeign来实现服务间的相互调用,但当我们在项目中用到webflux框架时,openfeign阻塞请求,导致程序报错,原因:openfeign并不支持Reactive。解决方法:使用WebClient+loadbalance代替open feign。
关键代码
TestAppClient.java
package show.lmm.invokeapp.core.client;
import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction;
import org.springframework.stereotype.Component;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
@Component
public class TestAppClient {
private final WebClient webClient;
public TestAppClient(
ReactorLoadBalancerExchangeFilterFunction lbFunction
) {
this.webClient = WebClient.builder()
.filter(lbFunction).build();
}
public Mono<String> getServerInfo(String info) {
final String url = String.format("http://test-app/test/get/server_info?info=%s",info);
return webClient.get().uri(url)
.retrieve().bodyToMono(String.class);
}
}
示例
https://gitee.com/luoye/examples/tree/main/webflux_webclient_loadbalance