web-dev-qa-db-ja.com

Hystrixスレッドプールのプロパティ

このアプリケーションでは、いくつかの外部サービスを呼び出すため、Hystrixを使用します。呼び出す外部サービスごとに、特定のサイズの1つのスレッドプールを構成する必要があります。

S1、S2、S3と呼ばれる3つの外部サービスがあると仮定しましょう。さらに、C1からC10と呼ばれるHystrixCommandを拡張する10個のクラスがあります。

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)));

1つのコマンド(C1)のコンストラクター内で、S1の​​スレッドプールサイズを15に指定します。ThreadPoolsは、finalstatic属性S1が次のように定義されるカスタムクラスです。

S1 = HystrixThreadPoolKey.Factory.asKey("S1");

ここで実際の質問は、(1)スレッドプールのコアサイズ(S1の場合は15)が中央のスレッドプール定義ではなくHystrixCommand内で指定される理由です(これはHystrixの概念ではないようです)。

C2(上記のスニペットと同じように見えます)のコンストラクター内で、15以外の引数を使用して withCoreSize を呼び出すとします。(2)どちらを使用しますか?

(3)サービスS1、S2、S3の3つのスレッドプールを1つのクラスで定義し、コマンドクラスからそれらを参照する方法はありますか?

Hystrix 使い方 ガイドにはそれに関連する情報が含まれていないようです。誰かがこの質問に答える時間があれば素晴らしいでしょう。

5
Timo Denk

次のような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

4
Lital Kolog