带有远程节点的Akka(.net)群集:解除关联的异常
使用akka(.net),我试图实现简单的集群用例带有远程节点的Akka(.net)群集:解除关联的异常,akka,akka-cluster,akka.net,Akka,Akka Cluster,Akka.net,使用akka(.net),我试图实现简单的集群用例 群集-用于节点向上/向下事件 远程-用于向特定节点发送消息 有两个参与者:侦听集群事件的主节点和连接到集群的从属节点 Address address = new Address("akka.tcp", "ClusterSystem", "master", 8080); cluster.Join(address); 当ClusterEvent.MemberUp消息被重新分配给创建参与者链接的主节点时: ClusterEvent.MemberUp
Address address = new Address("akka.tcp", "ClusterSystem", "master", 8080);
cluster.Join(address);
当ClusterEvent.MemberUp消息被重新分配给创建参与者链接的主节点时:
ClusterEvent.MemberUp up = message as ClusterEvent.MemberUp;
ActorSelection nodeActor = system.ActorSelection(up.Member.Address + "/user/slave_0");
向此参与者发送消息会导致错误:
与远程系统akka的关联。tcp://ClusterSystem@从机:8090失败;地址现在为5000毫秒。原因是:[解除关联]
主配置:
akka {
actor {
provider = ""Akka.Cluster.ClusterActorRefProvider, Akka.Cluster""
}
remote {
helios.tcp {
port = 8080
hostname = master
bind-hostname = master
bind-port = 8080
send-buffer-size = 512000b
receive-buffer-size = 512000b
maximum-frame-size = 1024000b
tcp-keepalive = on
}
}
cluster{
failure-detector {
heartbeat - interval = 10 s
}
auto-down-unreachable-after = 10s
gossip-interval = 5s
}
stdout-loglevel = DEBUG
loglevel = DEBUG
debug {{
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}}
}
从配置:
akka {
actor {
provider = ""Akka.Cluster.ClusterActorRefProvider, Akka.Cluster""
}
remote {
helios.tcp {
port = 8090
hostname = slave
bind-hostname = slave
bind-port = 8090
send-buffer-size = 512000b
receive-buffer-size = 512000b
maximum-frame-size = 1024000b
tcp-keepalive = on
}
}
cluster{
failure-detector {
heartbeat - interval = 10 s
}
auto-down-unreachable-after = 10s
gossip-interval = 5s
}
stdout-loglevel = DEBUG
loglevel = DEBUG
debug {{
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}}
}
这是你的问题:
cluster{
failure-detector {
heartbeat - interval = 10 s
}
auto-down-unreachable-after = 10s
gossip-interval = 5s
}
心跳间隔和自动关闭在相同的持续时间后不可到达-因此您的节点几乎总是在10秒后自动解除关联,因为您打赌失败检测器可能会失败的竞争条件
自动下降后无法达到是一个危险的设置-不要使用它。你最终会导致大脑分裂或更糟
并确保您的故障检测间隔始终低于自动停机间隔。那么您是否可以互换使用Akka.Cluster和Akka.Remote?例如,使用Remote连接到不属于群集的节点?不,所有节点都属于群集。我需要集群中每个节点的RPC方式。是否有其他方法将消息发送到集群的特定节点而不是actorRef.Tell()?