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

2024-02-14

Feing客户端服务器



@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.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();
    }
}

feignclient 服务器的 application.properties#



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

testServer的application.properties#


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

Error


接收器类 org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient 没有定义或继承已解析方法 'abstract org.springframework.cloud.client.ServiceInstance choice(java.lang.String, org.springframework.cloud.client) 的实现接口org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser的.loadbalancer.Request)'。 java.lang.AbstractMethodError:接收器类org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient没有定义或继承已解析方法'abstract org.springframework.cloud.client.ServiceInstance的实现选择(java.lang.String,org接口org.springframework.cloud.client.loadbalancer.ServiceInstanceChooser的.springframework.cloud.client.loadbalancer.Request)'。 在 org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient.execute(FeignBlockingLoadBalancerClient.java:88) 在 feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:119) 在 feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89) 在 feign.ReflectiveFeign$FeignInitationHandler.invoke(ReflectiveFeign.java:100) 在 jdk.proxy3/jdk.proxy3.$Proxy83.getInstance(来源未知) 在 com.FeignLoadBalancing.api.FeinApiCall.getFeignLoad(FeinApiCall.java:19) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) 在java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:567) 在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) 在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) 在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1064) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)


我在 feignclient 服务器中做了以下更改

  1. 创建了新的配置文件

@Configuration
public class OpenFeignConfiguration {
    
    @Autowired
    RibbonLoadBalancerClient ribbonLoadBalancerClient;
    
    @Bean
    public Feign.Builder feignBuilder() {
        return Feign.builder();
    }
}
  1. 在 feign 客户端中设置我的配置文件

@FeignClient(name ="testServer",configuration = OpenFeignConfiguration.class)
public interface CustomFeignClient {
     @RequestMapping(method = RequestMethod.GET, value = "/getPort")
     String getInstance();
}
  1. 创建了 ChildRibbonLoadBalancerClient ,它扩展了 RibbonLoadBalancerClient 并重写了 ServiceInstance select() 方法

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

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Open Feignclient 与 Netflix Ribbon 集成在 springboot 中不起作用 的相关文章

随机推荐

  • Google MAP API v3:在显示的标记上居中和缩放

    我使用以下代码在地图上设置标记 var latLngs each locations markers function i m var myLatLng new google maps LatLng m latitude m longitu
  • SpringFramework:@Transactional(readOnly = true) 不适用于 h2

    我正在使用 SpringFramework 进行事务测试 我有以下课程 用户服务类 Transactional public interface UserService void add User user Transactional re
  • Laravel Passport Auth 在独立项目上运行基于密码的令牌身份验证时卡住

    Laravel Passport Auth 在同一项目中的自服务器和客户端上运行时卡住 以进行基于密码的令牌身份验证 登录控制器 public function authenticaterrr Request request http ne
  • Git 漂亮的格式颜色

    我正在尝试为 Git 设置漂亮的格式颜色 据我所知 1 6 0 版本只能识别红色 绿色和蓝色 git log pretty format Credred Creset Cgreengreen Creset Cyellowyellow Cre
  • Rails 4 嵌套属性和 has_many :through 表单中的关联

    我在使用表单管理 has many through 关联时遇到问题 我不想做的是编辑关联模型的属性 其中存在大量信息 相反 我只想管理关联 我知道我可以通过操纵传递给我的操作的表单参数并手动构建关系来做到这一点 但如果可能的话 我更愿意采用
  • curl - 如何设置 DNS 缓存的 TTL 以及如何清除curl 缓存

    在这个链接的最后它提到 http comments gmane org gmane comp web curl library 40895 只要您重新使用该句柄 libcurl 默认就会使用其 DNS 缓存 你 可以改变它在缓存中保存条目的
  • Android:清除后退堆栈

    在 Android 中 我有一些活动 比如说 A B C 在A中 我使用以下代码打开B Intent intent new Intent this B class startActivity intent 在B中 我使用以下代码打开C In
  • 三星的 Camera2 宽高比

    我在 S5 上使用 Camera2 API 以 720x480 的分辨率显示基于 TextureView 的预览 使用 Camera1 时 预览看起来不错 但使用 Camera2 时预览会失真 我正在打电话SurfaceTexture se
  • 从控制器内部使用 Html.ActionLink 和 Url.Action(...)

    我想编写一个 HtmlHelper 来呈现具有预设值的 ActionLink 例如 where PageLink是一个调用的函数ActionLink使用已知的操作和控制器 例如 索引 和 页面 Since HtmlHelper and Ur
  • 如何发送带有空格的 POST 请求?

    我正在尝试将编辑文本的输入发送到 PHP 如果我发送的内容没有空格 它可以正常工作 但如果有空格就会崩溃并显示以下内容 非法字符 指的是空间 显然 这是一个正确引用的问题 但由于某种原因 我就是无法正确引用 在哪里添加引号 创建 URL 时
  • 如何将 ModelState.AddModel Error 绑定到剔除动态创建的验证范围?

    我已经设置 Knockoutjs 使用以下代码动态创建可编辑的值列表 var requirementModel function var self this self requirementtypes ko observableArray
  • FastAPI:CORS 中间件不支持 GET 方法

    我尝试在 FastAPI 框架上使用 CORS 但它不适用于 GET 方法 这是我正在处理的代码 from fastapi import FastAPI from fastapi middleware cors import CORSMid
  • iPhone 垂直拨动开关

    我正在尝试为 iPhone 创建一个垂直切换开关控件 沿着 UISwitch 的路线 但垂直滑动 我想知道现有的控件是否已经存在 或者是否有任何好的教程来解释为 iPhone 创建自定义控件的基础知识 目前 我尝试使用仿射变换从基本 UIs
  • 连接MySQL服务器时Eclipse程序崩溃

    I am writing a simple program to connect to a MySQL Server hosted locally I have ensured the server is running The code
  • 如何以不依赖扩展的方式禁用 htaccess 中的 cgi?

    我想在文档根目录下的目录中禁用任何类型的 CGI 执行 任何类型 php perl ruby 等等 我想以一种不依赖于文件扩展名的方式来执行此操作 在我的文档根目录下 因为用户必须能够放置和查看 HTML 文件 它必须位于 htaccess
  • Azure 资源管理器模板链式函数

    我正在尝试删除 在分配给输出变量值之前使用 azure 函数从 URL 获取 webappStorageUri type string value take reference resourceId Microsoft Storage st
  • 对样式化媒体接收器 CSS 进行故障排除

    我正在尝试实现样式媒体接收器 但由于某种原因 我的 chromecast 不会显示图形 我只在黑色背景上看到我的接收者的名字 不过 在演员开发控制台中预览看起来还不错 我尝试使用的CSS是这样的 https krizan se styl l
  • 在变量中存储大量数字的正确方法

    我想玩弄数字 无论多么简单 我一直在编写斐波那契数列的算法和寻找素数的强力路径 我不是程序员 只是一个数学家 然而 我经常遇到的一个问题是 long long double 和 float 经常会出现空间不足的情况 如果我想继续在JAVA中
  • 在mysql中存储mp3文件

    我发现很多人建议不要将 mp3 文件存储为 blob 我没有得到明确的解释为什么会这样 我的网站流量较低 每分钟 10 次点击 到目前为止 我已将图像文件作为 blob 存储在数据库表中 我对图像表所做的唯一查找是基于单个主键 图像渲染速度
  • Open Feignclient 与 Netflix Ribbon 集成在 springboot 中不起作用

    Feing客户端服务器 RestController public class FeinApiCall Autowired CustomFeignClient customFeignClient GetMapping getinfothro