学习微服务的断路器——hystrix

【微服务架构】SpringCloud之断路器(hystrix) 【微服务架构】SpringCloud之断路器(hystrix)https://blog.youkuaiyun.com/u012081441/article/details/80814250 立即下载

微服务架构中,微服务之间相互调用,springcloud可以用feign方式和RestTemplate+ribbon方式来实现服务间的相互调用。但如果某一个服务出现问题,所有调用该出问题的服务都将出现阻塞,如果有大量的请求,则Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

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

1.ribbon中使用断路器hystrix

build.gradle文件

buildscript {

ext {

springBootVersion = '2.0.4.RELEASE'

}

repositories {

mavenCentral()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}

apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

apply plugin: 'io.spring.dependency-management'

group = 'com.example'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8

repositories {

mavenCentral()

}

ext {

springCloudVersion = 'Finchley.SR1'

}

dependencies {

compile('org.springframework.boot:spring-boot-starter-web')

compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')

compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')

compile('org.springframework.cloud:spring-cloud-starter-netflix-ribbon')

testCompile('org.springframework.boot:spring-boot-starter-test')

}

dependencyManagement {

imports {

mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"

}

}

application.yml文件

server:

port: 8797

spring:

application:

name: service-ribbon-hystrix

eureka:

client:

service-url:

defaultZone: http://localhost:8791/eureka/

主方法

package com.example.serviceribbonhystrix;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.netflix.hystrix.EnableHystrix;

import org.springframework.context.annotation.Bean;

import org.springframework.web.client.RestTemplate;

@EnableHystrix

@EnableEurekaClient

@SpringBootApplication

public class ServiceRibbonHystrixApplication {

public static void main(String[] args) {

SpringApplication.run(ServiceRibbonHystrixApplication.class, args);

}

@Bean

RestTemplate restTemplate() {

return new RestTemplate();

}

}

HelloService.java文件

package com.example.serviceribbonhystrix;

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;

@Service

public class HelloService {

@Autowired

RestTemplate restTemplate;

@HystrixCommand(fallbackMethod = "errorMsg")

public String hiService() {

return restTemplate.getForObject("http://EUREKA-CLIENT-SAY-HI/hi", String.class);

}

public String errorMsg(){

return "I am ribbon with hystrix,Wrong!";

}

}

HelloController.java文件

package com.example.serviceribbonhystrix;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@Autowired

HelloService helloService;

@RequestMapping("/hi")

public String sayHi() {

return helloService.hiService();

}

}

只是单独启动该服务,不启动eureka-client-say-hi服务,访问http://localhost:8797/hi

13467292-25ade6a64804384c

返回要返回的信息,此时断路器已经生效了:

2.feign中使用断路器hystrix

因为feign是自带断路器的,所以依赖中就不需要加hystrix

build.gradle

buildscript {

ext {

springBootVersion = '2.0.4.RELEASE'

}

repositories {

mavenCentral()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}

apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

apply plugin: 'io.spring.dependency-management'

group = 'com.example'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8

repositories {

mavenCentral()

}

ext {

springCloudVersion = 'Finchley.SR1'

}

dependencies {

compile('org.springframework.boot:spring-boot-starter-web')

compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')

compile('org.springframework.cloud:spring-cloud-starter-openfeign')

testCompile('org.springframework.boot:spring-boot-starter-test')

}

dependencyManagement {

imports {

mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"

}

}

application.yml文件

server:

port: 8796

spring:

application:

name: service-feign-hystrix

eureka:

client:

service-url:

defaultZone: http://localhost:8791/eureka/

feign:

hystrix:

enabled: true #feign自带断路器,但需要打开

主方法:

package com.example.servicefeignhystrix;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableEurekaClient

@EnableFeignClients

@SpringBootApplication

public class ServiceFeignHystrixApplication {

public static void main(String[] args) {

SpringApplication.run(ServiceFeignHystrixApplication.class, args);

}

}

接口SayHiService.java文件

package com.example.servicefeignhystrix;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(value = "eureka-client-say-hi",fallback = SayHiServiceWithHystrix.class)

public interface SayHiService {

@RequestMapping(value = "/hi", method = RequestMethod.GET)

String sayHiFromClient();

}

SayHiServiceWithHystrix.java文件

package com.example.servicefeignhystrix;

import org.springframework.stereotype.Component;

@Component

public class SayHiServiceWithHystrix implements SayHiService {

@Override

public String sayHiFromClient() {

return "sorry,I am wrong";

}

}

HelloController.java文件

package com.example.servicefeignhystrix;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@Autowired

SayHiService sayHiService;

@RequestMapping("/hi")

public String sayHi(){

return sayHiService.sayHiFromClient();

}

}

此时启动eureka-server,以及eureka-client-say-hi项目的两个实例,以及刚才新建的项目service-feign-hystrix.

访问http://localhost:8796/hi

出现以下两种场景:

13467292-c64e35be1a27ad8e

和

13467292-b28618ec62545e42

如果关掉8792端口的服务,则会返回hi,I am port 8793

如果关掉eureka-client-say-hi服务的8792和8793两个端口实例,则会返回

13467292-7bcb1343ba51facb

此时标明,feign的断路器已经生效了。

现在加Java高级架构群即可获取Java工程化、高性能及分布式、高性能、高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限及领取相关资料群号是:83563&8062

SpringCloud——断路器(Hystrix) SpringCloud——断路器(Hystrix)之Ribbon使用断路器和Feign使用断路器 立即下载

相关推荐

Unity URP半透明物体深度排序优化:解决自交叠渲染瑕疵

本文深入探讨了Unity URP管线中半透明物体深度排序的优化方法,重点解决自交叠区域的渲染瑕疵问题。通过双通道渲染、深度预写入、多通道渲染等核心技术,结合实战案例和性能数据,帮助开发者实现高质量的透明效果渲染。

weixin_30879169的博客 421

手写Hystrix断路器 (个人理解)

首先理解断路器的三种状态,分为关闭,开放,半开 正常情况下,在远程调用时,如果出现调用失败的情况下,会打开断路器

小趴菜的小蛋泡 194

新手学习Vivado XDMA (1) - 配置详细分析

PCIe 在 Vivado XDMA 中的配置分析。

qq_18553915的博客 9712

手写一个简易版断路器(hystrix)

理论基础 根据熔断器模式(Circuit Breaker Pattern) 共有上面几种状态 Closed:默认状态,Circuit Breaker 内部维护着最近的失败次数(failure count)。每操作失败一次,失败次数就会加一。当失败次数达到设定的阈值,就会进入Open状态 Open: 操作不会执行,会立即失败。Circuit Breaker 内部维护一个计时器。当时间达到设定的阈值,就会从Open状态进入到Half-Open状态 Half-Open: 只要操作失败一次,立即进入Open状

念念不忘,必有回响 1008

TortoiseSVN的安装与使用

TortoiseSVN的安装与应用1、安装1.1、下载TortoiseSVN    点击下载TortoiseSvn1.2、下载汉化包。上面的页面中,找到Chinese, simplified汉化包,点击32位或者64位的Setup,下载汉化包。1.3、安装TortoiseSVN。在选择安装路径页面时要记得勾选“command line client tools”,默认不是勾选的。这里不勾选的话在I...

qq_28566071的博客 4万+

Modelsim安装教程以及管理员身份运行patch_dll.bat时找不到文件mgls.dll的解决

Modesim安装教程 Modesim版本有很多,但是安装方式大都相同,我们以modesim.10.5为例,电脑使用的是win10 64位,讲一下安装过程中的步骤以及出现问题的解决方法 一 安装 1.首先解压安装包,在解压的安装包内选择应用程序,右键选择管理员运行。 2.稍等一会,有的电脑会弹出是否允许modesim进行更改,选择 是 即可,然后出现下面的界面,点击下一步。 3.弹出此界面选择安装路径,选择安装路径,我是在D盘新建的文件夹,直接把文件夹中的路径复制在框内。文件夹名称切记不要带中文 4.

weixin_48564372的博客 1万+

微服务和VUE入门教程(24): 微服务之断路器

微服务和VUE(24): 微服务之断路器 1. 前言 微服务拥有完整的额熔断机制,比如限流,隔离,熔断等。具体详细信息还需要自己去查找资料研究一下。当我们的某个微服务中的某个接口出现错误后,这个微服务不会挂掉,而是以一种“优雅”的方式返回给用户回应。 2. 断路器的作用 首先,由于断路器允许开发人员处理服务故障,客户端可以以一种优雅的方式随时间动态地适应服务可用性的变化。 其次,在微服务架构中共享状态的断路器提供了网络效果,可以显著提高故障响应能力。 第三,断路器与智能路由和负载均衡相结合,可以自动用健康的

bigben 548

做了一个3DTiles编辑器,支持3DTiles的预览和裁剪导出

3DTiles编辑器的功能极其简洁,核心就是3DTiles格式模型的预览和裁剪。为了演示方便,本文所使用的源数据为mipmap3d[1]网站所提供的无人机拍摄影像,并进行3DTiles构建。打开软件,输入的绝对路径之后,点击添加模型,就可以将模型加载进预览区。之后,点击裁剪模式按钮,默认会出现立方体裁剪框,可通过拖动句柄的方式去调整裁剪框的范围。同时,除了默认的盒体裁切模式外,还支持多边形裁切,点击多边形裁切后,可切换到顶视图,选择重绘多边形,可进行打点绘制。

兴趣使然的创作者 608

微服务开发:断路器详解

您可能已经听说过我们在电子产品中发现的断路器。它的主要目的是什么?简单地说,在意想不到的情况下切断电流。与此相同,这种微服务模式也因其具有相同的性质而得名。这种模式在服务之间进行通信时出现。让我们来看一个简单的场景。假设我们有两个服务:服务 A 和 B。服务 A 正在调用服务 B(API 调用)以获取所需的一些信息。当服务 A 调用服务 B 时,如果服务 B 由于某些基础设施中断而关闭,会发生什么?服务 A 没有得到结果,它将因抛出异常而挂起。然后另一个请求来了,它也面临同样的情况。

BASK2312的博客 858

【实战教程】BMAD-METHOD 入门教程:用 AI 组建你的“七人开发团队”

简单说,BMAD-METHOD 就像一个会自己运转的“AI 软件公司”。它不是某个单一应用,而是一种AI 工作流方法论—— 把一个项目拆解成多个角色(产品、架构、前后端、测试、运维等),每个角色由一个 AI 智能体负责协作,就像你真的在带一个 7 人团队。GitHub 项目地址 👉目前 Star 数已经达到了恐怖的 20k,可见这套方法的影响力不小。BMAD-METHOD 的核心理念不是“生成代码”,而是“自动化协作”。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1625

【RT-DETR涨点改进】ICML 2026顶会 | 独家Conv改进篇| 引入PloyConv多项式卷积,增强不同尺度空间信息的交互,适合小目标检测、遥感目标检测,含8种创新改进,有效涨点

🔥本文给大家介绍使用 PloyConv多项式卷积 改进RT-DETR网络模型,PloyConv将传统可分离卷积中依赖GELU等激活函数的空间混合方式,改造成由两个异构深度卷积分支驱动的多项式空间混合:粗粒度空洞卷积分支负责大范围上下文,细粒度3×3卷积分支负责局部纹理,并通过通道翻转增加两路特征差异,再通过逐元素乘法建立跨尺度非线性交互,最后利用卷积进行空间整合和通道映射。 它最大的特点是实现了“大感受野上下文 + 局部细节 + 跨尺度乘法交互 + 无点激活空间建模”的统一。

Ai缝合怪、助力小伙伴高效发论文 91

【SpringCloud构建微服务系列】学习断路器Hystrix

一、Hystrix简介 在微服务架构中经常包括多个服务层,比如A为B提供服务,B为C和D提供服务,如果A出故障了就会导致B也不可用,最终导致C和D也不可用,这就形成了雪崩效应。 所以为了应对这种情况,我们就需要一种容错机制,该机制需要实行以下两点: 为网络请求设置超时,以便尽快释放资源 使用断路器模式,就像家里的电闸一样,如果电流过大就会立刻跳闸以保护电路防止发...

weixin_30457881的博客 86

Qt/C++音视频开发1-vlc解码播放

一、前言 最开始接触视频监控这块的时候,用的就是vlc作为解码的内核,主要是因为vlc使用简单方便,直接传入一个句柄即可,简单几行代码就可以实现一个视频流播放,很适合初学者使用,也推荐初学者用qt+vlc来做播放器,提供的接口还是非常友好的,而且门类特别多,想要获取媒体文件的各种信息比如宽高,设置宽高比等,直接调用接口函数传入参数就能设置。 所有用vlc做视频监控解码的人都会遇到一个问题,那就是鼠标事件被接管拦截了,不能识别鼠标事件,比如双击最大化等,这就很憋屈了,明明很好用的一个东西,怎么突然之间鼠标事件

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 4942

「 从0到1学习微服务SpringCloud 」13 断路器Hystrix

背景与功能 在微服务架构中,很多情况下,各个服务之间是相互依赖,一个服务可能会调用了好几个其他服务,假设其中有一个服务故障,便会产生级联故障,最终导致整个系统崩溃无法使用(这称为雪崩效应),Spring Cloud Hystrix正是用来防止雪崩效应的。 功能:服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。 服务降级 定义 优先核心服务,非核心服务不可用或弱可用 比...

KEN DO EVERTHING 191

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

springcloud微服务实战 学习笔记五 Hystrix服务降级 Hystrix依赖隔离 断路器

###服务降级 在之前eureka-consumer的基础上 添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> ...

weixin_34257076的博客 160

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

学习微服务的断路器监控——Hystrix Dashboard

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34301132的博客 229

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

学习笔记:微服务-18 Hystrix-Dashboard断路器仪表盘

Hystrix Dashboard,它主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题。 一、新建一个spring boot 项目,我这命名为microservice-hystrix-dashboard-8502 1.pom.xml依赖增加:        <dependency>      ...

LinBSoft的专栏 652

从零学SpringCloud系列(四):服务容错保护Hystrix

一、Hystrix介绍 在微服务架构中,我们可能将系统拆分中多个服务单元,由于每个服务单元都运行在不同的进程中,他们彼此之间通过远程调用的方式执行,这样就有可能因为网络原因或者是依赖服务自身问题出现调用故障或延迟,而这些问题 会直接 导致调用方对外提供服务也出现延迟,若此时调用方的请求不断累加,最后会造成任务积压导致自身系统瘫痪。 针对上述问题,Spring Cloud Hystrix实现了断...

Jack 架构师之路 2万+

初学SpringCloud:Hystrix断路器是为了解决什么问题而出现的以及简单的介绍Hystrix(豪猪)

1、背景介绍 目前,我本人正在学习微服务的有关的知识,已经学习了Eureka,ZooKeeper,Consul服务注册中心,并且进行了简单的实践。我在写微服务模块之间的互相调用代码的时候,用的还都是RestTemplate类的方式。使用这种方式的时候,需要有一个配置类,也就是使用@Configuration和@Bean注解。当搭建集群的时候呢,还要在配置类中赋予RestTemplate负载均衡。这样就可以实现负载均衡的功能啦,默认采用的是轮询的方式,用的是Ribbon。后来我学习了OpenFeign的基本

weixin_46281472的博客 438

SpringCloud入门实战(七)-Hystrix服务熔断

📝 学技术、更要掌握学习的方法,一起学习,让进步发生。💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。❤️解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

一个喜欢诗和远方的程序媛 1331

微服务学习之路(客户端弹性模式)

微服务学习之路 微服务学习之路,本系列文章是博主学习微服务的路程,特意分享自己的学习笔记,也为了以后能回溯查看。 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 客户端弹性模式微服务学习之路前言一、什么是客户端弹性模式1.1. 客户端负载均衡模式1.2. 断路器模式1.3. 后备模式1.4. 舱壁模式二、Hystrix总结 前言 本章将介绍客户端弹性模式。 一、什么是客户端弹性模式 客户端弹性模式的重点是,在远程服务发生错误或表现不佳时保护远程资源(另一个微服务调用或数据库查询)的

qq_23986927的博客 808

Hystrix 源码解析 —— 调试环境搭建

1. 依赖工具 Gradle JDK IntelliJ IDEA 推荐 Spring Cloud 书籍: 请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。 2. 源码拉取 从官方仓库https://github.com/Netflix/Hystrix.gitFork出属于自己的仓库。为什么要Fork?既然开始阅读、调试源码,我们可能...

weixin_42073629的博客 353
上一篇: ActiveMQ多个消费者消费不均匀问题
下一篇: Springboot 统一maper 和逆向工程
普通网友
博客等级 码龄8年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值