squbs-10. 为阻塞API调用的阻塞Dispatcher

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








你可能感兴趣的:(squbs-10. 为阻塞API调用的阻塞Dispatcher)