spring 熔断机制

spring 熔断机制本文介绍了 SpringCloud 中的 Hystrix 模块 如何通过熔断机制保护服务免受单点故障影响 以及服务降级策略 通过 fallback 方法在服务不可用时提供备用响应

Spring Cloud Hystrix(服务容错保护)

熔断的目的:

为了保证服务高可用,不能因为系统中的一个小服务不可用,从而导致整个系统的崩溃。

熔断的原理:

对于使用相关注解的类或者方法,系统会监控其错误,如果多次出现同一错误,而且达到阈值,则打开熔断开关,熔断开关打开后,不在访问远程服务器,而是直接调用预先准备的失败方法。当熔断开关过期后、会尝试访问远程服务,这个时候的熔断开关是半开半闭状态的,有些服务直接失败,有些会继续访问远程服务。

熔断是微服务必须的,可我不用熔断,系统好像也能正常的工作,那为什么说它是必须的呢?

正常工作室没有问题的,那发生异常了呢?某个服务挂了或者网络不通的时候发生什么?

那就是调用它的微服务这个服务抛出异常,一直到最上层,这个每一会HTTp请求都会开启一个新的线程。而下游的服务器挂了或者网络不可达,通常线程会堵塞住直到timeOut,如果并发量多了,这些堵塞的线程就会占用大量的资源,很有可能把自己本身的微服务所在的机器资源耗尽,导致自己也挂掉。

服务降级

服务降级利用fallback实现,例如在fegin中接口实现fallback指定的错误请求方法,使得这次请求不进入正常系统的处理逻辑,而去执行指定的fallback方法,返回error操作,就比如常见的错误友好页面,让它不去卡你的系统

Hystrix有三种状态分别是 关闭、开启和半开

@HystrixCommand(fallbackMethod = "fallbackGet") Object get(String url, Map params, Map header) { def start = System.currentTimeMillis() HttpHeaders headers = handleHeader(header) Map<String, String> p = handleParams(params) url = handUrl(url) Object result = loadBalancedRestTemplate.getForObject(url, new HttpEntity<String>(null, headers), Object.class, p) debug(HttpMethod.GET, url, params, header, result, (System.currentTimeMillis() - start)) return result } Object fallbackGet(String url, Map params, Map header, Throwable e) { return fallback(url, "GET", e) } Object fallback(String url, String method, Throwable e) { logger.info("{}请求[{}]熔断 {}", method, url, e?.message) return ["resCode": CommonConstant.RE_SERVICE_DOWN] } 

今天的文章 spring 熔断机制分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-14 14:11
下一篇 2024-12-14 14:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/86186.html