我开始关注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特征.