• OpenFeign讲解+面试题


    一:OpenFeign是什么?

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

    二:调用微服务的方式?

    1. ribbon +restTemplate方式调用
    2. openFeign通过接口+注解的方式调用

    三:如何使用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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    六:面试题

    1. Feign和openFeign有什么区别?
      在这里插入图片描述
  • 相关阅读:
    Redis查看集群状态有节点显示fail,连接失败
    rabbitmq-java-client源码结构设计与分析
    第2-1-4章 SpringBoot整合FastDFS文件存储服务
    纯前端实现图片验证码
    Vue基础知识点(面试可用):v-if和v-show的区别
    2022年Java秋招面试必看的|Java并发编程面试题
    clion本地调试nginx-1.22.1
    免漫(安卓)
    ssm租房小程序-计算机毕设 附源码42196
    【js】-【链表-应用】-学习笔记
  • 原文地址:https://blog.csdn.net/weixin_44582492/article/details/134279463