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 通过负载均衡器将其连接起来。请在此处查看文档:
Now I have a completely separate Spring boot web service which calls (through a WebClient instance) the pricing-service as http://pricing-service
- 您的这个单独服务(
WebClient
服务)也必须在Eureka Server
. 注册
- 默认情况下,
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
}
注意: 初始化 WebClient
的 Bean
可以进一步探讨 here。
当我创建一个返回 WebClient 的 bean 时,我遇到了 WebClient 无法与 @LoadBalanced
一起工作的问题。您必须为 WebClient.Builder
而不仅仅是 WebClient
创建一个 bean,否则 @LoadBalanced
注释无法正常工作。
@Configuration
public class WebClientConfig {
@Bean
@LoadBalanced
public WebClient.Builder loadBalancedWebClientBuilder() {
return WebClient.builder();
}
}
我已经安装了一个 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 通过负载均衡器将其连接起来。请在此处查看文档:
Now I have a completely separate Spring boot web service which calls (through a WebClient instance) the pricing-service as http://pricing-service
- 您的这个单独服务(
WebClient
服务)也必须在Eureka Server
. 注册
- 默认情况下,
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
}
注意: 初始化 WebClient
的 Bean
可以进一步探讨 here。
当我创建一个返回 WebClient 的 bean 时,我遇到了 WebClient 无法与 @LoadBalanced
一起工作的问题。您必须为 WebClient.Builder
而不仅仅是 WebClient
创建一个 bean,否则 @LoadBalanced
注释无法正常工作。
@Configuration
public class WebClientConfig {
@Bean
@LoadBalanced
public WebClient.Builder loadBalancedWebClientBuilder() {
return WebClient.builder();
}
}