码迷,mamicode.com
首页 > 其他好文 > 详细

1. feign的使用及原理

时间:2020-07-20 22:35:44      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:方案   ctp   cloud   tpc   依赖   不用   bsp   tar   编写   

一:Feign介绍

  Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用像Java中通过封装HTTP请求报文的方式直接调用。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,这种请求相对而言比较直观。
Feign被广泛应用在Spring Cloud 的解决方案中,是学习基于Spring Cloud 微服务架构不可或缺的重要组件。
Feign支持多种注解,例如Feign自带的注解或者JAX­RS注解等。Spring Cloud对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Eureka,从而使得Feign的使用更加方便.

 

二. Ribbon VS Feign 

feign和ribbon是Spring Cloud的Netflix中提供的两个实现软负载均衡的组件,Ribbon和Feign都是用于调用其他服务的,方式不同。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式。
将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求。
不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致

1.启动类使用的注解不同,Ribbon 用的是@RibbonClient,Feign 用的是@EnableFeignClients。

2.服务的指定位置不同,Ribbon 是在@RibbonClient 注解上声明,Feign 则是在定义抽象方法的接口中使用@FeignClient 声明。

3.调用方式不同,Ribbon 需要自己构建 http 请求,模拟 http 请求然后使用 RestTemplate 发送给其他服务,步骤相当繁琐。

个人觉得主要原因是这个

Feign

Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。采用接口的方式, 只需要创建一个接口,然后在上面添加注解即可 ,将需要调用的其他服务的方法定义成抽象方法即可, 不需要自己构建 http 请求。然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写 客户端变得非常容易。

Ribbon

Ribbon 是一个基于 HTTP 和 TCP 客户端 的负载均衡的工具。它可以 在客户端 配置 RibbonServerList(服务端列表),使用 HttpClient 或 RestTemplate 模拟 http 请求,步骤相对繁琐。

三. 在工程中引入feign

1. 加入feign依赖

<!-- 服务之间http调用, 引入feign -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. 添加注解

在启动类增加注解

@EnableFeignClients

 

3. 修改工程为普通的jar

我们即将创建的这个工程, 专门用来管理维护feign调用请求

因为该工程式一个普通的jar 不需要打可执行的jar

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId> 5     
            <artifactId>maven‐jar‐plugin</artifactId>
        </plugin>
    </plugins>
</build>

4. 编写声明式接口

@FeignClient(name="product‐center")
publicinterfaceProductCenterFeignApi{

  /**
   * 声明式接口,远程调用http://product‐center/selectProductInfoById/{productNo}
   * @param productNo
   * @return
   */
  @RequestMapping("/selectProductInfoById/{productNo}")
  ProductInfo selectProductInfoById(@PathVariable("productNo") String productNo);
}

在order项目中配置

5. 细粒度配置

5.1 设置日志打印级别

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

as

1. feign的使用及原理

标签:方案   ctp   cloud   tpc   依赖   不用   bsp   tar   编写   

原文地址:https://www.cnblogs.com/ITPower/p/13347194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!