springCloud - 第5篇 - 断路器 Hystrix ( Feign 、Ribbon )

2024-06-04 13:58

本文主要是介绍springCloud - 第5篇 - 断路器 Hystrix ( Feign 、Ribbon ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

一、为什么要有熔断

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。

为了解决这个问题,业界提出了断路器模型 。

以上出自:https://blog.csdn.net/forezp/article/details/81040990 

二、熔断实现

1. 首先 启动 注册中心 eureka 工程、服务生产者 see-param 工程(8803端口)、

                     服务消费者 feign 工程(8702端口)、服务消费者 ribbon 工程(8701 端口)。

(生产者和消费者这 2 个概念是相对的。在不同的业务场景中,2 者身份可互换。或多服务时,同一服务可兼具 2 个身份。)

分别访问 生产者:

2. feign 中熔断器实现。

配置文件中开启熔断:

# 开启断熔器: ( Feign 自带断路器,但默认为不开启: false)
feign.hystrix.enabled=true

在 SeeParamService 类中 @FeignClient 注解中加上参数 fallback ,并指明熔断方法实现类。

书写 熔断方法实现类:

package com.feign.servicefeign;import org.springframework.stereotype.Component;/*** @author yujiang* @description 迷断回调方法类* @date 2019/7/24 9:39*/// 注入IOC容器中,把本类交给 spring 管理
@Component
public class SeeParamError implements SeeParamService {@Overridepublic String seeParam(String param) {return " 乖乖加班吧,服务挂了,搬砖,搬砖 ... ";}}

此时, 关闭服务生产者 see-param 工程,并再访问其服务:

至此,feign  熔断生效 。

3. ribbon 中熔断器实现。

ribbon 并不自带迷断功能,故要引入依赖:

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

工程启动类加注解  @EnableHystrix ,开启熔断。

SeeParamService 类中,在要实现熔断的方法上加注解:@HystrixCommand(fallbackMethod = "熔断实现方法名"),如:
package com.ribbon.serviceribbon;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;/*** @author yujiang* @description* @date 2019/7/22 11:45*/
@Service
public class SeeParamService {@AutowiredRestTemplate restTemplate;/*** 注解 @HystrixCommand :* 开启熔断器,指定熔断时回调方法为 seeParamError** @param param* @return*/@HystrixCommand(fallbackMethod = "seeParamError")public String seeService(String param) {return restTemplate.getForObject("http://see-param/seeParam?param=" + param, String.class);}/*** 熔断 调用此方法** @return*/public String seeParamError(String param) {return " 哎,别瞅了,别瞅了,服务已经 go die ...";}}

此时, 关闭服务生产者 see-param 工程,并再访问其服务:

至此,ribbon  熔断生效 。

--------------------------------------------------------------

下一篇:springCloud - 第6篇 - 网关的实现:ZUUL

源码见:https://gitee.com/FJ_WoMenDeShiJie/springcloud-feign

              https://gitee.com/FJ_WoMenDeShiJie/springcloud-ribbon

--------------------------------------------------------------

PS:这个系列不定时更新,只是个人的学习分享,

内容全程参考书目:

《Spring Cloud 与 Docker 微服务架构空实战 》、

《Spring Cloud 微服务实战》及此书作者博客:http://blog.didispace.com/spring-cloud-learning/

《深入理解 Spring Cloud 与微服务构建》及此书作者博客:https://blog.csdn.net/forezp/article/details/70148833
--------------------------------------------------------------

这篇关于springCloud - 第5篇 - 断路器 Hystrix ( Feign 、Ribbon )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030273

相关文章

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s