当前位置: 首页 > 知识库问答 >
问题:

Spring RestTemplate netflix LoadBlancher未配置httpClient头主机

干稳
2023-03-14

我们有一个基于Spring云的复杂应用程序Netflix Loadbalancer,用于在微服务ms1之间进行呼叫

这种配置适用于其他微服务,事实上RESTTemplatebean适用于不同组件的微服务调用。

接收rest调用的是Cloud Foundry Go router,我认为它只是一个ngineX代理服务器,httpClient请求的头变量应该设置为“Host”:“FQDN”,这允许代理将请求路由到空间中的适当实例。

问题:

来自ms的httpClient向ms打电话

这是来自CF go-router(简单代理服务器)的响应,请求永远不会得到超文本传输协议--

当RestClient配置请求时,它将标头“Host”设置为localhost:8090或MS主机名是什么???

与讨论相关的问题:显然我们这里有一个配置问题。关于netflix ribbon loadbalancer客户端如何设置httpClient头有什么建议吗
这个魔法是由什么包类拦截器实现的
哪些配置变量会影响这一点?

代码调试表明netflix.client.SimpleVipAddressResolver正在运行。

我们一直跟踪调试到Apache httpClient,它的标头Host设置为ms主机名,它也在Netflix httpClient包装器中设置为该值。

我试图创建一个简单的参考实现,但做不到。

有关于故障排除的建议吗?在哪里查看或阅读关于什么com.netflix包的文档?

使用卡姆登Spring。使用配置文件,

从内存调试;

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

我们的怀疑是某些应用程序。属性。yml,或bootstrap。yml是否在扫描路径中的某个位置设置???。


共有1个答案

呼延子安
2023-03-14

我们刚刚升级了平台spring boot1.3。x1.4.2。ms入站控制器具有注释

@RequestHeader HttpHeaders httpHeaders

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

显然在升级过程中会发生两种情况

A) 版本1.3.2中的boot Controller@RequestHeader未放置头Host

B) spring Cloud netflix ribbon的早期版本使用ribbon lookup重写了HosthttpHeader值。

无论哪种方式,都没有特殊的拦截器。Spring cloud netflix Eureka将接受您提供的任何HttpHeader(即使该header是键:Host),并使用这些值。

 类似资料:
  • 我有一个用于REST API的HttpClient。然而,我在设置授权头时遇到了麻烦。我需要将头设置为我在执行OAuth请求时收到的令牌。我看到了一些.NET的代码, 但是,WinRT中不存在凭据类。有人知道如何设置授权头吗?

  • 我试图通过HttpClientBuilder设置一个HttpClient。我还看了看HttpClientConnectionManager,这里开始混淆了。 在ConnectionManager上,或者更确切地说,在PoolghttpClientConnectionManager上,有一些方法可以: 关闭过期连接 关闭空闲连接 连接何时被视为过期? 它何时空闲? 当来自池中的连接关闭时会发生什么?

  • 我们在堆栈中使用Kafka、Kafka连接和模式注册表。版本为2.8.1(融合6.2.1)。我们使用Kafka connect的配置(key.converter和value.converter),其值为:io.confluent.connect.avro.AvroConverter。 它自动注册主题的新模式。但有一个问题,AvroConverter没有为新模式指定主题级兼容性,当我们试图通过RES

  • 我试图将用于需要基本HTTP身份验证的第三方服务。我正在使用。以下是我到目前为止的结论:

  • 我们什么时候应该在HttpRequest estMessage对象中使用标头而不是HttpClient中的标头?? 我们需要添加授权(总是在变化)和一些自定义标头(总是在变化) 问题 > 首选哪种方法 我是否应该向HttpClient添加公共头(所有请求都相同),并向HttpRequestMessage对象添加基于请求的头??

  • 此配置适用于所有 基本主题。 常用配置 日间模式 - 夜间模式 classic 主题默认提供了对日间模式和夜间模式的支持,并在导航条上提供了切换开关。 通过以下配置可以自定义各模式:docusaurus.config.js module.exports = { // ... themeConfig: { // ... colorMode: { // "