无法在Akka.Cluster中的演员之间进行通信

时间:2015-08-25 22:38:35

标签: c# akka.net akka.net-cluster

我在群集中的演员之间进行沟通时遇到了一些问题。

我的测试项目在下面有这个结构。

TestJob [C#控制台项目]

  • TestJobService.cs
  • TestJobActor

MainProject [C#控制台项目] //注意:我将此服务配置为种子节点。我没有使用灯塔。

  • MainService
  • JobManagerActor

注意:我不想将actor放在共享项目或主项目中。应该进行测试工作的演员应该在“TestJob”项目下。

我已经关注了这篇文章http://getakka.net/docs/clustering/cluster-overview和视频。我确实根据文章启用了Akka.Cluster。我可以运行两个控制台项目但是当我试图从JobManagerActor“告诉”到TestJobActor时,它不起作用。没有错误但不起作用。

我在MainProject中有这个配置。

         actor {
               provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster"
               deployment {
            /TestJobAActor {
            router = consistent-hashing-group
                            routees.paths = ["/user/TestJobAActor"]
                    virtual-nodes-factor = 8
            cluster {
                   enabled = on
                   max-nr-of-instances-per-node = 2
                   allow-local-routees = off
                   use-role = backend
            }
            }                           
                 }
         }

以下是我用于发送邮件的代码。

           var backendRouter = Context.ActorOf(Props.Empty.WithRouter(new ClusterRouterGroup(new ConsistentHashingGroup("/user/TestJobAActor"),new ClusterRouterGroupSettings(10, false, "backend", ImmutableHashSet.Create("/user/TestJobAActor")))));
            backendRouter.Tell("Yo yo!");

我错过了什么?提前致谢。

注意:我可以在https://github.com/michaelsync/APMDemo找到具有相似结构的测试项目。 (VS2015项目)

还有一个问题:在使用群集时我们仍然可以使用actor吗?

            var actorSelection = Context.ActorSelection("akka.tcp://MyBackendProcessingSystem@127.0.0.1:2553/user/BackEndJobAActor"); //This can come from Model
            actorSelection.Tell("Yo yo!");

1 个答案:

答案 0 :(得分:1)

不用担心!

我自己设法解决了这个问题。您可以在我的临时仓库https://github.com/michaelsync/APMDemo/tree/allinoneproject中看到修复程序。

  1. 问题在于我不知道我需要使用IConsistentHashable以一致路由发送消息。我继续发送字符串并且没有工作。

  2. 当地路线已关闭。