akka – 设计模式:如何实现处理单个逻辑消息的actor链

我开始关注Akka,我想知道实现演员管道的正确方法,合作处理消息.让我用一个用例来说明我的问题:

>我有一条消息,表示必须由合作参与者做出的“决定”.
>我希望能够创造几个“选民”;每个选民都会根据自己的决策(根据自己的战略和规则)表达自己的意见.
>我可以实施不同的策略来汇总不同代理人的意见,但让我们想象一下,当且仅当链中的所有代理做出正面决定时,我才会做出积极的决定.

我如何在akka中实现它?我是否会实现代表整个链并接收DECISION消息的第一个actor?由于链中有选民,这个演员会有很多孩子吗?父亲将如何与孩子互动以及谁将控制事件的流动?这是从同一个选民到下一个选民的同一决定信息吗?或者父母和一个孩子之间会有一系列的互动吗?

这类用例的推荐模式是什么?

非常感谢您的反馈!

奥利维尔

最佳答案 你可能已经回答过了,但这就是我要做的:

trait DecisionActor extends Actor

class AbsoluteAgreementActor extends DecisionActor {
  val numberOfVoters = 100
  def receive = {
    case d:Decision = {
      computeDecision(d) pipeTo sender
    }
  }

  def computeDecision(d) = {
    val votes = for {
      i <- 0 until numberOfVoters
      //Naming it for re-usual in case you don't delete it
      voter = context.actorOf(Props[VoterActor], s"Voter $i")           
    } yield {
      voter ? d
    }
    Future.sequence(votes).foldLeft(True)(&&)
  }
}

然后在你的主要部分,你只需要决定所需的策略演员.我自愿省略了选民/策略演员的取消,因为你可能不想删除它们,以防你再次需要它们.或者您可以避免创建它们并从所有策略共有的池中获取它们.这取决于我们的情况.然后,您可以使用不同的策略创建各种决策参与者,从而扩展DecisionActor特征.

点赞