使 akka 守护者演员使用自定义调度程序

qcbq4gxm  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(88)

我在application.conf中定义了一个自定义调度器,如下所示:

my-special-dispatcher {
  type = Dispatcher
  executor = "thread-pool-executor"
  thread-pool-executor {
    fixed-pool-size = 1
  }
  throughput = 1
}

字符串
文档中说要使用自定义分派器创建一个actor,如下所示:

context
  .spawn(
    yourBehavior, 
    "DispatcherFromConfig", 
    DispatcherSelector.fromConfig("your-dispatcher")
  )


但是,我想对监护人参与者使用这个自定义调度程序,它不是通过context.spawn创建的。
我现在创建我的actor系统和guardian actor如下:

implicit val myActorSystem: ActorSystem[MyGuardianActor.Request] = {
  ActorSystem[MyGuardianActor.Request](
    MyGuardianActor(), 
    name = "MyGuardianActorSingleton"
  )


如何修改它以使用名为“my-special-dispatcher”的自定义调度程序?
注意:我只想为守护参与者使用自定义调度程序。系统中的所有其他参与者都应该使用默认的调度程序。

acruukt9

acruukt91#

您有ActorSystem class,这是当您从ActorSystem companion object使用apply方法时得到的。在您的情况下,您使用的是一个只接收用户监护人演员和演员系统的名称

def apply[T](
  guardianBehavior: Behavior[T], 
  name: String
): ActorSystem[T]

字符串
这个工厂方法可以让您为守护参与者设置一个分派器

def apply[T](
  guardianBehavior: Behavior[T], 
  name: String, 
  config: Config, 
  guardianProps: Props
): ActorSystem[T]


如您所见,最后一个参数允许您像生成查尔兹时一样设置调度程序。做一些类似下面的例子应该对你有用

val dispatcherSelector = DispatcherSelector.fromConfig("my-special-dispatcher")

ActorSystem[MyGuardianActor.Request](
  guardianBehavior = MyGuardianActor(), 
  name = "MyGuardianActorSingleton",
  config = ConfigFactory.load(),
  guardianProps = dispatcherSelector
)

相关问题