Spring WebClient 和 Eureka Server

Posted

技术标签:

【中文标题】Spring WebClient 和 Eureka Server【英文标题】:Spring WebClient and Eureka Server 【发布时间】:2020-04-30 21:45:39 【问题描述】:

spring webclient 无法从 eureka 服务器的服务实例名称中检索实际主机并出现以下异常:

java.net.UnknownHostException: USER-DATA-SERVICE
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_161]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ Request to GET http://USER-DATA-SERVICE/users/01 [DefaultWebClient]

Spring boot 版本:2.2.3.BUILD-SNAPSHOT & Spring Cloud 版本:Hoxton.BUILD-SNAPSHOT

【问题讨论】:

请提供更多信息,例如您的依赖项和配置以及http://<eurekaserver>/eureka/apps的输出 Consumer Client application.yml -------------------------------- spring : application : name :用户信息服务服务器:端口:8801 eureka:实例:主机名:本地主机客户端:fetch-registry:true register-with-eureka:true service-url:defaultZone:localhost:8700/eureka 发现客户端 application.yml ------------------------------------ spring :应用程序:名称:user-eureka-discovery-service 服务器:端口:8700 eureka:实例:主机名:localhost 客户端:fetch-registry:false register-with-eureka:false service-url:defaultZone:http://$ spring.application.name:$server.port/eureka/ 相同的编码工作正常 RestTemplate 但如果我们更改 webClient 然后得到 unkownhost 异常 【参考方案1】:

我遇到了同样的问题,但我发现 Web 客户端实例创建方法中缺少 @Bean 标记。如果您正在旋转多个实例,也可以使用 @LoadBalanced 注释

在您的应用程序类中添加以下代码。

@Bean
@LoadBalanced
public WebClient.Builder getWebClient()
    return WebClient.builder();

这应该可以解决错误,干杯!

【讨论】:

以上是关于Spring WebClient 和 Eureka Server的主要内容,如果未能解决你的问题,请参考以下文章

Spring WebFlux WebClient 弹性和性能

来自 ReactiveSecurityContext 的 Spring WebClient 标头

Spring WebClient vs. RestTemplate

使用 Spring Boot WebClient 时如何拦截请求

Reactive Spring WebClient - 进行 SOAP 调用

Spring Boot:如何使用 WebClient 而不是 RestTemplate 来执行非阻塞和异步调用