Akka路由器,多个演员没有正确接收消息

时间:2014-01-15 12:07:35

标签: grails akka akka-cluster akka-zeromq

在这里,我创建了一个带有SmallestMailboxRouter的路由器

ActorRef actorRouter = this?.getContext()?.actorOf(new Props(RuleStandardActor.class).withRouter(new SmallestMailboxRouter(38)),"standardActorRouter")

现在在for循环中我创建了38个演员

    for(int i=0;i <38;i++) {
    ruleStandardActorRouter?.tell(new StandardActorMessage(standard: standard, responseVO: responseVO, report: report), getSelf());
}

每个actor将处理逻辑并返回分数和消息。我通过覆盖onreceive方法并将它们添加到列表中来接收消息

如果我多次运行该程序,我会得到不同的分数。但它应该返回总是相同的分数,因为我给予相同的输入。

if (message instanceof StandardActorResponse) {
        StandardActorResponse standardActorResponse = message
        standardActorResponseList?.add(standardActorResponse)

}

这里standardActorResponse包含消息和分数。如果我通过使用for循环而不是akka框架使用相同的逻辑,我将获得相同的结果。但在akka随机得到不同的结果。例如,我有一些规则,如loginexistence和navigationexistence和alertsexistence规则。我给这些规则提供了一个html源代码来检查html源是否在该源中有登录,警报和导航链接。有时我登录不存在,有时导航不存在,有时候警报不存在使用akka路由器和演员。但如果我使用循环我总是得到相同的结果

任何人都可以帮我找到问题。我正在使用akka 2.1.4

1 个答案:

答案 0 :(得分:1)

在识别邮箱大小之前,for循环可能已经完成。尝试在for循环中添加sleep以查看结果。