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的熔断降级的更多相关文章

  1. dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级

    1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...

  2. SpringCloud实战-Hystrix请求熔断与服务降级

    我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...

  3. 玩转Spring Cloud之熔断降级(Hystrix)与监控

    本文内容导航目录: 前言:解释熔断降级一.搭建服务消费者项目,并集成 Hystrix环境 1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-h ...

  4. SpringCloud(6)---熔断降级理解、Hystrix实战

    SpringCloud(6)---熔断降级理解.Hystrix实战 一.概念 1.为什么需要熔断降级 (1)需求背景 它是系统负载过高,突发流量或者网络等各种异常情况介绍,常用的解决方案. 在一个分布 ...

  5. java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控

    前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...

  6. Hystrix请求熔断与服务降级

    Hystrix请求熔断与服务降级 https://www.cnblogs.com/huangjuncong/p/9026949.html SpringCloud实战-Hystrix请求熔断与服务降级 ...

  7. SpringCloud学习之Hystrix请求熔断与服务降级(六)

    我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...

  8. SpringCloud Netflix (五) : Hystrix 服务熔断和服务降级

    什么是Hystrix 在分布式环境中,许多服务依赖项中的一些服务依赖不可避免地会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助您控制这些分布式服务之间的交互.Hystrix通过隔离服务 ...

  9. 简易RPC框架-熔断降级机制

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  10. 使用.NetCore 控制台演示 熔断 降级(polly)

    1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔一段时间我就会尝试一下是否能 ...

随机推荐

  1. Python join拼接

    import os print(os.path.join("I","love","you.")) # /XXX 代表的是绝对路径 这个变量之 ...

  2. docker入门加实战—docker常见命令

    docker入门加实战-docker常见命令 在介绍命令之前,先用一副图形象的展示一下docker的命令: 常见命令 docker的常见命令和文档地址如下表: 命令 说明 文档地址 docker pu ...

  3. Git小白入坑总结(部分)

    本地仓库的创建和初始化 git操作远程仓库 git clone git pull git push 对Git连接GitHub过程的理解 本地仓库的创建和初始化 直接在对应文件夹下用git init可以 ...

  4. 如何通过代码混淆绕过苹果机审,解决APP被拒问题

    目录 iOS代码混淆 功能分析 实现流程 类名修改 方法名修改 生成垃圾代码 替换png等静态资源MD5 info.plist文件添加垃圾字段 功能分析 实现流程 类名修改 方法名修改 生成垃圾代码 ...

  5. JS个人总结(1)

    1. html页面引入js文件优先使用引入外部js文件. 2. 如果在html页面里使用<script></script>,则把js内容放在html内容下面,也就是</b ...

  6. 企业FTP搭建教程

    安装Vsftpd 提前关闭selinux 和firewalld防火墙 安装vsftp软件包: yum install -y vsftpd* 启动vsftp服务器: systemctl start vs ...

  7. 针对Jupter Kernel error的问题解决

    首先打开Anaconda Prompt 输入jupyter kernelspec list查看安装的内核和位置 到显示的的目录下面找到 kernel.josn这个文件 修改为现在的python环境路径 ...

  8. angular:响应式表单(Reactive Forms)和模板驱动表单(Template-Driven Forms)分别进行验证

    2022-01-18 响应式表单 响应式表单是围绕Observable的流构建的. 使用响应式表单时,FormControl类是最基本的构造类. 在使用响应式表单前,需要先导入 ReactiveFor ...

  9. 23. 从零用Rust编写正反向代理,流控小姐姐的温柔一刀!

    wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,内网穿透,后续将实现websocket代理等,会将实现 ...

  10. .net core 到底行不行!超高稳定性和性能的客服系统:性能实测

    业余时间用 .net core 写了一个升讯威在线客服系统.并在博客园写了一个系列的文章,介绍了这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷 ...