是一个声明式的web客户端,只需要创建一个接口,添加注解即可完成微服务之间的调用
因为OpenFeign的底层是ribbon进行负载均衡,所以它的超时时间是由ribbon控制

底层通过JDK动态代理获取到接口中的服务信息,使用Ribbon管理后的RestTemplate进行调用
@SpringBootTest
class ApplicationTests {
@Autowired
private RestTemplate restTemplate;
@Test
void contextLoads() {
UserOrderFeign o = (UserOrderFeign) Proxy.newProxyInstance(UserOrderFeign.class.getClassLoader(), new Class[]{UserOrderFeign.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 获取目标方法上的注解
GetMapping MethodAnnotation = method.getAnnotation(GetMapping.class);
// 获取注解上的请求路径
String path = MethodAnnotation.value()[0];
// 获取目标方法所在的类
Class> aClass = method.getDeclaringClass();
// 获取类上面的注解
FeignClient classAnnotation = aClass.getAnnotation(FeignClient.class);
// 获取注解上的value值(服务名)
String applicationName = classAnnotation.value();
// 拼接URL
String url = "http://"+applicationName+"/"+path;
// 使用Ribbon托管后的RestTemplate进行调用
return restTemplate.getForObject(url, String.class);
}
});
String s = o.doOrder();
System.out.println(s);
}
}
