Используя akka (.net), я пытаюсь реализовать простой вариант использования кластера.
- Кластер - для событий подъема / опускания узлов.
- Удаленный - для отправки сообщения определенному узлу.
Есть два участника: главный узел, который прослушивает события кластера, и подчиненный узел, который подключается к кластеру.
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 @ slave: 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
}}
}