原文地址:The Blocking Dispatcher for Blocking API calls
這個(gè)話題并不討論一般的dispatcher,而是關(guān)于特殊的squbs dispatcher配置。請(qǐng)查看Akka documentation 獲得更多的dispatcher細(xì)節(jié)。
squbs提供了一個(gè)預(yù)設(shè)的dispatcher配置來(lái)使用阻塞調(diào)用。一般來(lái)說(shuō),這些用來(lái)同步調(diào)用數(shù)據(jù)庫(kù)。這個(gè)reference.conf 定義的blocking-dispatcher如下:
blocking-dispatcher {
# Dispatcher 是基于事件的dispatcher的名稱
type = Dispatcher
#使用哪種ExecutionService
executor = "thread-pool-executor"
thread-pool-executor {
# 控制最小factor-base core線程數(shù)
core-pool-size-min = 2
# 核心線程factor用來(lái)確定線程核心線程數(shù),采用如下公式:
# ceil(available processors * factor)
# 結(jié)果為 core-pool-size-min和core-pool-size-ma之間
core-pool-size-factor = 3.0
# 最大的factor-based線程數(shù)
core-pool-size-max = 24
# 控制factor-based max 最小線程數(shù)
# Minimum number of threads to cap factor-based max number to
# (如果使用有界隊(duì)列)
max-pool-size-min = 2
# 最大的線程數(shù)由計(jì)算 ceil(available processors * factor) 確定
# (如果使用有界隊(duì)列)
max-pool-size-factor = 3.0
# 控制factor-based max 最大線程數(shù)
# (如果使用有界隊(duì)列)
max-pool-size-max = 24
}
# 在線程跳向下一個(gè)actor之前,吞吐量定義了每個(gè)actor處理的最大消息量
# 設(shè)置為1則盡量的公平
throughput = 2
}
如果actor需要使用blocking dispatcher,只需要如下配置actor:
"/mycube/myactor" {
dispatcher = blocking-dispatcher
}
如果沒(méi)有任何actor使用blocking-dispatcher,blocking-dispatcher將不會(huì)被初始化,也不會(huì)請(qǐng)求獲取任何資源。
**警告:** blocking-dispatcher 只能用在阻塞調(diào)用,不然性能會(huì)收到極大影響