zoukankan      html  css  js  c++  java
  • feign调用过程注意事项

    Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

    在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。

    Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

    Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。

    Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

    Spring Cloud Feign具备可插拔的注解支持,支持Feign注解、JAX-RS注解和Spring MVC的注解。

    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
     
    import com.itmuch.cloud.study.user.entity.User;
     
    @FeignClient(name = "microservice-provider-user")
    public interface UserFeignClient {
      @RequestMapping(value = "/{id}", method = RequestMethod.GET)
      public User findById(@PathVariable("id") Long id);
    }

    在feign调用时候正确代码如上,参数id和id是一样的,那么我们为什么还需要加上注解@pathvarible呢,还有就是如果使用requestbody和@requestparam这些,为什么还需要上呢,feign插件是支持springmvc的注解的,那么为什么还需要加上这个呢

    这个的从她的原理开始分析

    feign是一个伪客户端,即它不做任何的请求处理。Feign通过处理注解生成request,从而实现简化HTTP API开发的目的,即开发人员可以使用注解的方式定制request api模板,在发送http request请求之前,feign通过处理注解的方式替换掉request模板中的参数,这种实现方式显得更为直接、可理解。

    通过包扫描注入FeignClient的bean,该源码在FeignClientsRegistrar类:
    首先在启动配置上检查是否有@EnableFeignClients注解,如果有该注解,则开启包扫描,扫描被@FeignClient注解接口。

    程序启动后通过包扫描,当类有@FeignClient注解,将注解的信息取出,连同类名一起取出,赋给BeanDefinitionBuilder,然后根据BeanDefinitionBuilder得到beanDefinition,最后beanDefinition式注入到ioc容器中

    首先通过@EnableFeignCleints注解开启FeignCleint
    根据Feign的规则实现接口,并加@FeignCleint注解
    程序启动后,会进行包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中。
    当接口的方法被调用,通过jdk的代理,来生成具体的RequesTemplate
    RequesTemplate在生成Request
    Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
    最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。


    可以看到源码是依赖了rabbion和hystrix源码,所以openfeign是可以实现负载均衡和服务熔断的,

    服务熔断的使用方法:就是写一个方法类,继承接口,开启注解,如果服务出现问提了,就会走实现类的逻辑从而达到服务熔断

  • 相关阅读:
    2.4 自给自足的脚本:位于第一行的#!
    2.3 一个简单的脚本
    2.2 为什么要使用Shell脚本
    JSON 字符串 与 java 对象的转换
    ajax异步提交文件
    jquery选择器
    发现前端框架 bui-min.js
    学习hsf
    Git详解
    java学习材料
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/10593363.html
Copyright © 2011-2022 走看看