首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >启用了LoadBalanced WebClient和Eureka WebClient

启用了LoadBalanced WebClient和Eureka WebClient
EN

Stack Overflow用户
提问于 2021-05-22 12:51:44
回答 1查看 744关注 0票数 0

在反应性微服务中,我注册到Eureka,并使用@LoadBalanced WebClient从实例获得响应。仅在尤里卡注册就可以了,但是一旦我添加了@LoadBalanced WebClient,就会得到以下错误。

代码语言:javascript
复制
2021-05-22 14:31:14.835  INFO 1852 --- [           main] com.netflix.discovery.DiscoveryClient    : Getting all instance registry info from the eureka server
2021-05-22 14:31:14.985 ERROR 1852 --- [           main] scoveryClientServiceInstanceListSupplier : Exception occurred while retrieving instances for service 127.0.0.1

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'scopedTarget.eurekaClient': Requested bean is currently in creation: Is there an unresolvable circular reference?
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274) ~[spring-beans-5.3.6.jar:5.3.6]

我假设它与配置eureka.client.webclient.enabled=true相关。

应用

这是我的应用程序及其配置的关键部分。

application.yml

代码语言:javascript
复制
eureka:
  client:
    serviceUrl:
      defaultZone: ${vcap.services.eureka-service.credentials.uri:http://127.0.0.1:8761}/eureka/
    webclient:
      enabled: true

ConsumerApplication.java

代码语言:javascript
复制
@SpringBootApplication
public class ConsumerApplication {

    public Mono<ServerResponse> handler(ServerRequest request) {
        return webClientBuilder()
                .baseUrl("http://producer")
                .build()
                .get()
                .retrieve()
                .bodyToMono(String.class)
                .onErrorResume(e -> Mono.just("Error " + e.getMessage()))
                .flatMap(r -> ok().bodyValue(Map.of("Producer says", r)));
    }

    @Bean
    @LoadBalanced
    public WebClient.Builder webClientBuilder(){
        return WebClient.builder();
    }

    @Bean
    RouterFunction<ServerResponse> routes() {
        return route()
                .GET("", this::handler)
                .build();
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

尤里卡WebClient禁用

如果使用eureka.client.webclient.enabled=false,一切都会很好。然而,我认为这不应该是解决办法。

代码语言:javascript
复制
DiscoveryClientOptionalArgsConfiguration : Eureka HTTP Client uses RestTemplate.

如何将@LoadBalanced WebClient与eureka.client.webclient.enabled=true一起使用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-31 01:17:35

同样的问题,我就是这样解决的。

代码语言:javascript
复制
@Bean
@LoadBalanced
public WebClient.Builder lbWebClient() {
    return WebClient.builder();
}

@Bean
@Primary
public WebClient.Builder webClient() {
    return WebClient.builder();
}

稍后使用@限定符使用负载平衡限定符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67649680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档