Feign组件
一、简介
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.服务限流
Feign组件的更多相关文章
- Spring Cloud Feign组件
采用Spring Cloud微服务框架后,经常会涉及到服务间调用,服务间调用采用了Feign组件. 由于之前有使用dubbo经验.dubbo的负载均衡策略(轮训.最小连接数.随机轮训.加权轮训),du ...
- docker 部署springcloud Feign组件无法访问问题
如题: docker部署后的服务注册ID是这样的. 这导致了Feign在调用其他组件的时候访问不到. 解决: 在docker部署指令添加EUREKA_INSTANCE_IP-ADDRESS=[你的IP ...
- springcloud微服务feign组件报错
今天在用springcloud搭建微服务时,利用feign做通讯组件,结果报错 java.lang.IllegalStateException: Failed to introspect Class ...
- ②SpringCloud 实战:引入Feign组件,完善服务间调用
这是SpringCloud实战系列中第二篇文章,了解前面第一篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 简介 Feign 是一个声明式的 RE ...
- SpringCloud微服务(02):Ribbon和Feign组件,实现服务调用的负载均衡
本文源码:GitHub·点这里 || GitEE·点这里 一.Ribbon简介 1.基本概念 Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TC ...
- Spring Cloud项目中通过Feign进行内部服务调用发生401\407错误无返回信息的问题
问题描述 最近在使用Spring Cloud改造现有服务的工作中,在内部服务的调用方式上选择了Feign组件,由于服务与服务之间有权限控制,发现通过Feign来进行调用时如果发生了401.407错误时 ...
- 不使用SpringBoot如何将原生Feign集成到Spring中来简化http调用
在微服务架构中,如果使用得是SpringCloud,那么只需要集成SpringFeign就可以了,SpringFeign可以很友好的帮我们进行服务请求,对象解析等工作. 然而SpingCloud是依赖 ...
- 深入Eureka/Feign/Hystrix原理学习(1)
第一步: 创建注册中心项目,引入cloud discovery相关依赖. ①在pom文件中引入相关依赖. ②在启动类上加上@EnableEurekaServer注解,标注这是一个注 册中心. ③在ap ...
- Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务
首先简单解释一下什么是声明式实现? 要做一件事, 需要知道三个要素,where, what, how.即在哪里( where)用什么办法(how)做什么(what).什么时候做(when)我们纳入ho ...
- SpringCloud微服务架构分布式组件如何共享session对象
一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...
随机推荐
- Software_programming_EnterpriseArch_ServiceWithSingleTonFactory
19:50:31 <UML 模式和应用> P322 系统需要支持多种第三方外部服务,例如费用计算,授权服务,库存系统,都具有不同的API, 而且还无法改变. 解决方案之一: 使用 单例模式 ...
- log4net两分钟三步急速搭建日志框架教程(注意System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System.Configuration.ConfigurationErrorsException: )
最近接了个活,winform的帮人做几个页面,这里就以winform项目为例了,之前log4net都是项目中继承好了的,这次自己研究从0到1搭建了一个,发现其实也蛮简单的,主要分为以下三步和一个注意事 ...
- Centos 7.9 部署Kubernetes集群 (基于containerd 运行时)
前言 当Kubernetes社区宣布1.20版本之后会逐步弃用 dockershim ,当时也有很多自媒体在宣 传Kubernetes弃用Docker.其实,我觉得这是一种误导,也许仅仅是为了蹭热度. ...
- iOS 绘制虚线
开发中经常用到虚线 创建一个imageView,直接调用下面的代码就可以了!,imageView的高一般设置2像素就可以了 - (void)drawLineByImageView:(UIImageVi ...
- js树搜索框查询所有匹配节点及父节点(纯js实现)
// 搜索框输入查询树节点(纯前台js) //name 搜索框输入的值: //wgObj.dwtreeDateAll 为树 的全量数据 // titleArr 与输入框匹配的节点数组 //arrTar ...
- 【Java】自定义mybatis
处理 sql in 多条件搜索时 单引号双引号问题 StringBuilder pidNoZeroIds = new StringBuilder(); Integer numTmp = 0; for ...
- docker-swarm轻量集群
使用docker swarm搭建docker轻量集群服务 当前流行的k8s集群搭建无疑是很好的docker集群管理服务,但是对于像我这种仅自己学习的玩家有些过于重量,所以今天使用docker自带的do ...
- vue3 门户网站搭建8-字体
浏览器默认的可选字体比较少,如果没有合适的则需要额外下载并引入. 一般使用 开源字体即可,商用需要花钱~ 将下载好的 ttf 格式字体放入项目下文件夹: 样式文件中增加配置:(main.css) 即可 ...
- 哲讯科技携手江苏大摩半导体借助SAP ERP打造数字化转型升级
项目启动会2022年10月28日,无锡哲讯科技携手江苏大摩半导体科技有限公司SAP ERP系统实施项目启动大会于江苏大摩的上海总部会议室胜利召开.双方项目组核心成员,共同见证了本次SAP ERP实施项 ...
- npm查询所有可以安装的包
npm view 包名 versions