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)