HystrixCommand的配置

    @HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
            // 设置隔离策略,THREAD:表示线程池,SEMAPHORE:信号池隔离
            @HystrixProperty(name = "execution.isolation.strategy",value = "THREAD"),

            // 当前隔离策略选择信号池隔离的时候,用来设置信号池的大小(最大并发数)
            @HystrixProperty(name = "execution.isolation.semaphore.maxConcurrentRequests",value = "10"),

            // 配置命令执行的超时时间
            @HystrixProperty(name = "execution.isolation.thread.timeOutInMilliseconds",value = "10"),

            // 是否启用超时时间
            @HystrixProperty(name = "execution.timeout.enabled",value = "true"),

            // 执行超时的时候是否中断
            @HystrixProperty(name = "execution.isolation.thread.interruptOnTimeout",value = "true"),

            // 执行被取消的时候是否中断
            @HystrixProperty(name = "execution.isolation.thread.interruptOnCancel",value = "true"),

            // 允许回调方法执行的最大并发数
            @HystrixProperty(name = "fallback.isolation.semaphore.maxConcurrentRequests",value = "10"),

            // 服务降级是否启用,是否执行回调函数
            @HystrixProperty(name = "fallback.enabled",value = "true"),

            // 是否启用断路器
            @HystrixProperty(name = "circuitBreaker.enabled",value = "true"),

            // 该属性用来设置在滚动时间窗中,断路器熔断的最小请求数。
            // 例如,默认该值为20的时候,如果滚动时间窗(默认10s)内仅收到了10个请求,即使这19个请求都失败了,断路器也不会打开。
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "20"),

            // 该属性用来设置在滚动时间窗中,表示在滚动时间窗中,在请求数量超过circuitBreaker.RequestVolumeThreshold的情况下,
            // 如果错误请求数的百分比超过50,就把断路器设置为“打开”状态,否则就设置为“关闭”状态。
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"),//时间窗口期

            // 断路器强制打开
            @HystrixProperty(name = "circuitBreaker.forceOpen",value = "false"),

            // 断路器强制关闭
            @HystrixProperty(name = "circuitBreaker.forceClosed",value = "false"),

            // 滚动时间窗设置,该时间用于断路器判断健康度时需要收集信息的持续时间
            @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds",value = "10000"),

            // 该属性用来设置滚动时间窗统计指标信息时划分“桶”的数量,
            // 断路器在收集指标信息的时候会根据设置的时间窗长度拆分成多个“桶”来累计个度量值,每个“桶”记录了一段时间内的采集指标。
            // 比如10s内拆分成10个“桶”收集指标,所以timeinMilliseconds必须能被numBuckets整除。否则会抛异常
            @HystrixProperty(name = "metrics.rollingStats.numBuckets",value = "10"),

            // 该属性用来设置对命令执行的延迟是否使用百分位数来跟踪和计算。如果设置为false,那么所有的概要统计都将返回-1.
            @HystrixProperty(name = "metrics.rollingPercentile.enabled",value = "false"),

            // 该属性用来设置百分位统计的滚动窗口的持续时间,单位为毫秒。
            @HystrixProperty(name = "metrics.rollingPercentile.timeInMilliseconds",value = "60000"),

            // 该属性用来设置百分位统计滚动窗口中使用“桶”的数量。
            @HystrixProperty(name = "metrics.rollingPercentile.numBuckets",value = "60000"),

            // 该属性用来设置在执行过程中每个“桶”中保留的最大执行次数。如果在滚动时间窗内发生超过该设定值的执行次数,就从最初的位置开始重写。
            // 例如,将该值设置为100,滚动窗口为10s,若在10s内一个“桶”中发生了500次执行,那么该“桶”中只保留最后的100次执行的统计。
            // 另外,增加该值的大小将会增加内存量的消耗,并增加排序百分位数所需的计算时间。
            @HystrixProperty(name = "metrics.rollingPercentile.bucketSize",value = "100"),

            // 该属性用来设置采集影响熔断器状态的健康快照(请求的成功、错误百分比)的间隔等待时间。
            @HystrixProperty(name = "metrics.healthSnapshot.intervalInMilliseconds",value = "500"),

            // 是否开启请求缓存
            @HystrixProperty(name = "requestCache.enabled",value = "true"),

            // HystrixCommand的执行和事件是否打印日志到HystrixRequestLog中
            @HystrixProperty(name = "requestLog.enabled",value = "true"),

            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"),//失败率达到多少后跳闸
    },threadPoolProperties = {

            // 该参数用来设置执行命令线程池的核心线程数,该值也就是命令执行的最大并发量
            @HystrixProperty(name = "coreSize",value = "10"),

            // 该参数用来设置线程池的最大队列大小。当设置为-1时,线程池将使用SynchronousQueue实现的队列,
            // 否则将使用LinkedBlockingQueue实现的队列
            @HystrixProperty(name = "maxQueueSize",value = "-1"),

            // 该参数用来为队列设置拒绝阈值。通过该参数,即使队列没有达到最大值也能拒绝请求。
            // 该参数主要是对LinkedBlockingQueue队列的补充,
            // 因为LinkedBlockingQueue队列不能动态修改它的对象大小,而通过该属性就可以调整拒绝请求的队列大小了。
            @HystrixProperty(name = "queueSizeRejectionThreshold",value = "5"),
    })

https://blog.csdn.net/qq_42341853/article/details/124097195

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring OSGi 是一个在 OSGi(开放服务网关)环境下运行的 Spring 框架。Hystrix 是 Netflix 开源的容错库,用于处理分布式系统中的故障和延迟。在 Spring OSGi 中使用 HystrixCommand 可以帮助我们实现服务的容错和断路器模式。 要在 Spring OSGi 中使用 HystrixCommand,可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中添加了 Hystrix 的依赖。可以通过 Maven 或 Gradle 添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> ``` 2. 创建一个需要进行容错处理的服务类,并在该类中定义需要进行容错处理的方法。方法需要添加 `@HystrixCommand` 注解,以告诉 Hystrix 需要对该方法进行容错处理。例如: ```java @Service public class MyService { @HystrixCommand(fallbackMethod = "fallbackMethod") public String myMethod() { // 业务逻辑 } public String fallbackMethod() { // 容错处理逻辑 } } ``` 3. 在 OSGi 环境中,需要将上述服务类注册为 OSGi 服务。可以使用 `@Service` 注解或者在 XML 配置文件中进行配置。例如: ```java @Component @Service public class MyService implements BundleActivator { @HystrixCommand(fallbackMethod = "fallbackMethod") public String myMethod() { // 业务逻辑 } public String fallbackMethod() { // 容错处理逻辑 } // ... } ``` 4. 在使用服务的地方,可以通过 OSGi 的服务注入机制获取到该服务,并调用其中的方法。例如: ```java @Component public class MyComponent { @Reference private MyService myService; public void doSomething() { String result = myService.myMethod(); // 处理结果 } } ``` 通过以上步骤,你就可以在 Spring OSGi 中使用 HystrixCommand 实现容错处理了。请注意,以上代码仅为示例,实际使用时需要根据具体需求进行适当调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值