Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Akka 如何使用worker actor正确实现作业队列_Akka - Fatal编程技术网

Akka 如何使用worker actor正确实现作业队列

Akka 如何使用worker actor正确实现作业队列,akka,Akka,我有一位演员,他代表一名长期从事繁重工作的工人: class Worker extends Actor{ override def receive: Receive = { case "doJob" => Thread.sleep(999999) sender ! "JobResult" } } 若队列已满,我将限制作业队列并显式拒绝用户。实现此逻辑的最佳实践是什么。我是否应该使用边界邮箱或某个调度程序来监视作业队列?大概是这样的: class

我有一位演员,他代表一名长期从事繁重工作的工人:

class Worker extends Actor{

  override def receive: Receive = {
    case "doJob" =>
      Thread.sleep(999999)
      sender ! "JobResult"
  }

}
若队列已满,我将限制作业队列并显式拒绝用户。实现此逻辑的最佳实践是什么。我是否应该使用边界邮箱或某个调度程序来监视作业队列?大概是这样的:

class Dispatcher(worker:ActorRef) extends Actor{

  val MAX_JOBS = 10

  var jobs = 0

  override def receive: Receive = {
    case "newJob" =>
      if (jobs >= MAX_JOBS) sender ! "Try later"
      jobs+=1
      worker ! "doJob"

    case "JobResult" =>
      jobs-=1
  }

}
bounded-mailbox {   mailbox-type = "akka.dispatch.BoundedMailbox"  
mailbox-capacity = 1000   mailbox-push-timeout-time = 10s  }

akka.actor.mailbox.requirements {  
"akka.dispatch.BoundedMessageQueueSemantics" = bounded-mailbox 
}

此外,我不确定在这种情况下如何正确处理故障…

我认为最好的做法是为工作者角色使用有界邮箱

然后,您可以在如下配置中配置边界:

class Dispatcher(worker:ActorRef) extends Actor{

  val MAX_JOBS = 10

  var jobs = 0

  override def receive: Receive = {
    case "newJob" =>
      if (jobs >= MAX_JOBS) sender ! "Try later"
      jobs+=1
      worker ! "doJob"

    case "JobResult" =>
      jobs-=1
  }

}
bounded-mailbox {   mailbox-type = "akka.dispatch.BoundedMailbox"  
mailbox-capacity = 1000   mailbox-push-timeout-time = 10s  }

akka.actor.mailbox.requirements {  
"akka.dispatch.BoundedMessageQueueSemantics" = bounded-mailbox 
}
您还可以指定所需的邮箱类型(来自内置类型),或使用自己的特征和规范创建自己的自定义邮箱。(先处理哪些消息等)

我认为在您的场景中,最好是: 1.使用自己的错误机制和自定义清除/边界限制创建自己的邮箱。(基于有界邮箱特征) 3.将调度程序连接到通过配置创建的自定义邮箱