Eureka 服务器和 UnknownHostException

Eureka server and UnknownHostException

我已经安装了一个 Eureka 服务器并注册了一个名为 pricing-service 的服务。 尤里卡仪表板显示 UP 定价服务:4ac78ca47bdbebb5fec98345c6232af0 状态中

现在我有一个完全独立的 Spring 引导 Web 服务,它调用(通过 WebClient 实例)定价服务作为 http://pricing-service 但我得到 "reactor.core.Exceptions$ReactiveException: java.net.UnknownHostException: 不知道这样的主机(定价服务)" 异常。

所以控制器无法通过 hostname.Further 找到定价服务,控制器如何知道 Eureka 服务器才能获得定价服务?不应该在网络服务的 application.properties 中引用它吗?我在网上找不到任何东西。

WebClient 对开箱即用的 Eureka 一无所知。您需要使用 @LoadBalancerClient 和 @LoadBalanced 通过负载均衡器将其连接起来。请在此处查看文档:

https://spring.io/guides/gs/spring-cloud-loadbalancer/

Now I have a completely separate Spring boot web service which calls (through a WebClient instance) the pricing-service as http://pricing-service

  1. 您的这个单独服务(WebClient服务)也必须在Eureka Server.
  2. 注册
  3. 默认情况下,webclient 不知道必须使用 load-balancer 才能调用其他 eureka instances

下面是启用这种 WebClient bean 的方法之一:

@Configuration
public class MyBeanConfig {

 @Bean
 WebClient webClient(LoadBalancerClient lbClient) {
    return WebClient.builder()
             .filter(new LoadBalancerExchangeFilterFunction(lbClient))
             .build();
    }

}

然后,您可以使用此 webClient bean 进行调用:

@Component
public class YourClient {

 @Autowired
 WebClient webClient;

 public Mono<ResponseDto> makeCall() {

    return webClient
            .get()
            .uri("http://pricing-service/")
            // <-- change your body and subscribe to result
}

注意: 初始化 WebClientBean 可以进一步探讨 here

当我创建一个返回 WebClient 的 bean 时,我遇到了 WebClient 无法与 @LoadBalanced 一起工作的问题。您必须为 WebClient.Builder 而不仅仅是 WebClient 创建一个 bean,否则 @LoadBalanced 注释无法正常工作。

@Configuration
public class WebClientConfig {

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