【问题标题】:Spring RestTemplate netflix loadblancer not configuring httpClient header HostSpring RestTemplate netflix loadblancer 未配置 httpClient 标头主机
【发布时间】: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


    【解决方案1】:

    我们刚刚将平台 spring boot 1.3.x 升级到 1.4.2。 ms 入站控制器有注释

    @RequestHeader HttpHeaders httpHeaders
    

    这是我们作为参数附加到restTemplate.execute 中的,最终发现它作为请求标头用于调用 ms.rest-netflix-httpClient。 CF 上的 Go-Router 必须使用该值来执行对实例的代理。

    显然,在升级的某个地方,会发生两件事之一,要么

    A) 版本1.3.2 中的引导控制器@RequestHeader 没有放入标头Host

    B) spring Cloud-netflix-ribbon 的早期版本使用 Ribbon 查找覆盖了 Host httpHeader 值。

    无论如何,都没有特殊的拦截器。 Spring cloud netflix Eureka 将采用您提供的任何 httpHeaders(即使该标头是 key:Host 并使用这些值。

    【讨论】:

      猜你喜欢
      • 2023-03-02
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多