首页 > 其他分享 >Hystrix服务熔断

Hystrix服务熔断

时间:2023-07-17 20:12:31浏览次数:24  
标签:服务 Hystrix hystrix number springframework 熔断 result import

        Hystrix的服务熔断是一种保护机制,用于防止故障和延迟的影响扩散到整个系统。当底层依赖的服务发生连续故障或错误率过高时,Hystrix将会触发服务熔断,暂时停止向该服务发送请求,并快速失败返回一个备选响应。这样可以避免对不可靠的服务进行无谓的重试,保护系统的稳定性。

一、引入依赖

1     <dependency>
2       <groupId>org.springframework.cloud</groupId>
3       <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
4     </dependency>
pom.xml

二、启用熔断功能

       与服务降级类似,在启动类上添加@EnableCircuitBreaker注解来启用Hystrix的断路器功能。

 1 import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
 2 import org.springframework.boot.SpringApplication;
 3 import org.springframework.boot.autoconfigure.SpringBootApplication;
 4 import org.springframework.boot.web.servlet.ServletRegistrationBean;
 5 import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
 6 import org.springframework.cloud.netflix.hystrix.EnableHystrix;
 7 import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
 8 import org.springframework.cloud.openfeign.EnableFeignClients;
 9 import org.springframework.context.annotation.Bean;
10 
11 /**
12  * @Classname HystrixApplication
13  * @Created by Michael
14  * @Date 2023/7/17
15  * @Description 服务降级
16  */
17 @SpringBootApplication
18 @EnableFeignClients
19 //@EnableHystrix
20 @EnableCircuitBreaker
21 @EnableHystrixDashboard
22 public class HystrixApplication {
23   /**
24    * 启用hystrix的/actuator/hystrix.stream地址映射
25    * @return
26    */
27   @Bean
28   public ServletRegistrationBean getServlet(){
29     HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
30     ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
31     registrationBean.setLoadOnStartup(1);
32     registrationBean.addUrlMappings("/actuator/hystrix.stream");
33     registrationBean.setName("HystrixMetricsStreamServlet");
34 
35     return registrationBean;
36   }
37 
38   public static void main(String[] args) {
39     SpringApplication.run(HystrixApplication.class,args);
40   }
41 }
HystrixApplication.java

三、定义熔断降级逻辑

        在需要进行熔断的方法上,通过@HystrixCommand注解定义熔断降级逻辑,并指定备用方法。

 1 /**
 2    * 熔断处理
 3    * @param userId
 4    * @param number
 5    * @return
 6    */
 7   @GetMapping("hystrix/break/{id}")
 8   @HystrixCommand(fallbackMethod = "getUserBreaker", commandProperties = {
 9           @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
10           @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
11           @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "500")
12   })
13   public HttpResponseResult getUser2(@PathVariable("id")Integer userId, @RequestParam int number) {
14     System.out.println("userId => "+userId);
15     if(number % 3 == 2){
16       System.out.println(number + " is bad parameter");
17 
18       throw new IllegalArgumentException(number+" is bad parameter");
19     }
20 
21     if(number % 3 == 0){
22       try {
23         System.out.println(number + " is bad parameter");
24         Thread.sleep(600);
25       } catch (InterruptedException e) {
26         System.out.println(e.toString());
27       }
28     }
29 
30     HttpResponseResult result = new HttpResponseResult<UserVo>();
31     UserVo userVo= userClient.getUser(userId);
32     result.setStatusCode(HttpStatus.OK.value());
33     result.setMessage(HttpStatus.OK.getReasonPhrase());
34     System.out.println(userVo);
35     result.setData(userVo);
36     return result;
37   }
38 
39   public HttpResponseResult getUserBreaker(Integer userId, @RequestParam int number) {
40     System.out.println("降级处理");
41     HttpResponseResult result = new HttpResponseResult<UserVo>();
42     result.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
43     result.setMessage(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
44     result.setData(new UserVo());
45     return result;
46   }
HystrixController.java

在上述示例中,通过@HystrixProperty注解可以覆盖全局配置,对特定方法进行独立的熔断参数设置。通过number参数控制模拟场景,number为

3n+1 返回正常请求,number为3n+2模拟请求失败,number为3n模拟请求超时(n=0,1,2,...)。

当该方法发生连续故障或错误率达到阈值时,Hystrix将会触发熔断,不再向该服务发送请求,而是立即调用备用方法fallbackMethod返回备选响应。

通过使用Hystrix的服务熔断功能,可以及时隔离不可靠的服务,并快速失败,避免对故障服务的无谓重试。这有助于保护系统的可用性和稳定性,提升用户体验。

四、测试

准备provider,提供查询数据库api,hystrix module通过feign框架请求provider的api获得数据。

 4.1 正常请求

 4.2 请求失败

 

4.3 请求超时

设置了等待时间为500ms,请求超时了,所以看到的是降级后的处理,要注意的时,这里虽然是降级处理了,但是实际上还是请求了provider的api并且成功返回数据,只是超时了,hystrix返回了降级后的结果。

 

标签:服务,Hystrix,hystrix,number,springframework,熔断,result,import
From: https://www.cnblogs.com/lfhappy/p/17561048.html

相关文章

  • python实现跨域代理服务器
    准备环境python3.7+依赖:aiohttp代码实现(代理服务器,返回响应体和进行跨域处理后的headers)importaiohttpfromfunctoolsimportwrapsfromaiohttpimportwebcorscode={'Access-Control-Allow-Origin':'*','Access-Contr......
  • Linux下服务service使用记录
    在/etc/systemd/system/路径下添加MyService.service文件并写入一下内容()[Unit]Description=MyService[Service]Type=simple#工作路径WorkingDirectory=/home/software/net5.0/publish#执行的服务的dll文件ExecStart=/usr/bin/dotnet/home/software/net5.0/publish/M......
  • 云服务器的使用
    朋友推荐了一个免费云服务器,想着用一下测一下自己的应用吧毕竟现在有自己在本地搭的服务器然后评测一下吧"免费虚拟主机"“免费云服务器”评测内容。一些评测与记录我们呢进入这个https://www.sanfengyun.com进入网站就可以了......
  • Hystrix服务降级
           Hystrix是Netflix开源的一款用于实现服务容错和服务降级的库。在微服务架构中,服务之间存在依赖关系,当某个服务发生故障或延迟过高时,可能会导致整个系统不可用。Hystrix通过提供服务降级、熔断、限流等机制,帮助提高系统的稳定性和可靠性。      服务降级是H......
  • 阿贝云服务器使用感受
    推荐一下阿贝云的免费服务器,没有流量限制,一个机还免费给一个IP,免费可以续期。系统也是可以免费装windows(这比三丰要好,三丰装windows居然要给一块钱)。总结一下,很适合初学者和中小站长。赞,希望做的更好给大家分享一个可以永久免费试用的云电脑。 废话不多说,就是阿贝云这款免费虚......
  • iframe嵌套的https服务,权限开放设置
    1、场景:chatGPT开发语音功能,部署服务需要https协议,有个独立的门户需要将服务以iframe嵌入到系统中2、问题:chatGPT语音服务无法弹出授权开启麦克的提示3、原因:iframe默认是关闭了相关权限4、处理:参考说明<iframe>标签的sandbox属性是一个布尔属性,当存在时表......
  • 给你三百台服务器,你怎么对他们进行管理
    现在给你三百台服务器,你怎么对他们进行管理原创 六便士IT 六便士IT 2023-07-1510:45 发表于陕西收录于合集#Linux运维19个管理三百台服务器是一个庞大的任务,需要有效的组织和规划。下面是一种详细的方法来对这些服务器进行管理:1.自动化配置管理:使用工具如Ansible、......
  • aliyun oss对象存储服务的使用和配置
     引入依赖(依赖冲突可使用mavenhelper插件来排除,或者通过启动异常进行判断,或者看官方文档寻找答案) <dependency>   <groupId>com.aliyun.oss</groupId>   <artifactId>aliyun-sdk-oss</artifactId>   <version>3.5.0</version>   <exclusions>  ......
  • Sentinel 熔断降级和黑白名单控制
     一、熔断降级1、概述除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联提供的API;查询某个商品的价格,可能需要进行数据库......
  • 对安装Linux的服务器进行缓存清除
    对安装Linux的服务器进行缓存清除原创 二河小鱼 人文历史与科学技术 2023-07-1118:10 发表于江西收录于合集#服务器99个#Linux运维101个#清除缓存1个安装Linux的服务器缓存过高导致服务器运行速度慢第一步,查看当前服务器中Linux系统的状态。命令:free-h编......