Como inscrever-se no evento de se tornar LÍDER no padrão Akka Cluster Singleton
-
20-12-2019 - |
Pergunta
Como membro da instância do cluster Akka Singleton, como assinar o evento de se tornar LEADER no Akka Cluster Singleton Pattern.
application.conf como segue:
akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
deployment {
/singleton/registerService/workerRouter {
router = consistent-hashing-pool
nr-of-instances = 100
cluster {
enabled = on
max-nr-of-instances-per-node = 3
allow-local-routees = on
use-role = registers
}
}
}
}
remote {
log-remote-lifecycle-events = off
netty.tcp {
hostname = "127.0.0.1"
port = 0
}
}
cluster {
seed-nodes = [
"akka.tcp://PashRegister@127.0.0.1:2051",
"akka.tcp://PashRegister@127.0.0.1:2052"]
auto-down-unreachable-after = 5s
roles = ["registers"]
}
}
Solução
A idéia do cluster singleton é que ele seja iniciado em seu nome - portanto, quando esse ator iniciar, ele será o "líder" (como em "executando o singleton").
Outras dicas
Se a questão for notificada quando o líder mudar (digamos, quando o primeiro singleton iniciado for desativado), a única maneira que encontrei de saber quem é o líder é fazer o seguinte:
- Tenha um ator assinando todos os MemberEvents
- Sempre que um evento MemberUp ou MemberRemoved acontece:
- atualizar uma lista classificada de membros da função que o singleton possui (ordenar por Member.ageOrdering)
- o primeiro elemento desta lista é o atual líder
Basicamente, estou reimplementando a lógica por trás da escolha do novo líder.Espero que ajude.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow