Запрос члена кластера Akka

Можно ли с кластером akka запросить, какие члены в данный момент находятся в кластере? Если начальный узел выходит из строя и в конечном итоге снова поднимается, может ли он узнать, какие другие члены используют его в качестве начального узла?


person samyem    schedule 11.02.2015    source источник


Ответы (1)


Вы можете получить моментальный снимок текущих членов кластера следующим образом:

val system = ActorSystem(...) // whatever
val members = Cluster(system).state.members

Но это может быть устаревшим. Если вам нужно отслеживать членство в кластере, вы должны подписаться на события кластера.

val monitor = system.actorOf(Props[MyClusterMonitor])
Cluster(system).subscribe(monitor, classOf[ClusterEvent.ClusterDomainEvent])

Затем этот субъект будет получать обновления о членах кластера по мере изменения их состояния.

Начальные узлы не имеют никаких особых качеств, кроме того, что они указаны в качестве семян другими членами кластера. Как только участник использовал начальное число для присоединения, у него больше нет никаких особых отношений, он просто является членом одного и того же кластера. Узел может только узнать, какие узлы он считает семенами (хотя вы можете написать свой собственный код для перемещения этих данных по кластеру, лично я не могу придумать вариант использования для этого).

person Ryan    schedule 12.02.2015
comment
Ну, я получил подписку на событие домена, но вот проблема. Я тестирую с двумя узлами A и B, с A, установленным в качестве семени. Когда сначала поднимается A, а затем когда появляется B, я получаю сообщение MemberUp на A, но когда A отключается, а B все еще активен, и, в конце концов, A возвращается обратно, B не принимает сообщение MemberUp. Поэтому я подумал, что A, отмеченный как семя, может быть связан с этим. Я что-то принципиального здесь не понимаю? - person samyem; 12.02.2015