@LoadBalanced WebClient和普通WebClient

时间:2019-05-29 16:13:10

标签: spring-cloud-netflix

在微服务中注入两个WebClient bean是必不可少的吗?一个用于客户端负载平衡(Eureka,Ribbon),另一个用于请求第三方的API。


当我只注入一个@LoadBalanced Webcliet时,我得到了这样的响应。阅读官方指南后,我就知道了原因。

  

2019-05-29 23:03:35.440 WARN 21818 --- [ctor-http-nio-2] c.l.r.LoadBalancerExchangeFilterFunction:负载均衡器不包含服务XXX的实例


当然,如果有两个WebClient bean,它会很好地工作。


PUT

我是否可以在Eureka Server,Eureka Client或Ribbon中进行一些配置,以便直接与第三方的API交互?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用限定符在应用中同时具有负载均衡和非负载均衡WebClient,就像这样:

@Configuration
public class WebClientConfig {

    @Bean
    @LoadBalanced
    @Qualifier("loadBalancedWebClient")
    WebClient.Builder loadBalancedWebClientBuilder() {
        return WebClient.builder();
    }

    @Bean
    @Qualifier("webClient")
    WebClient.Builder webClientBuilder() {
        return WebClient.builder();
    }
}

,然后您可以通过@Qualifier注入它:

@Component
public class VerificationServiceClient {

    private final WebClient.Builder webClientBuilder;

    VerificationServiceClient(@Qualifier("loadBalancedWebClient") WebClient.Builder webClientBuilder) {
        this.webClientBuilder = webClientBuilder;
    }