我正在尝试配置远程Actor,但遇到了一些问题。每次我启动控制台应用程序时,都会收到一个错误:
(由于某种原因,我无法捕捉到它,但以下是我可以从中收集的所有信息(:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
at Akka.Actor.ActorPath.ToStringWithAddress(Address address) in D:a1ssrccoreAkkaActorActorPath.cs:line 738
System.NullReferenceException
HResult=0x80004003
Message=Object reference not set to an instance of an object.
Source=Akka
StackTrace:
at Akka.Actor.ActorPath.ToStringWithAddress(Address address) in D:a1ssrccoreAkkaActorActorPath.cs:line 738
从错误显示的内容来看,我似乎没有配置地址。在我关于如何配置akka远程参与者的所有研究中,我都没有找到配置地址的方法。
这是我的代码:
using Akka.Actor
using Akka.Configuration
var config = ConfigurationFactory.ParseString(@"
akka {
actor {
provider = remote
}
remote {
dot-netty.tcp {
transport-protocol = tcp
port = 8091
hostname = ""127.0.0.1""
}
log-remote-lifecycle-events = INFO
}
}");
using (var system = ActorSystem.Create("MyServer", config))
{
system.ActorOf(Props.Create(() => new AkkaCalcServerPipeTo()), "CalcServer");
...
}
有没有一种方法可以配置远程参与者来删除此错误?我的假设是我的配置是如此错误,以至于我得到了这个随机错误。
我正在上跑步。NET Framework 4.7.2(如果有帮助的话(。
编辑:
我意识到这可能还不够,我在下面添加了AkkaCalcServerPipeTo
类,以防有帮助:
using System;
using System.Threading.Tasks;
using Akka.Actor;
using CalcMessages;
public class AkkaCalcServerPipeTo : ReceiveActor, ILogReceive
{
public AkkaCalcServerPipeTo()
{
Receive<Messages.AdditionRequest>(ar =>
{
Console.WriteLine("Received addition request {0} + {1} - {2}", ar.A, ar.B, DateTime.Now);
Sender.Tell(new Messages.CalcResponse(ar.A + ar.B), Self);
});
Receive<Messages.SubtractionRequest>(sr =>
{
Console.WriteLine("Received subtraction request {0} - {1} - {2}", sr.A, sr.B, DateTime.Now);
Sender.Tell(new Messages.CalcResponse(sr.A - sr.B), Self);
});
Receive<Messages.MultiplicationRequest>(mr =>
{
var self = Self; // closure
Task.Run(async () => {
await Task.Delay(2500);//Thread.Sleep(10000);//
Console.WriteLine("Received multiplication request {0} * {1} - {2}", mr.A, mr.B, DateTime.Now);
mr.Sender.Tell(new Messages.CalcResponse(mr.A * mr.B), self);
}).ContinueWith(x =>
{
if (x.IsFaulted)
{
}
}, TaskContinuationOptions.ExecuteSynchronously).PipeTo(self);
});
Receive<Messages.DivisionRequest>(dr =>
{
var self = Self; // closure
Task.Run(async () => {
await Task.Delay(10000);//Thread.Sleep(10000);//
Console.WriteLine("Received division request {0} / {1} - {2}", dr.A, dr.B, DateTime.Now);
dr.Sender.Tell(new Messages.CalcResponse(dr.A / dr.B), self);
}).PipeTo(self);
});
}
}
我也面临同样的问题。这个帖子很旧,但不知怎么的,我在开始的时候也收到了同样的错误。如果我删除配置文件中配置远程信息的部分,则不会出现错误。
我升级到了最新版本。