服务调用-Feign和熔断器Hystrix

SpringCloud——Hystrix详解 目录 一、Hystrix介绍 1、分布式系统面临问题 2、Hystrix概念 3、Hystrix作用 (1)服务降级 (2)服务熔断 二、服务降级案例 1、搭建Eureka服务端 (1)创建maven工程 (2)导入依赖 (3)配置application.yml (4)创建主启动类 (5)启动Eureka注册中心 2、搭建服务提供者Provider80 (1)创建maven工程 (2)导入依赖 (3)配置application.yml (4)创建启动类 (5)创建con 阅读详情

一、Feign

1、基本概念

  • Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • Spring Cloud对Feign进行了增强,使Feign支持了Spring
    MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
  • Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring
    Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
  • Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud
    feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud
    Ribbon时自行封装服务调用客户端的开发量。

二、实现服务调用

2.1在模块添加pom依赖

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2在调用端的启动类添加注解

@EnableFeignClients

2.3创建包和接口[案例]

创建client包 @FeignClient注解用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解用于对被调用的微服务进行地址映射。 @PathVariable注解一定要指定参数名称,否则出错
@Component注解防止,在其他位置注入CodClient时idea报错

package com.guli.edu.client;

@FeignClient("service-vod")
@Component
public interface VodClient {
	@DeleteMapping(value = "/eduvod/vod/video/{videoId}")
	public R removeVideo(@PathVariable("videoId") String videoId);
}

2.4调用微服务

在需要调用的业务层实现类中注入VodClient并使用其中的方法即可

2.5配置feign拦截器,解决请求头问题

@Configuration
public class FeignConfig {
    //配置feign拦截器,解决请求头问题
    @Bean
    public RequestInterceptor requestInterceptor() {
        return new RequestInterceptor() {

            //获取所有浏览器发送的请求属性,请求头赋值到feign
            public void apply(RequestTemplate requestTemplate) {
                //请求属性
                ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                if(attributes != null) {
                    HttpServletRequest request = attributes.getRequest();
                    //获取浏览器发起的请求头
                    Enumeration<String> headerNames = request.getHeaderNames();
                    if (headerNames != null) {
                        while (headerNames.hasMoreElements()) {
                            String name = headerNames.nextElement(); //请求头名称 Authorization
                            String value = request.getHeader(name);//请求头数据 "Bearer b1dbb4cf-7de6-41e5-99e2-0e8b7e8fe6ee"
                            requestTemplate.header(name,value);
                        }
                    }
                }

            }
        };
    }
}

三、Hystrix基本概念

3.1SpringCloud调用接口过程

在这里插入图片描述

(1)接口化请求调用当调用被@FeignClient注解修饰的接口时,在框架内部,将请求转换成Feign的请求实例feign.Request,交由Feign框架处理。

(2)Feign :转化请求Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,封装了Http调用流程。

(3)Hystrix:熔断处理机制 Feign的调用关系,会被Hystrix代理拦截,对每一个Feign调用请求,Hystrix都会将其包装成HystrixCommand,参与Hystrix的流控和熔断规则。如果请求判断需要熔断,则Hystrix直接熔断,抛出异常或者使用FallbackFactory返回熔断Fallback结果;如果通过,则将调用请求传递给Ribbon组件。

(4)Ribbon:服务地址选择 当请求传递到Ribbon之后,Ribbon会根据自身维护的服务列表,根据服务的服务质量,如平均响应时间,Load等,结合特定的规则,从列表中挑选合适的服务实例,选择好机器之后,然后将机器实例的信息请求传递给Http Client客户端,HttpClient客户端来执行真正的Http接口调用;

(5)HttpClient :Http客户端,真正执行Http调用根据上层Ribbon传递过来的请求,已经指定了服务地址,则HttpClient开始执行真正的Http请求

3.2Hystrix概念

Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。

比如系统中有很多服务,当某些服务不稳定的时候,使用这些服务的用户线程将会阻塞,如果没有隔离机制,系统随时就有可能会挂掉,从而带来很大的风险。SpringCloud使用Hystrix组件提供断路器、资源隔离与自我修复功能。下图表示服务B触发了断路器,阻止了级联失败

在这里插入图片描述

四、feign结合Hystrix使用

4.1依赖

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

<!--hystrix依赖,主要是用  @HystrixCommand -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

<!--服务注册-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

4.2在配置文件中添加hystrix配置

#开启熔断机制
feign.hystrix.enabled=true
# 设置hystrix超时时间,默认1000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

4.3VodClient接口的注解

@FeignClient(name = "service-vod", fallback = VodFileDegradeFeignClient.class)
@Component
public interface VodClient {
    @DeleteMapping(value = "/eduvod/vod/{videoId}")
    public R removeVideo(@PathVariable("videoId") String videoId);

    @DeleteMapping(value = "/eduvod/vod/delete-batch")
    public R removeVideoList(@RequestParam("videoIdList") List videoIdList);
}

4.4创建熔断器的实现类

@Component
public class VodFileDegradeFeignClient implements VodClient {
    @Override
    public R removeVideo(String videoId) {
        return R.error().message("time out");
    }

    @Override
    public R removeVideoList(List videoIdList) {
        return R.error().message("time out");
    }
}
feign配合hystrix使用 1.添加pom文件 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </d... 阅读详情

相关推荐

Spring Cloud 之 Feign,Hystrix 和 Gateway

Feign声明式服务调用 Feign概述 • Feign 是一个声明式的 REST 客户端,它用了基于接口的注解方式,很方便实现客户端配置。 • Feign 最初由 Netflix 公司提供,但不支持SpringMVC注解,后由SpringCloud 对其封装,支持了SpringMVC注 解,让使用者更易于接受。 Feign自动集成Ribbon,且默认开启相关功能 Feign自动集成Hystrix,但默认关闭,需要手动开启 Feign 快速入门 在消费端引入 open-feign 依赖 编写Feign

xglfire的博客 1711

hystrix详解

笔记,博客来源: ———————————————— 版权声明:本文为优快云博主「韩金群」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.youkuaiyun.com/hjq_ku/article/details/89520168 https://blog.youkuaiyun.com/hjq_ku/article/details/89516530 一.什么是hystrix? hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔

lyh1023812的博客 2万+

【SpringCloud】服务调用Feign是什么呢,又该如何用呢?

一、Feign的概念 Feign是Netflix开发的声明式、模板化的HTTP客户端,Feign可以帮助我们更加便捷、优雅地调用HTTP API。 二、Feign的作用 Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。 例如之前拼接URL的形式: 使用feign,不用这中拼接url...

像风走过八千里 3452

详解Hystrix

一文讲明白微服务的容错机制,以及hystrix的详细使用。

BugMan的博客 6619

基于python+mediapipe的手势拖动识别(无gpu)

手势点方块拖动

weixin_38029956的博客 5982

GraphRAG + Ollama 本地化部署实战:从零搭建知识图谱问答系统

本文详细介绍了如何在本地部署GraphRAG与Ollama,搭建一个完全自主可控的知识图谱问答系统。通过逐步指导环境配置、项目初始化、核心设置修改以及源码适配,成功将GraphRAG从依赖云端OpenAI API转向本地Ollama服务,并选用qwen2.5:7b和nomic-embed-text模型。该方案有效解决了数据隐私与持续API成本问题,特别适合中小企业构建内部知识库或智能客服系统。

x2y3z4a5b的博客 919

hystrix的理解和使用

一、概述 Hystrix是一个用于处理分布式系统的延迟和容错开源库,在分布式系统中,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能保证在一个依赖出现问题时,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。 二、Hystrix能做什么 1、对调用其他服务造成的异常和超时提供保护和控制 2、在复杂的分布式系统中防止级联失败 3、快速失败和迅速恢复 4、当必要时fallback和优雅的降级 5、提供实时监控,警告和可选择的控制 三、hystrix怎么去执行它的目标 1、将外部系统的所

cheng的博客 1万+

TSEND_C指令错误代码解析与实战排错指南

本文详细解析西门子PLC中TSEND_C指令的常见错误代码,包括连接建立、参数配置、资源限制和网络通信等错误类型。针对错误代码80C4等典型问题提供实战排错指南,帮助工程师快速诊断和解决工业通信中的连接故障,提升系统可靠性。

backprop5master的博客 413

SpringCloud+Vue在线教育项目——服务调用Feign和熔断器Hystrix的使用

SpringCloud+Vue在线教育项目——服务调用Feign和熔断器Hystrix的使用

m0_46275020的博客 825

高速光耦在隔离串口通信中的选型与优化策略

本文深入探讨了高速光耦在隔离串口通信中的关键作用与选型优化策略。针对串口通信中因普通光耦响应慢导致的误码问题,文章详细分析了响应时间、电流传输比、供电电压与隔离耐压等核心选型指标,并对比了6N137、HCPL-0601等主流型号。同时,提供了电路设计、PCB布局的优化技巧及实用的调试指南,旨在帮助工程师实现高速、稳定的隔离串口通信。

grpc6streamer的博客 322

C#量化交易的市场数据采集与分析:从0到1构建你的‘数据雷达’——对比5大神器,代码实战全解析!

数据是量化交易的‘氧气’,而好的数据采集与分析是你的‘呼吸机’!本文5大神器+代码实战,总有一款适合你!(本文代码均经过测试,但请根据实际需求调整!

java专栏 731

远程服务调用和熔断器

一、远程服务调用 Feign 1.基本概念 Feign 是 Netflix 开发的声明式、模板化的 HTTP 客户端,Feign 可以帮助我们更快捷、优雅地调用 HTTP API。Feign 支持多种注解,例如 Feign 自带的注解或者 JAX-RS 注解等。Spring Cloud 对 Feign 进行了增强,使 Feign 支持了 Sprin...

vnjohn 博主 > 主线分享后端领域业务设计知识、源码思想、架构设计 2123

PCL 提取两片点云的非重叠部分【2025最新版】

PCL 提取两片点云的非重叠部分。博客长期更新,本文最近一次更新时间为:2025年9月1日。

点云侠的博客 36万+

feign使用hystrix熔断的配置

熔断器hystrix 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。 Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。 Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix 还提...

weixin_30407613的博客 1451

回答网友提问:Word 里如何调用 DeepSeek API?

上面的 Visual Basic 定义了名叫 DeepSeekV3 的 subroutine,同理我们可以让 Trae 再写一个调用开启了 DeepThink(R1) 模式的 DeepSeek API,步骤类似,这里不再赘述。在 Word 的 File->Options 选项里,选择 Customize Ribbon,将 Developer 标签从左侧移到右侧,然后在 Developer 标签下新建一个 Group,随便起个名称。API 调用的 response,自动填充到了 Word 里。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 275

最详细的 SAP ABAP Web Service 创建和消费步骤讲解

本文原版发表于 SAP 官方社区,当时用的英文版写作,标题为:Step by step to create, consume and trace web service in ABAP system https://blogs.sap.com/2014/05/20/step-by-step-to-create-consume-and-trace-web-service-in-abap-system/ 总共阅读量超过 18 万。 How to create web service provider in A

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3151

使用SpringCloud实现Java分布式开发【part-4】:Feign服务调用的介绍及使用、Feign的负载均衡和熔断器、请求压缩和日期级别的配置

SpringCloud简介 Spring Cloud是Spring旗下的项目之一 Spring Cloud并不是一个组件 而是许多组件的集合 其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能 协调了分布式环境中各个系统 并且为各类服务提供模板性的配置 其主要涉及的组件包括: Eureka:注册中心 Zuul或Gateway:服务网关 Ribbon:负载均衡 Feign:服务调用 Hystrix或Resilience4j:熔断器 【在本篇中 将介绍Feign服务调用】 Feign服

"✧treasure mountain✧" 1437

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

(四)SpringCloud代码实战之hystrix熔断器

分布式微服务,在服务调用的时候可能回因为网络故障以及其他原因,造成服务无法调用。会导致该线程无法关闭,一直卡在这里,等到卡住的线程越来越多,服务器资源被耗尽,就会出现服务宕机,一连串相关的服务宕机(雪崩效应) hystrix可以解决这个问题!!! 下面教程是在用openfeign服务调用下使用hystrix熔断器,本文的教程在前文openfeign的基础上:(三)SpringCloud实战之openfeign服务调用 一、相关依赖 openfeign中集成了ribbon和hystrix。这里不用专门引入.

TAaron666的博客 4239

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

微服务实战|熔断器Hystrix初体验

Hystrix提供的熔断器,在调用某个服务提供者时,当一定时间内请求总数超过配置的阈值,且窗口期内错误率过高,那Hystrix就会对调用请求熔断,后续的请求直接短路,进入降级逻辑,并执行本地的降级策略。...

记录、分享技术总结,避坑经验等 1028

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用IntelliJ IDEA在Spring Cloud的Feign项目中使用Hystrix熔断器

Eureka注册中心:《使用IntelliJ IDEA创建Spring Cloud服务注册中心》 服务提供者创建:《使用IntelliJ IDEA创建Spring Cloud的Eureka Client》 Ribbon实现负载均衡:《使用IntelliJ IDEA创建Ribbon项目实现负载均衡》 集成Feign的项目:《使用IntelliJ IDEA创建集成Feign的项目简化服务调用的网...

我爱编程持之以恒 717

微服务之SpringCloud-负载均衡Ribbon、Hystrix熔断器、Feign服务调用

接上一篇 “微服务之SpringCloud简介及Eureka注册中心” 1.负载均衡Ribbon 1.1.什么是Ribbon 官方解释:Ribbon 是 Netflix 发布的负载均衡器,它有助于控制HTTP和TCP 客户端的行为。为Ribbon配置服务提供地址列表后,Ribbon就可基于某种负载均衡算法,自动的帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等,当然,我们也可以为Ribbon实现自定义的负载均衡算法。 1.2.代码使用Ribbon实现负载均衡 首

huang_yx的博客 587

Spring Cloud教程 | 第七篇:断路器 | Feign | Hystrix

一、前言 微服务架构中,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。由于服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。因此,我们需要需要一个“保险丝”,当对特定的服务的调用异常达到一个阀值时,“保险丝熔断”,此时调用此服务,会直接返回一个可定义的错误信息,而不是长...

好博的博客 595

SpringCloud-使用熔断器防止服务雪崩-Ribbon和Feign方式(附代码下载)

场景 SpringCloud-服务注册与实现-Eureka创建服务注册中心(附源码下载): https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/102535957 SpringCloud-服务注册与实现-Eureka创建服务提供者(附源码下载): https://blog.youkuaiyun.com/BADAO_LIUMANG_QIZHI/article/details/102558004 SpringCloud-创建服务消费者-Ribbon方...

261

Spring Cloud Feign 中使用Hystrix进行请求降级和快速失败

前言 微服务中经常会用到熔断器来增强服务依赖的稳定性,他可以在网络连接缓慢,资源繁忙,暂时不可用,服务脱机等情况中进行服务的快速失败,并可自我恢复,以避免请求线程的堆积造成大量资源的浪费。 相信读者看这篇文章的目的都是解决实际问题,并不是来看我分析源码的,如果对源码感兴趣的我推荐《重新定义》,所以我们直接上干货,下面我们就简单的利用Feign中集成的Hystrix进行快速失败和请求降级处理。 ...

晏霖/胖虎的博客 1万+

java feign请求pathvariable_SpringCloud无废话入门03:Feign声明式服务调用

1.Feign概述在上一篇的HelloService这个类中,我们有这样一行代码:return restTemplate.getForObject("http://hello-service/hello",String.class);对于代码有一定洁癖的你来说,一定感觉到了,这个url应该是可以被配置的。既然说到配置,那我们首先想到的就是使用java注解的方式。Feign就是这样一个注解框架,它也...

weixin_39746652的博客 502

springboot服务调用超时_SpringCloud服务调用源码解析汇总

相信我,你会收藏这篇文章的,本篇文章涉及Ribbon、Hystrix、Feign三个组件的源码解析 Ribbon架构剖析 这篇文章介绍了Ribbon的基础架构,也就是下图涉及到的6大组件: Ribbon源码解析 这篇文章以上篇文章为基础,详细介绍了Ribbon的代码执行流程:Ribbon的自动装配->请求拦截器->负载均衡 Hystrix工作流程解析 这篇...

weixin_29256771的博客 116
上一篇: 清理C盘【亲测有效】
下一篇: Nacos入门安装以及服务注册使用
智汇风渔AI小白
博客等级 码龄7年 1万+粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智汇风渔AI小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值