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

Open FaignClient与Netflix Ribbon的集成在springboot中不起作用

花高爽
2023-03-14

@RestController
public class FeinApiCall {
    
    @Autowired
    CustomFeignClient customFeignClient;


    @GetMapping("/getinfothroughfeign")
    public String getFeignLoad() {
        String result =customFeignClient.getInstance();
        return result;
    }
}



@SpringBootApplication
@EnableFeignClients
@RibbonClient(name = "testServer", configuration = CustomIClientfiguration.class)
public class FeignLoadBalancingApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignLoadBalancingApplication.class, args);
    }

     
}



@FeignClient(name ="testServer")
public interface CustomFeignClient {
     @RequestMapping(method = RequestMethod.GET, value = "/getPort")
     String getInstance();
}


@Configuration
public class CustomIClientfiguration {

    public static final int DEFAULT_CONNECT_TIMEOUT = 1000;
    public static final int DEFAULT_READ_TIMEOUT = 1000;
    
    @Autowired
    IClientConfig ribbonClientConfig;
    
    @Bean
    public IClientConfig ribbonClientConfig() {
        System.err.println("CustomIClientfiguration overiding");
        DefaultClientConfigImpl config = new DefaultClientConfigImpl();
        config.loadProperties("testServer");
        config.set(CommonClientConfigKey.ConnectTimeout, DEFAULT_CONNECT_TIMEOUT);
        config.html" target="_blank">html" target="_blank">set(CommonClientConfigKey.ReadTimeout, DEFAULT_READ_TIMEOUT);
        return config;
    }
    
    @Bean
    public IPing ribbonPing(IClientConfig config) {
        return new PingUrl();
    }
    
    @Bean
    public IRule ribbonRule(IClientConfig config) {
        
        return new AvailabilityFilteringRule();
    }
}


server.port=9098

testServer.ribbon.eureka.enabled=true
testServer.ribbon.listOfServers=localhost:2289
testServer.ribbon.ServerListRefreshInterval=15000




@RestController
public class TestController {

    @Autowired
    ApplicationContext context;
    
    @Value("${server.port}")
    private String portNumber;
    
    @GetMapping("/getPort")
    public String getString()
    {
        return "Port number "+this.portNumber;
    }
    
    @GetMapping("/")
    public String ping()
    {
        
        return "welcome";
    }
}

server.port=2289
spring.application.name=testServer
management.endpoints.web.exposure.include=*
management.endpoint.health.enabled=true

接收方类别组织。springframework。云netflix。带子RibbonLoadBalancerClient未定义或继承已解析方法“抽象组织”的实现。springframework。云客户ServiceInstance选择接口org的(java.lang.String、org.springframework.cloud.client.loadbalancer.Request)。springframework。云客户负载平衡器。ServiceInstanceChooser。Java语言lang.AbstractMethodError:接收方类org。springframework。云netflix。带子RibbonLoadBalancerClient未定义或继承已解析方法“抽象组织”的实现。springframework。云客户ServiceInstance选择接口org的(java.lang.String、org.springframework.cloud.client.loadbalancer.Request)。springframework。云客户负载平衡器。ServiceInstanceChooser。位于组织。springframework。云openfeign。负载平衡器。假装BlockingLoadBalancerClient。在外文执行(FeignBlockingLoadBalancerClient.java:88)。SynchronousMethodHandler。executeAndDecode(SynchronousMethodHandler.java:119)位于外文。SynchronousMethodHandler。调用(SynchronousMethodHandler.java:89)。ReflectiveFeign$FeignInvocationHandler。在jdk调用(ReflectiveFeign.java:100)。代理3/jdk。proxy3.$Proxy83。com上的getInstance(未知源)。假装负载平衡。应用程序编程接口。费纳皮卡尔。java上的getFeignLoad(FeinApiCall.java:19)。基本/jdk。内部的反映NativeMethodAccessorImpl。在java上调用0(本机方法)。基本/jdk。内部的反映NativeMethodAccessorImpl。在java上调用(NativeMethodAccessorImpl.java:78)。基本/jdk。内部的反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。基本/java。lang.reflect。方法在org调用(方法java:567)。springframework。网状物方法支持InvocableHandlerMethod。doInvoke(InvocableHandlerMethod.java:197)位于org。springframework。网状物方法支持InvocableHandlerMethod。org上的invokeForRequest(InvocableHandlerMethod.java:141)。springframework。网状物servlet。mvc。方法注释。ServletInvocableHandlerMethod。org上的invokeAndHandle(ServletInvocableHandlerMethod.java:106)。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。org上的invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。位于org的handleInternal(RequestMappingHandlerAdapter.java:808)。springframework。网状物servlet。mvc。方法AbstractHandlerMethodAdapter。handle(AbstractHandlerMethodAdapter.java:87)位于org。springframework。网状物servlet。DispatcherServlet。doDispatch(DispatcherServlet.java:1064)位于org。springframework。网状物servlet。DispatcherServlet。位于org的doService(DispatcherServlet.java:963)。springframework。网状物servlet。FrameworkServlet。processRequest(FrameworkServlet.java:1006)

共有2个答案

雷国兴
2023-03-14

我也遇到了同样的问题,我正在起诉Sprigboot和Aprinb云版本。我已经实施了塔伦·辛格(TarunSingh)提出的上述解决方案,它对我起到了作用。springBootVersion='2.4.13'springCloudVersion='2020.0.3'

慕容超
2023-03-14
  1. 已创建新配置文件
@Configuration
public class OpenFeignConfiguration {
    
    @Autowired
    RibbonLoadBalancerClient ribbonLoadBalancerClient;
    
    @Bean
    public Feign.Builder feignBuilder() {
        return Feign.builder();
    }
}
@FeignClient(name ="testServer",configuration = OpenFeignConfiguration.class)
public interface CustomFeignClient {
     @RequestMapping(method = RequestMethod.GET, value = "/getPort")
     String getInstance();
}
@Component
public class ChildRibbonLoadBalancerClient extends RibbonLoadBalancerClient{

    @Autowired
    LoadBalancerClient loadBalancerClient;
    
    @Override
    public <T> ServiceInstance choose(String serviceId, Request<T> request) {
         ServiceInstance server = this.loadBalancerClient.choose(serviceId);
         return server;
    }

    public ChildRibbonLoadBalancerClient(SpringClientFactory clientFactory) {
        super(clientFactory);
    }

}
 类似资料:
  • 我正试图将jasper报告与Spring roo整合起来。当我在roo shell中运行' OSGi start-URL http://s.digitalface.ca/jasperoo-latest' '时,会得到' org . OSGi . framework . bundle exception:bundle ca . digital face . jasperoo[77]中未解析的约束:无

  • 问题内容: 我有一些由Bitovi用funcunit编写的测试,在最终让它们与phantomjs一起工作之后,我希望在Jenkins的工作中实现自动化。 这实际上已经可以使用,但是我需要一种可视化我的结果的方法,所以我读到Jenkins的XUnit插件应该可以实现,但是我设置它的测试模式类型无关紧要,要么说它是空的或它不是有效的xml。 在下面,您将找到我为运行测试套件而执行的命令以及xml文件中

  • 我有一个简单的Spring Boot应用程序,其中有一个jpa存储库对象,我希望它在类中自动生成,如下所示。 下面是类 我有以下例外。

  • 我尝试使用bytebuddy在springboot中实现aop。代码如下: springboot的监听器如下: 最后,在springboot启动中注册侦听器: 当我启动应用程序时,调试记录器显示良好。然而,当请求被处理时,aop不起作用。我做错了什么?我很困惑。。。

  • 我使用springboot和jersey作为restful API。现在我想将swagger2集成到我的项目中,但它不起作用。当我运行我的应用程序并访问http://localhost:8080/swagger-ui.html.我得到了swagger网页,但没有显示api(见下图)。似乎swagger没有找到我的api类。 下面是我添加的依赖项。 以下是我的申请课程: 下面是我的jersey配置类