2015-02-11 3 views
0

С кластером akka можно ли запросить, какие члены находятся в кластере? Если семенной узел опускается и, в конце концов, возвращается, может ли он узнать, какие другие члены используют его в качестве семенного узла?Akka Cluster member query

ответ

2

Вы можете получить снимок нынешних членов кластера, как это:

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

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

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

Этот актер будет получать обновления членов кластера в качестве изменений состояния.

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

+0

Ну, я получил подписку на событие домена, но вот проблема. Я тестирую с помощью двух узлов A и B, причем A задается как семя. Когда A сначала воспитывается, а затем, когда появляется B, я получаю сообщение MemberUp на A, но когда A спускается с B все еще вверх, и, в конце концов, A возвращается, B не собирает сообщение MemberUp. Поэтому я подумал, что А, отмеченное как семя, может иметь отношение к этому. Разве я не понимаю здесь нечто принципиальное? – samyem