我们在 Ribbon 和 Eureka 之上使用 Feign。
我们注意到com.netflix.niws.client.http.RestClient
为每个 Feign 客户端自动创建了一个实例,但从未使用过。相反,Feign.Builder
创建一个feign.ribbon.RibbonClient
将实际 HTTP 调用委托给feign.Client.Default
实例的 a。后者使用没有任何池功能的标准 Java HttpConnection。
不幸的是,这些显然无用的RestClient
实例(每个 feign 客户端一个)的创建附带了它自己的 Apache HttpClient、它自己的连接池、管家线程和指标的东西......
快速查看 /metrics 执行器端点会显示如下指标:
counter.servo.<client name>_createnew: 0
counter.servo.<client name>_delete: 0
counter.servo.<client name>_release: 0
counter.servo.<client name>_request: 0
counter.servo.<client name>_reuse: 0
这些指标由com.netflix.http4.NamedConnectionPool
. 无论活动如何,它们的价值都保持在 0。
有人经历过同样的行为吗?为什么为每个 feign 客户端创建这些RestClient
实例并且从未使用过?