在我们的应用程序中,我们使用Hystrix,因为我们调用了几个外部服务。我们希望为我们调用的每个外部服务配置一个具有特定大小的线程池。
假设有三个外部服务,称为S1、S2、S3。此外,我们有10个扩展hystrixcommand
的类,称为C1到C10。
C1和C2调用S1,应该使用相同的线程池,有15个线程。在C1的构造函数内部,我们对super
进行以下调用:
super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("S1"))
.andThreadPoolKey(ThreadPools.S1)
.andThreadPoolPropertiesDefaults(HystrixThreadPoolProperties.Setter().withCoreSize(15))
.andCommandPropertiesDefaults(HystrixCommandProperties.Setter().withExecutionTimeoutInMilliseconds(timeout)));
在一个命令(C1)的构造函数中,我们将S1的线程池大小指定为15。ThreadPools
是一个自定义类,其中final
static
属性s1
由
S1 = HystrixThreadPoolKey.Factory.asKey("S1");
现在实际的问题是,(1)为什么线程池核心大小(对于S1是15)是在hystrixcommand
中指定的,而不是中心线程池定义(这似乎不是Hystrix的概念)。
假设在c2
的构造函数中(与上面的代码段看起来相同),我们要用一个不是15的参数调用withCoreSize。(2)采用哪一种?
(3)有没有办法在一个类中定义服务S1、S2和S3的三个线程池,并从命令类中引用它们?
Hystrix如何使用指南似乎不包含与此相关的信息。如果有人有时间回答这个问题,那就太好了。
您可以定义一个名为config.properties
的属性文件,该文件如下所示:
hystrix.threadpool.S1.coreSize=15
hystrix.threadpool.S1.maximumSize=15
hystrix.threadpool.S1.maxQueueSize=15
hystrix.threadpool.S1.queueSizeRejectionThreshold=300
hystrix.threadpool.S1.allowMaximumSizeToDivergeFromCoreSize=true
hystrix.threadpool.S1.keepAliveTimeMinutes=1
hystrix.threadpool.S2.coreSize=20
hystrix.threadpool.S2.maximumSize=20
hystrix.threadpool.S2.maxQueueSize=20
hystrix.threadpool.S2.queueSizeRejectionThreshold=300
hystrix.threadpool.S2.allowMaximumSizeToDivergeFromCoreSize=true
hystrix.threadpool.S2.keepAliveTimeMinutes=1
...
下面是关于coreSize、maximumSize和MaxQueueSize之间区别的一个很好的解释:
https://github.com/netflix/hystrix/issues/1554
我正在使用Hystrix库处理网络调用。这是我用于线程池配置的内容 我正在使用公共的HytrixCommandKey和HytrixThreadPoolKey创建一个包含1000个HytrixCommand对象的加载。但是线程池在服务前100个线程之后执行回退逻辑,而不是使用threadpool队列。这可以通过将threadpool,coreSize设置为1000来解决。但我使用的是java,将co
本文向大家介绍Spring Cloud Hystrix 线程池队列配置(踩坑),包括了Spring Cloud Hystrix 线程池队列配置(踩坑)的使用技巧和注意事项,需要的朋友参考一下 背景: 有一次在生产环境,突然出现了很多笔还款单被挂起,后来排查原因,发现是内部系统调用时出现了Hystrix调用异常。在开发过程中,因为核心线程数设置的比较大,没有出现这种异常。放到了测试环境,偶尔有出现这
基于 Hystrix 线程池技术实现资源隔离 上一讲提到,如果从 Nginx 开始,缓存都失效了,Nginx 会直接通过缓存服务调用商品服务获取最新商品数据(我们基于电商项目做个讨论),有可能出现调用延时而把缓存服务资源耗尽的情况。这里,我们就来说说,怎么通过 Hystrix 线程池技术实现资源隔离。 资源隔离,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内,不会去用其
前面讲了 Hystrix 的 request cache 请求缓存、fallback 优雅降级、circuit breaker 断路器快速熔断,这一讲,我们来详细说说 Hystrix 的线程池隔离与接口限流。 Hystrix 通过判断线程池或者信号量是否已满,超出容量的请求,直接 Reject 走降级,从而达到限流的作用。 限流是限制对后端的服务的访问量,比如说你对 MySQL、Redis、Zoo
接收到数据时回调此函数,发生在worker进程中。函数原型: function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data); $server,swoole_server对象 $fd,TCP客户端连接的唯一标识符 $reactor_id,TCP连接所在的Reactor线程ID $data,收到的数