Spring boot Spring RestTemplate netflix LoadBlancher未配置httpClient头主机
我们有一个基于Spring云的复杂应用程序Netflix Loadbalancer,用于在微服务之间进行呼叫Spring boot Spring RestTemplate netflix LoadBlancher未配置httpClient头主机,spring-boot,apache-httpclient-4.x,resttemplate,netflix-eureka,Spring Boot,Apache Httpclient 4.x,Resttemplate,Netflix Eureka,我们有一个基于Spring云的复杂应用程序Netflix Loadbalancer,用于在微服务之间进行呼叫ms1-->ms2 我们正在使用restemplate.exchange调用URI主机名,该主机名是用于FQDN查找的Eureka键 这种配置适用于其他微服务,事实上RESTTemplatebean适用于不同组件的微服务调用 接收rest调用的是Cloud Foundry Go router,我认为它只是一个ngineX代理服务器,httpClient请求的头变量应设置为“Host”:“F
ms1-->ms2
我们正在使用restemplate.exchange
调用URI主机名,该主机名是用于FQDN查找的Eureka键
这种配置适用于其他微服务,事实上RESTTemplatebean适用于不同组件的微服务调用
接收rest调用的是Cloud Foundry Go router,我认为它只是一个ngineX代理服务器,httpClient请求的头变量应设置为“Host”:“FQDN”,这允许代理将请求路由到空间中的适当实例
问题:
来自ms的httpClient向ms发出呼叫
CompletionException。原因:org.springframework.web.client.httpclienterror异常:404未找到
这是来自CF go路由器(简单代理服务器)的响应,请求永远不会从ms实例获取http-->消息
当RestClient配置请求时,它将头“Host”设置为localhost:8090
或ms主机名是什么
讨论相关问题:
显然,我们这里有一个配置问题。
有关于netflix ribbon loadbalancer客户端如何设置httpClient头的建议吗?什么包类拦截器具有这种魔力?
哪些配置变量会影响这一点 代码调试表明
netflix.client.SimpleVipAddressResolver
正在运行
我们一直跟踪调试到Apache httpClient,它的头主机设置为ms主机名,在netflix httpClient包装中也设置为该值
我试图创建一个简单的参考实现,但是做不到
有关于故障排除的建议吗?
在哪里查看或阅读什么com.netflix
软件包上的文档
使用卡姆登弹簧。使用配置文件
从内存调试
ClientClassName:com.netflix.niws.client.http.RestClient
VipAddressResolverClassName:com.netflix.client.SimpleVipAddressResolver
NIWSServerListClassName:com.netflix.loadbalancer.ConfigurationBasedServerList
NFLoadBalancerClassName:com.netflix.loadbalancer.ZoneAwareLoadBalancer
NFLoadBalancerRuleClassName:com.netflix.loadbalancer.AvailabilityFilteringRule
EnablePrimeConnections:false,
CustomSSLSocketFactoryClassName:null,
TrustStorePassword:null,
EnableConnectionPool:true,
listOfServers:,
OkToRetryOnAllOperations:false,
RequestIdHeaderName:null
我们怀疑某些application.properties、.yml或bootstrap.yml正在扫描路径中的某个位置设置或未设置 我们刚刚将平台spring boot
1.3.x
升级到1.4.2
。
ms入站控制器具有注释
@RequestHeader HttpHeaders httpHeaders
这就是我们附加到restTemplate中的内容。执行作为参数,并最终将其作为用于调用ms的请求头发送到rest netflix httpClient。CF上的Go路由器必须使用该值来执行对实例的代理
显然,在升级过程中,有两件事发生了
A) 版本1.3.2
中的启动控制器@RequestHeader未放置头主机
B) 以前版本的spring Cloud netflix功能区使用功能区查找重写了Host
httpHeader值
不管怎样,都没有特殊的拦截器。
Spring cloud netflix Eureka将接受您提供的任何HttpHeader(即使该header是键:Host
),并使用这些值