我开始关注Akka,我想知道实现演员管道的正确方法,合作处理消息。让我用一个用例来说明我的问题:
我的消息代表了合作演员必须做出的“决定”。
我希望能够创造几个“选民”;每个选民都会就决定做出表达意见(基于自己的战略和规则)。
我可以实施不同的策略来汇总不同代理人的意见,但让我们想象一下,当且仅当链中的所有代理做出正面决定时,我才会做出积极的决定。
我如何在akka中实现它?我是否会实现代表整个链并接收DECISION消息的第一个actor?由于链中有选民,这个演员会有很多孩子吗?父亲将如何与孩子互动以及谁将控制事件的流动?这是从同一个选民到下一个选民的同一决定信息吗?或者父母和一个孩子之间会有一系列互动吗?
此类用例的推荐模式是什么?
非常感谢您的反馈!
奥利弗
答案 0 :(得分:2)
你可能已经回答过了,但这就是我要做的事情:
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特征。