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. TIPTOP GP ERP二次开发规范说明

    TIPTOP GP ERP二次开发规范说明 TIPTOP ERP共分三大区:topstd(标准区) + toppord(正式区) + toptest(测试区) 标准区                  ...

  2. VK Cup 2016 - Round 1 (CF639)

    A. Bear and Displayed Friends Div2 的题,不写. B. Bear and Forgotten Tree 3 这种东西怎么评蓝的? Description 给定 \(n ...

  3. MySQL防止被黑,通过跳板机ssh隧道访问

    更新了另外一篇,比这篇的方法更好:[https://www.cnblogs.com/scottyzh/p/17745527.html](服务器没有开放3306端口 远程访问MySQL数据库方法) 一. ...

  4. SQL改写案例4(开窗函数取中位数案例)

    周总找我问个报表SQL实现逻辑的案例,废话不说给他看看. 原SQL: SELECT d.tname 姓名, d.spname 岗位, d.sum_cnt 报单单量, d.min_cnt 放款单量, d ...

  5. 03Java学习_注释和代码规范

    注释和代码规范 目录 注释和代码规范 注释 注释介绍 单行注释 多行注释 文档注释 代码规范 注释 注释介绍 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性(可读性):注释 是一个程序员必 ...

  6. CSP-J 2023 题解

    CSP-J 2023 题解 T1 小苹果 这个题直接遍历枚举必定 TLE,这是 CCF 的出题风格,每题 T1 巨水无比,但是往往又需要一些思维. 这道题我们可以发现每一轮操作都会拿走 \(1 + ( ...

  7. STL deque容器

    deque - 双向队列 1.队列的基本知识 队列的基本特性就是先进先出(FIFO),也就是第一个进去的元素第一个出来.即队列就是一个只允许在一端进行插入,在另一端进行删除操作的线性表.Queue接口 ...

  8. python中pip下载慢或报错的解决方法

    一:问题 python的pip在安装包时,有时会报错超时,排除包名写错的原因,一般这种问题是因为网络下载过慢,导致超时 二:解决方案 我们可以设置pip镜像源下载,能够提升pip下载速度,解决报错问题 ...

  9. springboot整合kafka,收不到消息,日志输出dead for group解决方法

    项目启动以后收不到Kafka发出的消息,日志输出类似: INFO [org.springframework.kafka.KafkaListenerEndpointContainer#1-7-C-1] ...

  10. springboot下添加全局异常处理和自定义异常处理

    前言 在spring项目中,优雅处理异常,好处是可以将系统产生的全部异常统一捕获处理,自定义的异常也由全局异常来捕获,如果涉及到validator参数校验器使用全局异常捕获也是较为方便. 相关代码: ...