学习笔记:微服务12 spring cloud Feign(Rest请求)+ hystrix(熔断)

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

Feign在RestTemplate的基础上对其封装,由它来帮助我们定义和实现依赖服务接口的定义。Spring Cloud Feign 基于Netflix Feign 实现的,整合了Spring Cloud Ribbon 与 Spring Cloud Hystrix,并且实现了声明式的Web服务客户端定义方式。

我的理解是Feign是一个接口,是发起rest请求的工具,它集成了ribbon负载均衡和hystrix的错误熔断机制,通过rest的方式得到类似rpc远程调用的服务,也就是根据用户(客户)的url路径参数要求,去申请其他微服务的资源(多个服务可以负载均衡比如轮询),如果某个微服务宕机,可以通过hystric熔断(躲开),并返回回退函数的值给客户。

1. 创建微服务spring start project项目,命名为microservice-Feign-Hystrix-8804

2.pom.xml  依赖

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

3.application.properties

server.port: 8804
spring.application.name=MicroserviceFeignHystrix8804
spring.cloud.discovery.enabled=true
eureka.client.serviceUrl.defaultZone=http://admin:123@centos7:8101/eureka/,http://admin:123@microservice1:8102/eureka/
feign.hystrix.enabled=true

4. 启动类增加注解

@EnableDiscoveryClient
@EnableFeignClients
@EnableEurekaClient
@EnableCircuitBreaker
@SpringBootApplication

5. 声明@FeignClient接口


// 作为消费者轮询eureka中名字为MicroserviceServerA8801的微服务,如果超时,回退执行HelloClientFallback.class
@FeignClient(name = "MicroserviceServerA8801", fallback = HelloClientFallback.class)
public interface HelloClient {
 
	//定义声明接口
    @RequestMapping(method = RequestMethod.GET, value = "/hello")
    public String hello();
     
    @RequestMapping(method = RequestMethod.GET, value = "/toHello")
    public String toHello();
    
    @RequestMapping(method = RequestMethod.GET, value = "/listusers")
    public String listusers();
}

6. 定义回退类HelloClientFallback

@Component
public class HelloClientFallback implements HelloClient {
 //这是回退类,超时就执行这个得到返回值
	
    public String hello() {
        return "fallback hello";
    }
 
    public String toHello() {
        return "fallback timeout hello";
    }

	public String listusers() {
		 return "fallback listusers";
	}
 
}

7. 定义控制类FeignController  对接口声明的实现

@RestController
public class FeignController {
     
    @Autowired
    private HelloClient helloClient;
 
    //对声明接口方法的具体实现
    @RequestMapping(method = RequestMethod.GET, value = "/hello")
    public String hello() {
        return helloClient.hello();
    }
    
    @RequestMapping(method = RequestMethod.GET, value = "/listusers")
    public String listusers() {
        return helloClient.listusers();
        // helloclient 是一个restemplate的请求,就是去发起连接请求获取返回,不能获取就执行回退程序
    }
     
    @RequestMapping(method = RequestMethod.GET, value = "/toHello")
    public String toHello() throws InterruptedException {
        Thread.sleep(500);
        String result = helloClient.toHello();
        HystrixCircuitBreaker breaker = HystrixCircuitBreaker.Factory
                .getInstance(HystrixCommandKey.Factory
                        .asKey("HelloClient#toHello()"));  
        System.out.println("断路器状态:" + breaker.isOpen());
        return result;
    }
}

8,测试,先启动eureka服务,再启动微服务生产者MicroserviceServerA8801 我这启动两次,分别在8801,8802端口提供相同服务,最后启动本测试微服务在端口8804

可见访问同一网址多次,会负载均衡轮询多个MicroserviceServerA8801同名服务(8801,8802端口),当轮询的服务中断时,返回回退信息“fallback listusers”。

 

 

2024 年最新基于 Spring Cloud 的微服务架构分析 从服务发现的实现原理上来说,Consul 和 Etcd 的基本设计思路是一致的,Etcd 更简单,Consul 则更像一个全栈的解决方案,功能比 Etcd 要更丰富,比如支持可视化的 Web UI 管理界面、支持多数据库中心、安全层面除了 HTTPS 外还支持 ACL、更加全面的健康检查功能、内置 DNS Server 等,这些都是 Etcd 所不具备的,但是更全面的功能往往意味着更高的复杂性,针对微服务的服务注册和发现场景,Etcd 完全够用了。为了解决这样的问题,产生了断路器等一系列的服务保护机制。 阅读详情

相关推荐

java微服务面试题万字总结:Spring Cloud面试题总结(附答案解析)

前言 最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,我感觉在面试这块讲的非常清楚:获取面试资料只需:点击这里领取!!! 暗号:优快云 1、什么是 Spring Cloud ? Spring cloud 流应用程序启动器是 于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建

weixin_50917449的博客 7514

使用Feign实现声明式REST调用

使用Feign实现声明式REST调用 之前示例中是使用RestTemplate实现REST API调用的,代码大致如下: public User findById(@PathVariable Long id){ return this.restTemplate.getForObject("http://microservice-provider-user/"+id,User.class); } 由代码可知,我们是使用拼接字符串的方式构造URL的,该URL只有一个参数。然而在现实中

shi_zi_183的博客 596

深度剖析Spring Cloud的微服务架构

SpringCloud是一个相对比较新的微服务框架,2016年才推出1.0的release版本.虽然SpringCloud时间最短,但是相比Dubbo等RPC框架,SpringCloud提供的全套的分布式系统解决方案SpringCloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。...

weixin_72753070的博客 1668

feign的熔断

当页面访问失败时,就发生熔断,此时需要提供用户友好界面 在服务消费者pom文件中加入hysrtix依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> 然后创建feign的实现类,实现feign中.

weixin_45893072的博客 2873

study-micro-services:spring cloud入门 学习笔记,Spring Boot + Spring Cloud + mybatis + h2 基础做脚手架;集成了注册中心Eureka,单实例、集群的实践; 集成Ribbon 做负载,Zuul网关动态路由分发以及参数配置调优、Spring Gateway网关做路由分发以及动态路由;Hystrix熔断,Feign声明式调用; Config 配置中心、Sleuth调用链路跟踪、Bus消息总线等全家桶项目

study-micro-services 本项目为微服务学习的实践笔记 全栈工程师 学习笔记 Spring Boot 项目实践 Spring Cloud 多模块实践 参考链接 Spring Boot引导页: MyBatis集成Spring Boot: 、、 Spring Cloud集成Eureka Spring Cloud集成Ribbon 、 Spring Cloud集成Zuul Spring Cloud集成Feign Spring Cloud集成Hystrix Spring Cloud Config Spring Cloud Sleuth https://spring.io/projects/spring-cloud-sleuth#overview 非Spring Boot Web项目 注册节点到Eureka Server并提供服务 https://blog.youkuaiyun.com/qq_

如何点亮一颗sensor

要点亮一个sensor需要从,时钟、sensorI2C,供电,reset脚,mipi的配置几个方面一一确认。 reset脚拉高 给sensor的时钟有没有。(目前用到的常为24MHZ) 供电 查看sensor的数据手册,看有几个电源,用示波器量一下是否为手册规定的电压 比如:DVDD 数字电压: AVDD模拟电压 DOVDD芯片引脚出来的电压等为多少。 sensor的I2C能否抓到 将I2C的口对应上,用示波器量取i2c的波形。 检查有应答并且数据正确。读写地址是否正...

weixin_40787463的博客 3646

feign hystrix 实现服务熔断、降级处理

feign: hystrix: enabled: true #在30秒内,发生20次以上的请求时,假如错误率达到50%以上,则断路器将被打开。 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 5000 #请求超时时间 feign hystrix 实现服务熔断、降级处理 feignclient

weixin_46562226的博客 4316

PCI-Express、MiniPCIe、ExpressCard接口转换说明/引脚互换关系

通过引脚PIN互换可以在PCI-Express、MiniPCIe、ExpressCard之间切换不同的接口;提供接口引脚表和标准尺寸图。

tech34的博客 7122

Feign+Resilience4j实现微服务熔断机制:原理与实战

熔断器不是银弹,而是微服务稳定性保障体系中的重要一环。充分理解业务场景(哪些服务可以降级?基于实际流量调整阈值(通过监控数据持续优化)与重试、限流等模式配合使用“好的熔断策略应该像优秀的消防系统——平时无感知,灾时显真章。附录Resilience4j官方文档微服务模式:熔断器。

技术交流,一起进步 1891

ROS2_Moveit2_Ur5e_Grasp项目详解(二):核心模块功能解析

本文深入解析了ROS2_Moveit2_Ur5e_Grasp项目的核心模块功能。重点阐述了OctoMap建图模块如何为机械臂提供实时三维环境感知,并详细介绍了Robotiq夹爪与MoveIt2的集成控制、UR5e的运动规划策略,以及视觉模块如何协同工作,最终实现从目标检测到动态抓取的完整闭环。

weixin_29254029的博客 111

YOLOv11架构革新:华为VanillaNet与BiFPN深度融合的突破性改进实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 136

Spring Cloud之Feign消费和Hystrix熔断

spring cloud微服务技术之Feign消费和Hystrix熔断。Feign消费也是微服务中最重要的技术之一,其可以通过本地调用接口的方式调用远程的服务接口,同时配以Hystrix进行熔断处理,无论是从理论还是技术实现,都需要形象的理解和实战的体会。这里从通俗的方法理解理论,并且从基本的实现方法实现Feign消费和Hystrix熔断的使用。

play_big_knife的博客 1813

Cesium 实现动态加载气象数据:渲染成动态雨雪/云层效果(源码 + 原理)

本文介绍了在Cesium中实现动态天气效果的技术方案。核心思路是通过时间轴驱动多层数据动态切换,包括:1)时间维度处理,按序列加载不同气象图层;2)空间维度处理,将气象数据切分为瓦片;3)效果层实现,制作风场、降水等动态可视化效果。文章详细讲解了后端数据预处理(生成瓦片和风场JSON)、前端实现(双层雷达瓦片交替渐变、风场粒子系统)的具体方法,并提供了完整的代码示例。此外还探讨了雨雪粒子、云层效果等增强功能,以及工程化建议,为构建科学准确的动态天气可视化系统提供了实用解决方案。

专注AI大模型,软件混淆,授权 621

【Java】Spring Cloud 核心组件详解:Eureka、Ribbon、Feign 与 Hystrix

在微服务架构中,服务的注册发现、负载均衡、远程调用及容错保护是核心问题。Spring Cloud Netflix 套件提供了 Eureka、Ribbon、Feign、Hystrix 四大核心组件,分别对应上述问题的解决方案。本文基于 Spring Boot 2.x + Spring Cloud Netflix 版本,从功能定位、整合场景、代码示例及调用链路四个维度,带大家吃透这四大组件的使用逻辑。

lbbxmx111的博客 1705

RK3588 Android12 添加HDMI和喇叭声音通道切换选项

rk3588 android12系统默认接hdmi out时,声音会切换到hdmi out输出,主板声卡喇叭输出会没有声音输出。现在添加一个选项设置hdmi out时,声音可以保持主板声卡喇叭输出。

Android系统开发笔记 4163

【问题解决】Python 异步 asyncio 卡死、协程不执行、任务泄漏,保姆级排错

本文详细分析了Python异步编程中常见的卡死、协程不执行和任务泄漏问题。文章首先列举了这些问题的典型表现,如程序卡住、死锁、任务未启动等。然后深入剖析了各类问题的根源,包括同步阻塞操作、未正确await、资源未清理等。针对这些问题,文章提供了两套解决方案:一是异步编程最佳实践,包括安全协程执行、带超时的执行、任务清理等实用方法;二是死锁检测和预防机制,通过锁管理和等待图分析来避免死锁。文章还包含可直接使用的代码示例,帮助开发者快速定位和解决异步编程中的常见问题。

博客 450

SpringCloud Feign整合Hystrix实现服务降级、熔断、hystrix、ribbon超时时间问题

SpringCloud Feign整合Hystrix实现服务降级、熔断、hystrix、ribbon超时时间问题

鸢尾_的博客 6002

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

微服务Spring Cloud架构详解

负载均衡在系统架构中是一个非常重要的内容,因为负载均衡是对系统的高可用、网络的压力的缓冲和处理能力扩容的重要手段之一,我们通常说的负载均衡都是指的是服务端的负载均衡,其中分为硬件负载均衡和软件负载均衡。Spring Cloud 封装了Netflix公司开发的Eureka模块来实现服务治理 在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

Peter_Changyb的博客 9006

老版QQ原生表情gif动态

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MateCloud服务熔断:从Hystrix到Sentinel的实战演进指南

在微服务架构中,服务熔断是保障系统稳定性的关键技术。MateCloud作为一款基于Spring Cloud Alibaba的微服务架构,在服务熔断方面经历了从传统Hystrix到现代Sentinel的演进过程。本文将深入探讨这两种熔断方案的对比,并展示如何在MateCloud项目中实战应用Sentinel服务熔断。 ## 🔥 MateCloud微服务架构概览 MateCloud是一款**AI

gitblog_00626的博客 711

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

微服务Spring Cloud中Ribbon、Hystrix、Feign的关系、原理、配置解读

目录 1.三者关系简介 2.MNT中实例解读 2.1 ribbon 2.2 hystrix 2.3 Feign 3.Ribbon 3.1 简介 3.2 部分源码 3.2.1 LoadBalancerAutoConfiguration 自动化配置类 3.2.2 LoadBalanceInterceptor 3.3 配置详解 3.3.1 自动化配置 3.3.2 参数配置...

Lcy's Blog 2032

【SpringCloud基础】Feign开启对Hystrix支持

前言 Github:https://github.com/yihonglei/thinking-in-springcloud Eureka注册中心:eureka-server 服务提供者(订单服务):eureka-provider-order Feign-api(服务接口抽象):eureka-feign-api Feign客户端消费:eureka-consumer-feign-hystr...

yhl_jxy的博客 3326

Spring Cloud :Hystrix实现优雅的服务容错

作为Spring Cloud体系内实现熔断机制的关键组件,Hystrix承担着服务容错保护的重要职责。它由Netflix开源,旨在为分布式系统提供延迟处理和容错解决方案。其核心作用在于引入延迟容忍与容错逻辑,精细管理分布式服务间的交互,确保系统的高可用性和鲁棒性。在复杂分布式系统环境中,往往涉及数十个应用,这些应用依赖于多个项目。不可避免地,每个依赖项目都有可能在某个时刻遭遇失败并触发故障。若未对这些故障实施有效隔离措施,整个分布式系统可能面临崩溃风险。

2509_94034411的博客 992

SpringCloud微服务(三)——Feign、Hystrix

文章目录四、Feign1、概述2、功能实现<1>、远程调用<2>、熔断机制五、Hystrix1、简述2、服务雪崩3、线程隔离、服务降级<1>、简述<2>、程序实现4、服务熔断<1>、熔断原理<2>、程序实现5、服务监控HystrixDashboard<1>、简要概述<2>、程序实现 四、Feign 1、...

weixin_44240370的博客 730
上一篇: 学习笔记:微服务11 spring cloud ribbon(负载均衡)+ hystrix(熔断)
下一篇: 学习笔记:微服务13 spring boot2.x oauth2-client
领尚
博客等级 码龄14年 1143粉丝 271原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值