无法解析符号“CachingSpringLoadBalancerFactory”

问题描述 投票:0回答:1

我有这段代码,我想迁移到最新版本的

'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'

你知道我必须如何迁移代码吗?

代码示例:https://github.com/rcbandit111/Generic_SO_POC/blob/master/src/main/java/org/merchant/database/service/sql/LoadbalancerConfig.java

java spring-boot spring-cloud spring-cloud-netflix spring-cloud-feign
1个回答
4
投票

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);
    }
}

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.