群集中的节点停止侦听连接

时间:2017-08-11 20:18:15

标签: akka.net akka.net-cluster

我们有两个具有相同代码的节点,它们在群集中使用akka.net并在它们之间使用远程发送消息。
Akka.Net版本是1.2.0,我们使用dot-netty进行传输。这是相关的配置部分:
actor { provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster" } remote { dot-netty.tcp { port = 34083 hostname = host_name } }

这两个节点在不同的Windows服务器上运行(托管在Windows服务上)。有时,节点停止侦听分配的端口(使用netstat -an检查),并且在重新启动Windows服务之前,它们之间的所有通信都将丢失。
这是我们在日志中获得的所有信息(前两个消息来自一个主机,第三个消息来自另一个主机):
60133 2017-08-11 10:09:11.993 Host1 Akka.Remote.Transport.ProtocolStateActor Error No response from remote. Handshake timed out or transport failure detector triggered. 60134 2017-08-11 10:09:12.040 Host1 Akka.Remote.ReliableDeliverySupervisor Warn Association with remote system akka.tcp://ProcesamientoActorSystem@warpacb004.nead.danet:34083 has failed; address is now gated for 5000 ms. Reason is: [Akka.Remote.EndpointDisassociatedException: Disassociated at Akka.Remote.EndpointWriter.PublishAndThrow(Exception reason, LogLevel level, Boolean needToThrow) at Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(Object message, PartialAction1 partialAction) at Akka.Actor.UntypedActor.Receive(Object message) at Akka.Actor.ActorBase.AroundReceive(Receive receive, Object message) at Akka.Actor.ActorCell.ReceiveMessage(Object message) at Akka.Actor.ActorCell.AutoReceiveMessage(Envelope envelope) at Akka.Actor.ActorCell.Invoke(Envelope envelope) --- End of stack trace from previous location where exception was thrown --- at Akka.Actor.ActorCell.HandleFailed(Failed f) at Akka.Actor.ActorCell.SysMsgInvokeAll(EarliestFirstSystemMessageList messages, Int32 currentState)]
60135 2017-08-11 10:09:14.313 Host2 Akka.Remote.ReliableDeliverySupervisor Warn Association with remote system akka.tcp://ProcesamientoActorSystem@warpacb005.nead.danet:34083 has failed; address is now gated for 5000 ms. Reason is: [Akka.Remote.EndpointDisassociatedException: Disassociated at Akka.Remote.EndpointWriter.PublishAndThrow(Exception reason, LogLevel level, Boolean needToThrow) at Akka.Actor.ReceiveActor.ExecutePartialMessageHandler(Object message, PartialAction
1 partialAction) at Akka.Actor.ActorCell.<>c__DisplayClass112_0.b__0(Object m) at Akka.Actor.ActorBase.AroundReceive(Receive receive, Object message) at Akka.Actor.ActorCell.ReceiveMessage(Object message) at Akka.Actor.ActorCell.AutoReceiveMessage(Envelope envelope) at Akka.Actor.ActorCell.Invoke(Envelope envelope)]
我想传输层出现故障,dot-netty关闭套接字并停止收听 有没有办法阻止这种情况发生或者至少使它不那么频繁?如果没有,我们可以挂钩失败事件再开始听吗?

2 个答案:

答案 0 :(得分:0)

没有更多信息我无法完全评论运行时行为,但我可以立即发现的一件事是您的传入连接正在监听localhost,因此它无法接受任何外部连接这台机器。

一般来说,当谈到Akka.Remote时,总是使用IP地址作为主机名值。套接字本身不支持DNS,因此我们必须将所有主机名解析回其IP表单才能打开连接。根据您的网络和硬件配置,内部主机名可能不可靠。

但如果您不介意,请发布完整的日志以解决此类网络问题。

答案 1 :(得分:0)

我们将Akka升级到1.2.3并开始正常运行。 我们不时会在日志中看到相同的错误,但连接不会被删除。