【发布时间】:2017-07-13 18:00:42
【问题描述】:
我们有一个基于 Spring Cloud 的复杂应用,Netflix Loadbalancer,用于在微服务之间进行调用ms1<client>-->ms2<server>
我们正在使用restTemplate.exchange 调用 URI 主机名,该主机名是用于 FQDN 查找的 Eureka 密钥。
此配置适用于其他微服务,实际上 restTemplate bean 适用于不同组件的微服务调用。
接收其余调用的是 Cloud Foundry Go-router,我认为它只是一个 ngineX 代理服务器,httpClient 请求的标头变量应该设置为“Host”:“FQDN”,这允许代理将请求路由到空间中的适当实例。
问题:
来自 ms 的 httpClient 调用 ms
CompletionException. cause: org.springframework.web.client.HttpClientErrorException: 404 NOT_FOUND
这是来自 CF go-router(简单代理服务器)的响应,请求永远不会获得 http--> ms 实例。
当 RestClient 配置请求时,它将标头“Host”设置为 localhost:8090 或 ms 主机名是什么???
讨论相关问题:
所以显然我们这里有一个配置问题。
关于 netflix 功能区负载平衡器客户端内容如何设置 httpClient 标头的任何建议?
什么包类拦截器有这个魔力?
哪些配置变量会影响这一点?
代码调试表明netflix.client.SimpleVipAddressResolver 正在运行。
我们一直跟踪调试到 Apache httpClient,它的标头 Host 设置为 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 apache-httpclient-4.x resttemplate netflix-eureka