Spring 云:Feign 和 Http 连接池
Spring Cloud: Feign and Http Connection Pooling
谁能告诉我 Spring Cloud Feign Client 是否提供或支持 Http 连接池,如果是,如何配置池大小等设置?我似乎无法在官方文档中找到它。谢谢。
根据调查,我将尝试回答我自己的问题:
Spring Cloud Feign 使用 Netflix Feign。 Netflix Feign 反过来使用 java.net.HttpURLConnection 创建连接,它使用 'persistent connections' 而不是连接池。
可以覆盖客户端,例如改用 Apache HttpClient,Netflix 为此提供了一个库 (feign-httpclient)。使用此方法时,可以使用 SystemProperties 设置连接池大小。
在 Spring Cloud Brixton 中,似乎如果 Apache HttpClient 或 OkHttpClient 可用(通过@ConditionalOnClass),那么它们将被自动使用。
这是一个例子。
@Bean
public ServiceXFeignClient serviceXClient(Encoder encoder, Decoder decoder,
Contract contract, ClientProperties properties, ProxyProperties proxyProperties) {
OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder()
.connectionPool(
new ConnectionPool(properties.getPoolConnectionMaxIdle(),
properties.getPoolConnectionKeepMinutesAlive(), TimeUnit.MINUTES))
.build();
return Feign.builder()
.client(new feign.okhttp.OkHttpClient(okHttpClient))
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.target(ServiceXFeignClient.class, properties.getUrl());
}
谁能告诉我 Spring Cloud Feign Client 是否提供或支持 Http 连接池,如果是,如何配置池大小等设置?我似乎无法在官方文档中找到它。谢谢。
根据调查,我将尝试回答我自己的问题:
Spring Cloud Feign 使用 Netflix Feign。 Netflix Feign 反过来使用 java.net.HttpURLConnection 创建连接,它使用 'persistent connections' 而不是连接池。
可以覆盖客户端,例如改用 Apache HttpClient,Netflix 为此提供了一个库 (feign-httpclient)。使用此方法时,可以使用 SystemProperties 设置连接池大小。
在 Spring Cloud Brixton 中,似乎如果 Apache HttpClient 或 OkHttpClient 可用(通过@ConditionalOnClass),那么它们将被自动使用。
这是一个例子。
@Bean
public ServiceXFeignClient serviceXClient(Encoder encoder, Decoder decoder,
Contract contract, ClientProperties properties, ProxyProperties proxyProperties) {
OkHttpClient.Builder okHttpClient = new OkHttpClient.Builder()
.connectionPool(
new ConnectionPool(properties.getPoolConnectionMaxIdle(),
properties.getPoolConnectionKeepMinutesAlive(), TimeUnit.MINUTES))
.build();
return Feign.builder()
.client(new feign.okhttp.OkHttpClient(okHttpClient))
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.target(ServiceXFeignClient.class, properties.getUrl());
}