点击下载教程项目代码:netflix_hystrix_demo.zip
@HystrixProperty 注解是 Hystrix 框架中用于为 @HystrixCommand 注解所标注的方法或类提供更细粒度配置属性的注解。
@HystrixProperty 注解允许开发人员在使用 @HystrixCommand 注解时,针对具体的方法或类,精确地定制 Hystrix 命令的各种行为和参数,从而更好地满足不同业务场景下的需求,实现对熔断器、线程池、超时时间等功能的个性化配置。
指定要配置的 Hystrix 属性的名称,其取值对应于 Hystrix 框架中预定义的各种配置属性名,如:
execution.isolation.thread.timeoutInMilliseconds 主要用于设置在 Hystrix 命令执行时,线程隔离模式下的超时时间(单位是毫秒)。
circuitBreaker.requestVolumeThreshold 用于确定在一个滚动窗口内,开启断路器之前必须达到的最小请求数量。
注意,要查看更多属性,点击查看“Netflix Hystrix 常用属性”。
设置对应属性的值,根据 name 属性所指定的不同属性,其取值类型和范围也有所不同。例如,对于 execution.isolation.thread.timeoutInMilliseconds 属性,其值应为表示时间的整数值,单位为毫秒;而对于 circuitBreaker.requestVolumeThreshold,其值应为表示请求数量的整数值。
以下是一个使用 @HystrixProperty 注解的示例,展示了如何为 @HystrixCommand 标注的方法配置超时时间和熔断器请求阈值:
@Service public class MyService { @HystrixCommand(fallbackMethod = "fallbackMethod", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1500"), @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5") }) public String myMethod() throws InterruptedException { // 模拟一个可能会超时的方法调用 } public String fallbackMethod() { return "降级结果"; } }
在上述示例中,myMethod 方法使用了 @HystrixCommand 注解,并通过 commandProperties 属性配置了两个 @HystrixProperty 注解。其中:
第一个 @HystrixProperty 将方法的超时时间设置为 1500 毫秒。
第二个 @HystrixProperty 将熔断器的请求阈值设置为 5。
这意味着如果 myMethod 方法在 1500 毫秒内未执行完成,将会触发超时并执行降级方法 fallbackMethod;并且当该方法的请求失败次数达到 5 次时,熔断器将会打开,后续请求将直接执行降级方法,直到熔断器状态恢复。
注意:当在不同的地方对同一 Hystrix 属性进行配置时,需要注意配置的优先级。一般来说,方法级别的配置会覆盖类级别和全局级别的配置,而类级别的配置会覆盖全局级别的配置。