5.執行緒池/請求佇列/訊號量是否佔滿
如果與命令相關的執行緒池和請求佇列或者訊號量已經被佔滿,那麼hystrix也不會執行命令,而是轉接到fallback處理邏輯。
命令名稱、分組以及執行緒池劃分
super(setter.withgroupkey(hystrixcommandgroupkey.factory.askey("testgroupkey"))
.andcommandkey(hystrixcommandkey.factory.askey("commandkey"))
.andthreadpoolkey(hystrixthreadpoolkey.factory.askey("poolkey")));
我們先呼叫了withgroupkey來設定命令組名,然後才通過呼叫andcommandkey來設定命令名。這是因為在setter的定義中,只有withgroupkey靜態函式可以建立setter的例項,所以groupkey是每個setter必須的函式,而commandkey是乙個可選的引數。
通過設定命令組,hystrix會根據組來組織和統計命令的告警、儀錶盤等資訊,那麼為什麼一定要設定命令組呢?因為處理根據足能來實現統計之外,hystrix命令預設的執行緒劃分也是根據命令分組來實現的。預設情況下,hystrix會讓相同組名的命令使用乙個執行緒池,所以我們需要在建立hystrix命令時為其指定命令組名來實現預設的執行緒池劃分。
執行緒池還可以根據hystrixthreadpoolkey來對執行緒池進行設定。
使用註解的時候這樣設定
@hystrixcommand(commandkey="getuserbyid",groupkey="usergroup",threadpoolkey="getuserbyidthread")
public class mycommand extends hystrixcommand
protected string run() throws interruptedexception
protected string getfallback()
}
執行緒池:
public class threadmain
thread.sleep(5000);
}}
訊號量:
public class semaphoremain
};t.start();
} thread.sleep(5000);
}}
Hystrix 中線程池隔離與訊號量隔離區別
hystrix的隔離策略有兩種 分別是執行緒隔離和訊號量隔離。thread 執行緒隔離 使用該方式,hystrixcommand將會在單獨的執行緒上執行,併發請求受執行緒池中線程數量的限制。semaphore 訊號量隔離 使用該方式,hystrixcommand將會在呼叫執行緒上執行,開銷相對較小,...
執行緒 訊號量
訊號量 訊號量本質上是乙個非負的整數計數器,它被用來控制對公共資源的訪問。當公共資源增加時,呼叫函式sem post 增加訊號量。只有當訊號量值大於 時,才能使用公共資源,使用後,函式sem wait 減少訊號量。函式sem trywait 和函式pthread mutex trylock 起同樣的...
執行緒與訊號量
訊號量的資料型別為結構sem t,它本質上是乙個長整型的數。函式sem init 用來初始化乙個訊號量。它的原型為 extern int sem init p sem t sem,int pshared,unsigned int value sem為指向訊號量結構的乙個指標 pshared不為 時此...