Feign组件
2024-09-08 18:17:30
一、简介
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.服务限流
最新文章
- GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
- SDUST 作业10 Problem D 魔方阵
- HTML5读取本地文件 FileReader API接口
- HDU 3966 Aragorn&#39;s Story (树链点权剖分,成段修改单点查询)
- GridView ItemCommand
- jquery 使用方式记录
- IsDbNull 方法的用法
- Tomcat 中会话超时的相关配置
- 使用jquery的js的页面实现例子
- 嵌入式Linux引导过程之1.6——Xloader的Xloader_Entry
- 最长k可重线段集问题
- MT6575 3G切换2G
- Linux文件与目录的默认权限与隐藏权限 - umask, chattr, lsattr, SUID, SGID, SBIT, file
- VMware12安装虚拟机教程、Ubuntu16.04安装教程(包括vmware tools的安装)
- oracle - 查询某些表是空白,需要提升权限后,才可查询出数据
- 微信调试工具测试时有时候复制URL没有corpid解决
- Visual Studio UML类图
- 汇编 OD 标志位 置位相关指令
- ajax的基础
- Django:admin后台汉化问题
热门文章
- 部署mall电商系统踩坑记录
- Codeforces 919E Congruence Equation(循环节+数论)
- python调用c/c++方法
- [Linux系统]安装时出现Requires: libc.so.6(GLIBC_2.17)(64bit) Requires: systemd Requires: libstdc++.so时解决办法
- 微信小程序中实现自定义省市区选择
- nginx配置普通server
- jquery 中上传的图片file文件,如果在html img元素中通过src展示 ,可以img的图片src属性直接去等于file文件吗,如果不可以的话,那么src怎么去展示file文件呢
- C# 将Dll文件打包到exe中
- java中的Filter(过滤器)和Intercepter(拦截器)的认知
- pr 如何给视频进行加速,慢速处理