一、简介

Feign是Netflix开发的声明式,模块化的HTTP客户端

1 导入依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2 配置调用接口

/*
* 声明需要调用的微服务名称
* @FeignClient
* */
@FeignClient(name = "service-product")
public interface ProductFeignClient {
/*
* 配置需要调用的微服务接口
* */
@RequestMapping(value = "/product/{id}", method = RequestMethod.GET)
public Product findById(@PathVariable Long id);
}

3 在启动类上激活feign

@EnableFeignClients

4 通过自动的接口调用远程微服务

@Autowired
private ProductFeignClient productFeignClient;

@GetMapping("{id}")
public Product findById(@PathVariable Long id){
Product product = productFeignClient.findById(id);
return product;
}

二:日志追踪
配置服务消费者的配置文件
# 配置feign日志输出
# 日志级别: NONE(不输出日志,性能高) BASIC(适用于生产环境追踪问题)
# HEADERS(在BASIC基础上,记录请求和响应头信息) FULL(记录所有信息)
feign:
client:
config:
service-product: # 需要调用的服务名称,即服务服务提供者
loggerLevel: FULL
logging:
level:
com.gfy.eureka.feign.ProductFeignClient: debug

三、源码分析
启动类 @EnableFeignClients
    --->FeignClientsRegister.class(1.注册配置2.创建并注册FeignClientFactoryBean对象)
       --->FeignClientFactoryBean
    --->FeignInvocaitonHandler(动态代理对象)
    扫描所有@FeignClien注解,找到对应的接口
    创建标注了@FeignClient接口的动态代理对象FeignInvocationHandler

四、高并发问题
由于tomcat会以线程池的形式对所有请求进行统一管理,所以当某个方法存在耗时问题时,
外面积压的请求越来越多,会导致其他请求无法访问,最终导致系统的崩溃
为了解决该问题,采用两种方法:
  1.线程池隔离(为访问量高的接口创建独立的线程池)
  2.信号量隔离(为每个请求设置访问阈值,请求量若超过阈值,则请求失败)
五:雪崩
由于系统服务之间的强依赖性,导致在某服务处于长时间等待时,导致依赖其服务的服务积压过多的请求,造成服务瘫痪(故障传播)。
解决方法:
      1.服务隔离
      2.熔断降级
      3.服务限流

最新文章

  1. GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
  2. SDUST 作业10 Problem D 魔方阵
  3. HTML5读取本地文件 FileReader API接口
  4. HDU 3966 Aragorn&#39;s Story (树链点权剖分,成段修改单点查询)
  5. GridView ItemCommand
  6. jquery 使用方式记录
  7. IsDbNull 方法的用法
  8. Tomcat 中会话超时的相关配置
  9. 使用jquery的js的页面实现例子
  10. 嵌入式Linux引导过程之1.6——Xloader的Xloader_Entry
  11. 最长k可重线段集问题
  12. MT6575 3G切换2G
  13. Linux文件与目录的默认权限与隐藏权限 - umask, chattr, lsattr, SUID, SGID, SBIT, file
  14. VMware12安装虚拟机教程、Ubuntu16.04安装教程(包括vmware tools的安装)
  15. oracle - 查询某些表是空白,需要提升权限后,才可查询出数据
  16. 微信调试工具测试时有时候复制URL没有corpid解决
  17. Visual Studio UML类图
  18. 汇编 OD 标志位 置位相关指令
  19. ajax的基础
  20. Django:admin后台汉化问题

热门文章

  1. 部署mall电商系统踩坑记录
  2. Codeforces 919E Congruence Equation(循环节+数论)
  3. python调用c/c++方法
  4. [Linux系统]安装时出现Requires: libc.so.6(GLIBC_2.17)(64bit) Requires: systemd Requires: libstdc++.so时解决办法
  5. 微信小程序中实现自定义省市区选择
  6. nginx配置普通server
  7. jquery 中上传的图片file文件,如果在html img元素中通过src展示 ,可以img的图片src属性直接去等于file文件吗,如果不可以的话,那么src怎么去展示file文件呢
  8. C# 将Dll文件打包到exe中
  9. java中的Filter(过滤器)和Intercepter(拦截器)的认知
  10. pr 如何给视频进行加速,慢速处理