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