• 了解Feign的作用
  • 掌握Feign的使用过程
  • 掌握Feign的负载均衡配置
  • 掌握Feign的熔断配置
  • 掌握Feign的压缩配置
  • 掌握Feign的日志配置

一、 Feign简介

Feign [feɪn] 译文 伪装。Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解。不再需要拼接URL,参数等操作。项目主页:https://github.com/OpenFeign/feign 。

  • 集成Ribbon的负载均衡功能
  • 集成了Hystrix的熔断器功能
  • 支持请求压缩
  • 大大简化了远程调用的代码,同时功能还增强啦
  • Feign以更加优雅的方式编写远程调用代码,并简化重复代码

总结:

  • feign 是一个[声明式]REST客户端。(http客户端:RestTemplate 使用Restful 风格进行开发的)
  • feign 是基于RestTemplate开发的一个声明式的Rest客户端;只需要写一个接口,定义一个注解,就可以直接使用。

二、Feign的快速入门

使用Feign替代RestTemplate发送Rest请求。

2.1 使用feign的步骤

  1. consumer中添加起步依赖(spring-cloud-starter-openfeign)
  2. consumer中编写一个接口, 添加一个注解进行声明@FeignClient,注解后面的name 指定的是要发送到哪个微服务对应的名字。最后定义一个方法。
  3. consumer中编写控制层,在Controller中使用@Autowired注入FeignClient。(在controller service dao里面都可以使用)
  4. consumer中在启动类中添加@EnableFeignClients,开启Feign。
  5. provider中被调用方controller 一定要【实现】声明的接口的方法。

(1)导入依赖

在user-consumer中添加spring-cloud-starter-openfeign依赖

<!--配置feign-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(2)创建Feign客户端(接口)

在user-consumer中创建com.it.feign.UserClient接口,添加一个注解进行声明@FeignClient,定义一个方法。

//name 指定的是要发送到哪个微服务对应的名字
@FeignClient(name = "user-provider",fallback = UserClientFallback.class)
/*@RequestMapping("/user")*/
public interface UserClient {/*** 实际上是发送请求给微服务 获取数据的* @param id* @return*/@RequestMapping("/user/find/{id}")public User findById(@PathVariable(name = "id") Integer id);
}

 解释:

  1. Feign会通过动态代理,帮我们生成实现类。
  2. 注解@FeignClient声明Feign的客户端,注解value指明服务名称
  3. 接口定义的方法,采用SpringMVC的注解。Feign会根据注解帮我们生成URL地址
  4. 注解@RequestMapping中的/user,不要忘记。因为Feign需要拼接可访问地址

(3)编写控制层

在user-consumer中:  创建com.it.controller.ConsumerFeignController,在Controller中使用@Autowired注入FeignClient,代码如下:

@RestController
@RequestMapping("/feign")
public class ConsumerFeignController {@Autowiredprivate UserClient userClient;//根据ID获取用户的数据(要使用feign的方式来获取)@RequestMapping(value = "/{id}")public User findById(@PathVariable(name = "id") Integer id){return userClient.findById(id);}
}

(4)在user-provider的controller 一定要【实现】声明的接口的方法。

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User findById(@PathVariable Integer id){System.out.println("这个是18081==================================");return userService.findById(id);}//provider接受这个请求@GetMapping("/find/{id}")public User find(@PathVariable Integer id){System.out.println("这个是18081==================================");return userService.findById(id);}
}

(5)在启动类中开启Feign

在user-consumer的启动类中添加@EnableFeignClients,开启Feign。

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
@EnableFeignClients//开启feign
public class UserConsumerApplication {public static void main(String[] args) {SpringApplication.run(UserConsumerApplication.class,args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}@Beanpublic Logger.Level feignLoggerLevel(){//设置feign调用的级别是 Fullreturn Logger.Level.FULL;}
}

(6)测试

请求<http://localhost:18082/feign/2>,效果如下:

Spring Cloud Feign的原理及基本使用相关推荐

  1. Spring Cloud Feign设计原理

    点击关注,快速进阶高级架构师 作者:亦山札记 什么是Feign? Feign 的英文表意为"假装,伪装,变形", 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调 ...

  2. Spring Cloud Feign原理详解

    目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring ...

  3. Spring Cloud Feign原理

    Spring Cloud Feign原理 Feign运行过程 重试机制 服务降级 负载均衡 隔舱原理 Feign运行过程 通过主类上的EnableFeignClients 注解开启FeignClien ...

  4. Spring Cloud Feign使用详解

     通过前面两章对Spring Cloud Ribbon和Spring Cloud Hystrix的介绍,我们已经掌握了开发微服务应用时,两个重要武器,学会了如何在微服务架构中实现客户端负载均衡的服务调 ...

  5. Spring Cloud Feign - 内部实现细节

    1. 概述 Feign用于服务间调用,它的内部实现是一个包含Ribbon(负载均衡)的JDK-HttpURLConnection(Http)调用.虽然调用形式是类似于RPC,但是实际调用是Http,这 ...

  6. Spring Cloud Feign 请求压缩 、Feign的日志级别配置

    一.Spring Cloud Feign 请求压缩 #开启压缩compression:request:enabled: true # 开启请求压缩#最小触发压缩的大小min-request-size: ...

  7. Spring Cloud Feign 1(声明式服务调用Feign 简介)

    Spring Cloud Feign基于Netflix Feign 同时整合了Spring Cloud Ribbon和Spring Cloud Hytrix,除了提供两者的强大功能外,它还提供了一种声 ...

  8. Spring Cloud Feign 请求时附带请求头

    Spring Cloud Feign 请求时附带请求头 问题描述 解决方案 FeignConfiguration 使用 配置修改 问题描述 Feign 在请求时是不会将 request 的请求头带着请 ...

  9. Spring Cloud的负载均衡Spring Cloud Ribbon和Spring Cloud Feign

    一.客户端负载均衡:Spring Cloud Ribbon. Spring Cloud Ribbon是基于HTTP和TCP的客户端负载工具,它是基于Netflix Ribbon实现的.通过Spring ...

最新文章

  1. Java基础学习总结(20)——基础语法
  2. 【转】如何在忘记CentOS的root密码的情况下修改root密码。
  3. 微服务接口限流的设计与思考(附GitHub框架源码)
  4. 利用binlog进行数据库的还原
  5. iphone字体_iOS 13终于能换花式字体了?!发在朋友圈里真的超好看!
  6. 打印SAP ABAP web service call完整的payload
  7. Highcharts图表-ajax-获取json数据生成图表
  8. Mac/Linux系统连接远端服务器以及相同IP地址的服务器账号密码重置,ssh失败问题
  9. 数学和物理的共同演化
  10. select、poll与epoll的优缺点
  11. python 构建来源gis_Python语言在ArcGIS环境中的应用.pptx
  12. java必会单词_java必会的英语单词
  13. echarts热力背景图_echarts自定义背景图片
  14. 【100%通过率 】华为OD真题c++/java/python【完美走位】【 2022 Q4 | 100分】
  15. windows CMD批处理中的一些特殊连接符号
  16. 如何放大图片,教您三种方法!
  17. linux发行版中的i386/i686/x86-64/有什么区别?
  18. 软件项目经理需要了解的法律法规
  19. 工业界推荐_Industrial RS(4)
  20. Kubernetes PV和PVC 常见问题

热门文章

  1. 炫云为什么要采用让人看不懂的GHZ计费?
  2. 用Java实现五子棋对弈
  3. i5系列的服务器cpu,i5 系列 CPU 的所有型号。
  4. 《关键信息基础设施安全保护条例》简介
  5. Hadoop 查看日志文件
  6. X002---SQL用户Alteryx指南
  7. linux 音频文件切割_适用于 Linux 系统的 6 款最佳音频编辑软件
  8. 10-20个城市或纳入新限购范围 成交下降2%至3%
  9. 十四条令PHP初学者头疼问题大总结
  10. Android :RxJava学习笔记之合并操作符