如何让Akka.NET的ClusterClient工作?

时间:2016-12-18 15:00:19

标签: akka.net

我按照the docs尝试了ClusterClient。

但是我的客户端测试应用程序不断收到以下错误:

Error while creating actor instance of type Akka.Cluster.Tools.Client.ClusterClient with 1 args: (Akka.Cluster.Tools.Client.ClusterClientSettings)
Cause: [akka://TestSystem/user/$a#705838478]: Akka.Actor.ActorInitializationException: Exception during creation ---> System.TypeLoadException: Error while creating actor instance of type Akka.Cluster.Tools.Client.ClusterClient with 1 args: (Akka.Cluster.Tools.Client.ClusterClientSettings) ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: failure-detector.heartbeat-interval must be > 0s
   at Akka.Remote.DeadlineFailureDetector..ctor(TimeSpan acceptableHeartbeatPause, TimeSpan heartbeatInterval, Clock clock)
   at Akka.Remote.DeadlineFailureDetector..ctor(TimeSpan acceptableHeartbeatPause, Clock clock)
   at Akka.Cluster.Tools.Client.ClusterClient..ctor(ClusterClientSettings settings)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   at System.Activator.CreateInstance(Type type, Object[] args)
   at Akka.Actor.Props.ActivatorProducer.Produce()
   at Akka.Actor.Props.NewActor()
   --- End of inner exception stack trace ---
   at Akka.Actor.Props.NewActor()
   at Akka.Actor.ActorCell.CreateNewActorInstance()
   at Akka.Actor.ActorCell.<>c__DisplayClass118_0.<NewActor>b__0()
   at Akka.Actor.ActorCell.UseThreadContext(Action action)
   at Akka.Actor.ActorCell.NewActor()
   at Akka.Actor.ActorCell.Create(Exception failure)
   --- End of inner exception stack trace ---
   at Akka.Actor.ActorCell.Create(Exception failure)
   at Akka.Actor.ActorCell.SysMsgInvokeAll(EarliestFirstSystemMessageList messages, Int32 currentState)

我用来获取此错误的最小代码:

using (var system = ActorSystem.Create("TestSystem")) {
    system.Settings.InjectTopLevelFallback(ClusterClientReceptionist.DefaultConfig());
    var settings = ClusterClientSettings.Create(system);
    var client = system.ActorOf(ClusterClient.Props(settings));
    Console.Write("Press any key to exit...");
    Console.ReadKey();
}

客户端的HOCON配置包含:

akka {
  actor {
    provider = "Akka.Remote.RemoteActorRefProvider, Akka.Remote"
  }

  remote {
    helios.tcp {
      port = 0
      hostname = localhost
    }
  }

  cluster {
    client {
      initial-contacts: ["akka.tcp://TestSystem@localhost:8082/user/receptionist"]
    }
  }
}

还检查了settings变量,似乎已填充并且对我来说没问题:

settings variable content

尝试了几个随机的内容来实际填写错误消息:

  

failure-detector.heartbeat-interval必须> 0

包括HOCON条目的各种排列,但无济于事。

我错过了什么?

更新#1

修改HOCON以初始化Akka.Remote。 仍然收到类似错误消息的内容。

但现在它说明了:

  

failure-detector.heartbeat-interval必须> 0

之前它说的是:

  

failure-detector.acceptable-heartbeat-pause必须是> = 0s

1 个答案:

答案 0 :(得分:0)

管理让它立即运作。

问题的原因:我使用的是Akka.Cluster.Tools最新版本1.0.6

修复:升级到最新的测试版1.1.2.30-beta

p / s:我希望文档可以指定使其工作所需的最小NuGet版本。