我有这段代码,我想迁移到最新版本的
'org.springframework.cloud:spring-cloud-openfeign-core:3.1.1'
import feign.Client;
import feign.httpclient.ApacheHttpClient;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.cloud.netflix.ribbon.SpringClientFactory;
import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory;
import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LoadbalancerConfig {
@Bean
public Client client(
HttpClientConnectionManager httpClientConnectionManager,
CachingSpringLoadBalancerFactory lbClientFactory,
SpringClientFactory clientFactory) {
CloseableHttpClient closeableHttpClient = HttpClients.custom()
.setConnectionManager(httpClientConnectionManager)
.build();
ApacheHttpClient client = new ApacheHttpClient(closeableHttpClient);
return new LoadBalancerFeignClient(client, lbClientFactory, clientFactory);
}
}
对于版本
'org.springframework.cloud:spring-cloud-openfeign-core:2.2.2.RELEASE'
,当我切换到版本 3.1.1 时,代码运行良好,但出现导入错误:
Cannot resolve symbol 'ribbon'
你知道我必须如何迁移代码吗?
Searching more about...我在这个topic中发现了一个问题:
spring-cloud-netflix-ribbon 已经从 SpringCloud 中删除了这个版本
然后你需要将
spring-cloud-starter-loadbalancer
依赖添加到你的项目中。
implementation 'org.springframework.cloud:spring-cloud-starter-loadbalancer:3.1.1'
Spring Cloud OpenFeign 官方参考在
1.2 Overriding Feign Defaults
部分:
Client feignClient: 如果 Ribbon 在类路径中并且被启用它是一个 LoadBalancerFeignClient,
否则,如果 Spring Cloud LoadBalancer 在类路径中, 使用FeignBlockingLoadBalancerClient
如果它们都不在类路径中,则使用默认的 feign 客户端。
所以你可以尝试在
FeignBlockingLoadBalancerClient
中使用LoadBalancerConfig
:
import feign.Client;
import feign.httpclient.ApacheHttpClient;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LoadBalancerConfig {
@Bean
public Client client(HttpClientConnectionManager connectionManager,
LoadBalancerClient lbClient,
LoadBalancerClientFactory lbClientFactory) {
CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(connectionManager)
.build();
ApacheHttpClient client = new ApacheHttpClient(httpClient);
return new FeignBlockingLoadBalancerClient(client, lbClient, lbClientFactory);
}
}