OpenFeign讲解+面试题

一:OpenFeign是什么?

是一个声明式的web客户端,只需要创建一个接口,添加注解即可完成微服务之间的调用

二:调用微服务的方式?

  1. ribbon +restTemplate方式调用
  2. openFeign通过接口+注解的方式调用
  3. Spring Cloud Gateway:根据请求的不同特征(如路径、头部、请求参数等)将请求路由到不同的后端服务上。

三:如何使用OpenFeign?

  1. pom文件添加依赖
  2. yaml配置文件
  3. 主启动类,标注@EnableFeignClients注解
  4. 编写调用接口并标注@FeignClient注解
  5. 接口中的方法为实际调用服务的方法

四:OpenFeign超时机制

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

六:面试题

  1. Feign和openFeign有什么区别?
    Feign:是Spring Cloud组件中的一个轻量级RESTfu的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。
    OpenFeign:是Spring Cloud 在Feign的基础上支持了SpringMVC的注解,如@RequesMapping等等。OpenFeign的@FeignClien可以解析SpringMvc的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值