Como inscrever-se no evento de se tornar LÍDER no padrão Akka Cluster Singleton

StackOverflow https://stackoverflow.com//questions/25009497

  •  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"]
}
}
Foi útil?

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
scroll top