美文网首页Spring Cloud Spring Cloud
Spring Cloud—八、使用Feign实现声明式的Rest

Spring Cloud—八、使用Feign实现声明式的Rest

作者: zuoqy | 来源:发表于2018-12-03 09:46 被阅读14次

    8.1、分析

    之前我们通过RestTemplate调用Rest服务,代码是这样的:

    虽然使用了Ribbon和Hystrix可以实现负载均衡和容错处理,但是这个编码在实现大量业务时会显得太过于冗余(如,多参数得URL拼接)。

    8.2、Feign简介

    官网:https://github.com/OpenFeign/feign

    Feign是一个Netflix开发得声明式、模块化得HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及WebSocket。Feign可以帮助我们更加便捷、优雅地调用HTTP API。

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

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

    8.3、快速入门

    在订单微服务中增加Feign的支持。

    8.3.1、导入依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-feign</artifactId>
    </dependency>
    

    8.3.2、创建一个ItemFeignClient接口

     package cn.zuoqy.springclouddemoorder.feign;
    
    import cn.zuoqy.springclouddemoorder.model.Item;
    
    import [org.springframework.cloud.netflix.feign](http://org.springframework.cloud.netflix.feign/).FeignClient;
    
    import org.springframework.web.bind.annotation.PathVariable;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
    
    * Created by zuoqy on 17:24 2018/10/26.
    
    */
    
    @FeignClient(value = "springcloud-demo-item")//声明这是一个Feign客户端,并且指明服务器id
    
    public interface ItemFeignClient {
    
        // 这里定义了类似于SpringMvc用法的方法,就可以进行Restful的调用了
    
        @RequestMapping(value = "/item/query/{id}", method=RequestMethod.GET)
    
        public Item queryItemById(@PathVariable("id") Long id);
    
    }
    
    8.3.3、改造ItemService
    ItemService.png
    8.3.4、在启动类中添加@EnableFeignClients注解
    启动类.png
    8.3.5、重启测试
    重启测试.png

    测试结果,一切正常。

    8.4、流程分析

    1、由于我们在入口@EnableFeignClients注解,Spring启动后会扫描标注了@FeignClient注解的接口,然后生成代理类。

    2、我们在@FeignClient接口中指定了value,其实就是指定了在Eureka中的服务名称

    3、在FeignClient中定义方法以及使用了Spring Mvc的注解,Feign就会根据注解中的内容生成对应的url,然后基于Ribbon的负载均衡去调用REST服务

    • a)、为什么使用的是SpringMVC的注解?
      i.其实,Feign是有自己的注解的,是因为SpringCloud对Feign做了增强,兼容了SpringMVC的注解,使我们的学习成本更低
      i png
      ii.专业的解释是这样的:
      org.springframework.cloud.netflix.feign.FeignClientsConfiguration
      ii.png
      设置默认的契约是SpringMVC契约

    8.5、Feign的多参数构造

    多参数构造.png

    相关文章

      网友评论

        本文标题:Spring Cloud—八、使用Feign实现声明式的Rest

        本文链接:https://www.haomeiwen.com/subject/luvecqtx.html