首页 > 其他分享 >Hystrix服务降级

Hystrix服务降级

时间:2023-07-17 12:11:55浏览次数:27  
标签:降级 服务 Hystrix hystrix springframework result import

        Hystrix是Netflix开源的一款用于实现服务容错和服务降级的库。在微服务架构中,服务之间存在依赖关系,当某个服务发生故障或延迟过高时,可能会导致整个系统不可用。Hystrix通过提供服务降级、熔断、限流等机制,帮助提高系统的稳定性和可靠性。

       服务降级是Hystrix的一项重要功能,它通过在发生故障时,将失败的服务请求快速地返回一个备选响应(如缓存数据、默认值),而不是让用户长时间地等待。服务降级可以有效地控制故障的扩散,避免整个系统崩溃。

一、引入依赖

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

二、启动Hystrix

在启动类上使用@EnableCircuitBreaker注解来启用Hystrix断路器。

 1 import org.springframework.boot.SpringApplication;
 2 import org.springframework.boot.autoconfigure.SpringBootApplication;
 3 import org.springframework.cloud.netflix.hystrix.EnableHystrix;
 4 import org.springframework.cloud.openfeign.EnableFeignClients;
 5 
 6 /**
 7  * @Classname HystrixApplication
 8  * @Created by Michael
 9  * @Date 2023/7/17
10  * @Description 服务降级
11  */
12 @SpringBootApplication
13 @EnableFeignClients
14 @EnableHystrix
15 public class HystrixApplication {
16   public static void main(String[] args) {
17     SpringApplication.run(HystrixApplication.class,args);
18   }
19 }
HystrixApplication

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

 1 import com.mike.study.hystrix.client.UserClient;
 2 import com.mike.study.hystrix.vo.HttpResponseResult;
 3 import com.mike.study.hystrix.vo.UserVo;
 4 import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
 5 import com.netflix.ribbon.proxy.annotation.Hystrix;
 6 import org.springframework.http.HttpStatus;
 7 import org.springframework.web.bind.annotation.GetMapping;
 8 import org.springframework.web.bind.annotation.PathVariable;
 9 import org.springframework.web.bind.annotation.RestController;
10 
11 import javax.annotation.Resource;
12 
13 /**
14  * @Classname HystrixController
15  * @Created by Michael
16  * @Date 2023/7/17
17  * @Description 服务降级
18  */
19 @RestController
20 public class HystrixController {
21   @Resource
22   private UserClient userClient;
23 
24   @GetMapping("hystrix/user/{id}")
25   @HystrixCommand(fallbackMethod = "getUserFallback")
26   public HttpResponseResult getUser(@PathVariable("id") Integer userId) {
27     System.out.println("使用feign框架调用provide的api");
28     UserVo userVo = userClient.getUser(userId);
29     HttpResponseResult result = new HttpResponseResult<UserVo>();
30     result.setStatusCode(HttpStatus.OK.value());
31     result.setMessage(HttpStatus.OK.getReasonPhrase());
32     result.setData(userVo);
33     return result;
34   }
35 
36   /**
37    * 获取用户信息降级处理
38    * @param userId
39    * @return friendly info
40    */
41   public HttpResponseResult getUserFallback(Integer userId) {
42     HttpResponseResult result = new HttpResponseResult<UserVo>();
43     result.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR.value());
44     result.setMessage(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
45     result.setData(new UserVo());
46     return result;
47   }
Controller

注意,降级方法必须和原方法同参数,同返回值。可以给每个需要降级的服务指定降级方法,也可以统一设置降级方法。统一降级则在类上添加注解@DefaultProperties(defaultFallback="defaultFallBack")

四、 配置hystrix属性

 1 hystrix:
 2   command:
 3     default:
 4       circuitBreaker:
 5         errorThresholdPercentage: 10 # 设置失败比例阀值
 6         sleepWindowInMilliseconds: 10000 # 设置休眠时间(根据业务来设置)
 7       exectuion:
 8         isolation:
 9           thread:
10             timeoutInMilliseconds: 2000 # 超时时间
11   threadpool:
12     default:
13       allowMaximumSizeToDivergeFromCoreSize: true # 让最大线程数生效
14       coreSize: 5 #设置线程池最小线程数
15       maxQueueSize: 10 #设置队列长度
16       maximumSize: 10 #设置最大线程池数量

五、测试

5.1 准备provider,提供查询数据库信息的api,Hystrix module通过feign框架调佣provider的api。目录结构如下

 5.2 分别启动hystrix和provider module,正常访问

5.3 停掉provider服务,访问同样地址

 可以看到服务正常响应,但是是降级后的响应结果。当provider重启启动恢复正常,需要等待一会,hystrix才会恢复正常访问。

 

标签:降级,服务,Hystrix,hystrix,springframework,result,import
From: https://www.cnblogs.com/lfhappy/p/17559730.html

相关文章

  • 阿贝云服务器使用感受
    推荐一下阿贝云的免费服务器,没有流量限制,一个机还免费给一个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编......
  • redis写成服务
    Redis写成服务简介Redis(RemoteDictionaryServer)是一款高性能的键值存储数据库,常用于缓存、消息队列、分布式锁等场景。为了更好地使用Redis,我们可以将其封装成服务,实现更简单、易用的接口调用。本文将介绍如何将Redis写成服务,并提供相应的代码示例。Redis服务搭建为了将Redi......
  • Java-Day-32( 多用户即时通信系统 —— 文件传输 + 服务器推送新闻 + 离线留言 )
    Java-Day-32多用户即时通信系统文件传输思路:客户端里先把文件读取到客户端为字节数组,把文件对应的字节数组封装到message对象,内含文件内容、sender、getter,将message对象发送给服务端拆解message对象获取getterid,获取客户端被指定的接收用户的通信线程,把message转......
  • 服务器笔记之nginx安装SSL证书
    服务器笔记之安装SSL证书参考腾讯云服务器官方文档进行配置SSL证书Nginx服务器SSL证书安装部署-证书安装-文档中心-腾讯云(tencent.com)【一】前提条件已经注册并备案过的域名已获取证书【二】下载证书SSL证书Nginx服务器SSL证书安装部署-证书安装-文......
  • 服务器笔记之安装Alist
    服务器笔记之安装Alist【一】docker安装我使用的是docker命令安装dockerrun-d--restart=always-v/etc/alist:/opt/alist/data-p5244:5244-ePUID=0-ePGID=0-eUMASK=022--name="alist"xhofe/alist:latest通过命令查看容器dockerpsCONTAINERIDIMAGE......