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 只能用在阻塞调用,不然性能会收到极大影响