Три решения к вашему сведению.
1) Вы можете позволить nodeB отправлять одно сообщение на nodeA каждый раз, когда он запускается, используя actorSelection
. Тогда узел A может знать начало узла B.
2) Установите event listener
на узле A.
object ClusterDomainEventListener {
def props = Props[ClusterDomainEventListener]
val name = "clusterDomainEventListener"
}
class ClusterDomainEventListener extends Actor {
Cluster(context.system).subscribe(self, classOf[ClusterDomainEvent])
def receive = {
case MemberUp(m) =>
println(m.address)
}
}
узел А:
system.actorOf(ClusterDomainEventListener.props, ClusterDomainEventListener.name)
Затем, каждый раз, когда запускается узел B, узел A будет получать событие MemberUp
, вывод println будет: akka.tcp://YourActorSystemName@10.192.225.19:2551
, вы наверняка знаете, что узел B, например, работает на 10.192.225.18:2559
, поэтому вы можете знать, что B работает. Это немного сложное кодирование.
3) Если вы можете установить роль для файла конфигурации akka nodeB:
cluster {
roles = ["nodeB"]
seed-nodes = [
"akka.tcp://YourActorSystemName@10.192.225.18:2551"
]
}
тогда вы можете повторно использовать метод 2, но в case MemberUp(m)
вы можете просто использовать if (m.hasRole("nodeB"))
, чтобы знать, что В работает, и делать следующие вещи, которые вы хотите.