hystrix的熔断降级
hystrix的熔断降级
结合Feign使用
1.A服务通过B服务的唯—标识,从Nacos获取到可调用列表。
2.使用feigh中的Http发起远程请求。
3.超过默认配置的时限,抛出异常,结束该线程。
调用方
依赖
<!-- 熔断降级的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在调用方的启动类中
//开启断路器的界面(调用方)
@EnableCircuitBreaker
对Feign 中的clients文件的ProducerController进行改造
package com.james.clients; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping; /**
* name: 被调方的唯一标识
* path: 被调方的controller层的路径
*/
@FeignClient(name = "dashan-first",path = "/user",fallback = ConsumerClientFallback.class)
public interface ConsumerClient { /**
* feignClient中的方法与被调方要保持完全一致
* 返回值,注解,路径,参数,方法名 一致
* @return
*/
@RequestMapping("/first")
public String first();
}
在clients创建 ConsumerClientFallback 自定义的fallback处理类
import org.springframework.stereotype.Component; @Component
public class ConsumerClientFallback implements ConsumerClient {
@Override
public String first() {
return "被调方不可以用了,请稍后再次尝试";
}
}
yml
ribbon:
#设置超时时间为5秒
ConnectTimeout: 5000
ReadTimeout: 5000 #feign开启熔断 默认是 false
feign:
hystrix:
enabled: true #配置hystrix的默认超时时长.默认为1秒,当1秒钟被调方没有返回结果内容,则直接进行熔断处理
hystrix:
command:
default: #default全局有效,service id指定应用有效
execution:
timeout:
enabled: true
isolation:
thread:
# 被调方最大超时的时间
timeoutInMilliseconds: 5000
断路器
1、针对于被调方的服务已经出现了问题,例如调用了10词,8都出现了问题。那么我们认为被调方的接口是不稳定的,后续请求我们应该直接降级掉,不在尝试继续请求真正的接口。注这个时候我们就可以开启断路器,后续的请求不再真正的访问:口,而是直接降级。注意断路器开启后,是可以进行自动状态变换。断路器有三种状态:
1.close.
2.open。
3.halfopen(半开)
被调方
1.添加依赖
<!-- 熔断降级的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- 断路器的管理界面-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
2.配置文件更改
#允许dashboard访问的内容 注意 hystrix 2.0版本以上进行开放
hystrix:
dashboard:
proxy-stream-allow-list: "*"
#配置允许访问所有的接口路径内容
management:
endpoints:
web:
exposure:
include: "*"
3.对于某个接口进行断路器的配置
@RequestMapping("/first")
//1.当该接口出现异常,走的降级方法 注意:降级方法要与本方法的返回值以及参数保持一致
//2. 当该接口的处理速度过慢,也需要走预定好的退路方法。使用的是tomcat的信号量来进行管理每个线程的超时时间
@HystrixCommand(fallbackMethod = "firstFallback",
commandProperties = {
//开启tomcat的线程
@HystrixProperty(name = "execution.isolation.strategy",value = "THREAD"),
//设置每个线程的最大的超时时间
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000"),
//配置开启断路器
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"),
//代表该接口如果出现异常的次数达到10次,则开启断路器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "4"),
//代表总请求数达到50%的请求出现异常,则开启断路器
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),
//代表断路器多少秒后更改我们的断路器的状态,由 open状态改为halfopen状态
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "5000")
})
public String first() throws InterruptedException {
//休眠时间
// Thread.sleep(2990);
return "成功" + name +":"+port;
}
public String firstFallback(){
return name +":"+port+"接口异常!";
}
4.在config文件中配置hystrix.straem流
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import javax.servlet.annotation.WebServlet;
@WebServlet("/hystrix.stream")
public class HystrixServlet extends HystrixMetricsStreamServlet {
}
5.在启动类中加入注解
@SpringBootApplication
@EnableDiscoveryClient //被调方的降级处理
@EnableHystrix
//开启断路器的界面
@EnableHystrixDashboard
//扫描我们自己配置的servlet路径
@ServletComponentScan("com.qf.config")
public class SpringCloudConsumerApplication { public static void main(String[] args) {
SpringApplication.run(SpringCloudConsumerApplication.class);
}
}
hystrix的熔断降级的更多相关文章
- dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级
1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...
- SpringCloud实战-Hystrix请求熔断与服务降级
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- 玩转Spring Cloud之熔断降级(Hystrix)与监控
本文内容导航目录: 前言:解释熔断降级一.搭建服务消费者项目,并集成 Hystrix环境 1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-h ...
- SpringCloud(6)---熔断降级理解、Hystrix实战
SpringCloud(6)---熔断降级理解.Hystrix实战 一.概念 1.为什么需要熔断降级 (1)需求背景 它是系统负载过高,突发流量或者网络等各种异常情况介绍,常用的解决方案. 在一个分布 ...
- java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控
前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...
- Hystrix请求熔断与服务降级
Hystrix请求熔断与服务降级 https://www.cnblogs.com/huangjuncong/p/9026949.html SpringCloud实战-Hystrix请求熔断与服务降级 ...
- SpringCloud学习之Hystrix请求熔断与服务降级(六)
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- SpringCloud Netflix (五) : Hystrix 服务熔断和服务降级
什么是Hystrix 在分布式环境中,许多服务依赖项中的一些服务依赖不可避免地会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助您控制这些分布式服务之间的交互.Hystrix通过隔离服务 ...
- 简易RPC框架-熔断降级机制
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 使用.NetCore 控制台演示 熔断 降级(polly)
1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...
随机推荐
- Android利用广播监听按下HOME和电源键
package cc.testhome; import cc.testhome.HomeKeyObserver.OnHomeKeyListener; import cc.testhome.PowerK ...
- css的认知与样式
目录 1. 介绍css 2. CSS语法 3. CSS注释 4. CSS中的颜色值 5. CSS长度单位 6. html引入CSS的三种方法 6.1 行内样式(内联样式) 6.2 内嵌样式 6 ...
- 本地化部署自建类ChatGPT服务远程访问
Text generation web UI可为类ChatGPT的大型语言模型提供能够快速上手的网页界面,不仅可以提高使用效率,还可满足私有化部署,或对模型进行自定义.目前,该Web UI已经支持了许 ...
- C# ref, in, out关键字
写在前面:大内老A的这篇"老生常谈:值类型VS引用类型"放在微信收藏里好几个月了,终于趁着要讲JAVA传参机制的时候仔细地按照这篇博客,自己写代码跑一下,对C#的传参,ref,in ...
- List、Set与 Map
目录 1. List接口和常用方法 1.1 List接口基本介绍 1.2 List接口的三种遍历方式 2. ArrayList 2.1 注意事项 2.2 ArrayList的底层操作机制源码分析(重点 ...
- 【Java集合】了解集合的框架体系结构及常用实现类,从入门到精通!
前言 通过Java基础的学习,我们掌握了主要的Java语言基本的语法,同时了解学习了Java语言的核心-面向对象编程思想. 从集合框架开始,也就是进入了java这些基础知识及面向对象思想进入实际应用编 ...
- PTA乙级1099
#include"bits/stdc++.h" using namespace std; int prime(int x) { if(x<2) return 0; for(i ...
- Opencv中goodFeaturesToTrack函数(Harris角点、Shi-Tomasi角点检测)算子速度的进一步优化(1920*1080测试图11ms处理完成)。
搜索到某个效果很好的视频去燥的算法,感觉效果比较牛逼,就是速度比较慢,如果能做到实时,那还是很有实用价值的.于是盲目的选择了这个课题,遇到的第一个函数就是角点检测,大概六七年用过C#实现过Harris ...
- IDEA的Maven换源
打开IDEA安装路径,然后打开下面的文件夹 plugins\maven\lib\maven3\conf 在conf文件目录下出现一个setting.xml的文件.(ps:如果没有,请忽略本文,自行创建 ...
- 怎样给边框添加阴影?CSS3属性box-shadow帮你搞定!
作者:WangMin 格言:努力做好自己喜欢的每一件事 关于box-shadow属性,有的小伙伴可能用的时候直接复制已有的,并没有仔细了解过box-shadow属性的参数分别是什么含义,最后导致阴影的 ...