温州网站建设广州市官网网站建设多少钱
news/
2025/10/5 23:34:40/
文章来源:
温州网站建设,广州市官网网站建设多少钱,爱客是什么牌子档次,网站建设方案书制作文章目录 前言知识积累Springboot集成Hystrix1、maven依赖引入2、application开启feign的hystrix支持#xff08;客户端配置限流降级熔断#xff09;3、入口类增加EnableFeignClients EnableHystrix 开启feign与hystrix4、feign调用增加降级方法服务端配置限流降级熔断(选择使… 文章目录 前言知识积累Springboot集成Hystrix1、maven依赖引入2、application开启feign的hystrix支持客户端配置限流降级熔断3、入口类增加EnableFeignClients EnableHystrix 开启feign与hystrix4、feign调用增加降级方法服务端配置限流降级熔断(选择使用) Springboot集成Hystrix可视化1、增加maven依赖2、application配置监控3、页面访问hystrix-dashboard 写在最后 前言
在分布式微服务的项目中常常会有多个服务复用产生多个服务调用的情况。比如A服务调用B服务B服务调用C服务。服务调用链路长了必然会增加服务超时的概率服务的超时阻塞会一直占用线程资源大量的阻塞会直接消耗完服务线程严重情况下会导致服务直接宕机从而引发调用链路的服务雪崩。那么有没有一种方式可以实现服务熔断、降低、隔离呢今天我们介绍Netflix公司研发的Hystrix框架。
知识积累 Hystrix是一个延迟和容错库旨在隔离远程系统、服务和第三方库的访问点停止级联故障并在故障不可避免的复杂分布式系统中实现弹性。 服务熔断是在服务达到某些特定指标主动进行断开的一种操作而服务降级则是在服务调用过程中对后续服务进行评估比如达到超时时间未响应就会进行后续冗余逻辑处理。服务熔断了必定会进行服务降级但服务降级了并不一定是服务熔断触发。 服务雪崩是业务流程中多个服务进行链路调用如果后续链路服务发生故障阻塞会影响调用方服务阻塞严重情况下会直接将整个链路服务拖死从而造成服务雪崩的现象。 Hystrix提供了信号量、线程两种隔离模式。信号量隔离直接可以限制服务的并发线程数目而线程隔离则直接依靠线程池来限制当前负载直接使用当前线程池线程从而避免消耗完服务的其他线程造成服务不可用的情况。默认情况下Hystrix使用线程隔离线程隔离才是真正意义上的服务隔离。 在实际的项目开发中Hystrix与openfeign能够友好的集成。我们在Springboot、spring cloud项目中可以直接引入Hystrix、feign依赖并且完成相应的配置即可达到我们需要的结果。
Springboot集成Hystrix
在微服务的开发中为了服务间的互相复用与调用我们需要引入注册中心来帮助实现服的发布、订阅与维护。对于注册中心中间件的选择有nacos、consul等等其中搭建都相对简单这里不再讲述。 当我们引入注册中心后我们直接可以使用feign框架通过RestTemplate直接调用服务我们不再关心内部怎么调用只需要按照特定的规则封装接口即可。 以下重点介绍Hystrix的相关集成和配置
1、maven依赖引入
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/
/parent
propertiesjava.version1.8/java.versionspring-cloud.versionHoxton.SR10/spring-cloud.version
/properties
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix/artifactId
/dependency
dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement2、application开启feign的hystrix支持客户端配置限流降级熔断
#hystrix
feign:hystrix:enabled: truecircuitbreaker:enabled: truehystrix:threadpool:#默认配置default:#动态调整线程数allowMaximumSizeToDivergeFromCoreSize: false#核心线程数coreSize: 10#最大线程数maximumSize: 10#空闲存活时间minkeepAliveTimeMinutes: 1#队列长度 设置置为-1时队列会使用 SynchronousQueue此时其 size 为0Hystrix 不会向队列内存放作业。maxQueueSize: -1#如果需要动态修改队列长度的话可以设置此值即使队列未满队列内作业达到此值时同样会拒绝请求。此值默认是 5queueSizeRejectionThreshold: 5command:default:#线程池keythreadPoolKeyOverride: default#熔断器circuitBreaker:enabled: true#错误占比errorThresholdPercentage: 50#窗口时间内最小请求数目requestVolumeThreshold: 20#休眠时间sleepWindowInMilliseconds: 5000execution:#隔离isolation:strategy: THREADthread:#线程超时时间timeoutInMilliseconds: 5000timeout:enabled: true#统计器metrics:rollingStats:#窗口大小timeInMilliseconds: 10000#桶数目需要保证与timeInMilliseconds整除numBuckets: 103、入口类增加EnableFeignClients EnableHystrix 开启feign与hystrix
EnableFeignClients
EnableHystrix
Slf4j
public class TestDemoApplication {public static void main(String[] args) {SpringApplication.run(TestDemoApplication.class, args);}
}4、feign调用增加降级方法
/*** author senfel* version 1.0* date 2023/7/03 15:04*/
Service
FeignClient(value test-demo,fallback FallbackService.class)
public interface TestService {/*** 测试hystrix*/GetMapping(/feign)String feign(RequestParam String str);}/*** FallbackService* author senfel* version 1.0* date 2023/7/3 15:26*/
Service
public class FallbackService implements TestService {Overridepublic String feign(String str) {return 客户端服务降级;}
}服务端配置限流降级熔断(选择使用) 线程隔离、 服务调用超时5s降级、 10s内最低20个请求进入规则验证超过50%错误率直接熔断5s GetMapping(/feign)
HystrixCommand(// 标识线程池 保持唯一threadPoolKey threadPoolKeyByFeign,// 线程池细节属性配置threadPoolProperties {// 线程数HystrixProperty(namecoreSize,value 10),//最大线程数量HystrixProperty(namemaximumSize,value 10),// 等待队列长度HystrixProperty(namemaxQueueSize,value-1),//如果需要动态修改队列长度的话可以设置此值即使队列未满队列内作业达到此值时同样会拒绝请求。此值默认是 5HystrixProperty(namequeueSizeRejectionThreshold,value5),//空闲时间1minHystrixProperty(namekeepAliveTimeMinutes,value1)},// 熔断的一些细节属性配置commandProperties {// 调用服务超时时间HystrixProperty(nameexecution.isolation.thread.timeoutInMilliseconds,value5000),// 统计时间窗口定义HystrixProperty(name metrics.rollingStats.timeInMilliseconds,value 10000),//桶数量 保证与统计时间窗口整除HystrixProperty(name metrics.rollingPercentile.numBuckets,value 10),// 统计时间窗口内的最小请求数HystrixProperty(name circuitBreaker.requestVolumeThreshold,value 20),// 统计时间窗口内的错误数量百分比阈值HystrixProperty(name circuitBreaker.errorThresholdPercentage,value 50),// 自我修复时的活动窗口长度HystrixProperty(name circuitBreaker.sleepWindowInMilliseconds,value 5000)},// 降级方法fallbackMethod myFallBack
)
public String feign(String str){if(str.contains(s)){throw new RuntimeException();}return strssss;
}private String myFallBack(String str){return 服务端服务降级;
}Springboot集成Hystrix可视化
1、增加maven依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-hystrix-dashboard/artifactId
/dependency2、application配置监控
hystrix:dashboard:proxy-stream-allow-list: 127.0.0.1management:endpoints:web:exposure:include: health,hystrix.stream 3、页面访问hystrix-dashboard
http://127.0.0.1:9999/hystrix
http://127.0.0.1:9999/actuator/hystrix.stream
写在最后
Springboot集成Hystrix实现熔断、降级、隔离较为简单并且提供了hystrix-dashboard可视化仪表盘。Hystrix框架已经实现了熔断降级、隔离策略我们集成后只需要根据自身情况进行配置选用即可。一般在微服务架构优先选择客户端熔断降级当然也可在服务端进行注解配置。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928851.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!