Как подписаться на событие становления ЛИДЕРОМ в Akka Cluster Singleton Pattern

В качестве члена экземпляра кластера Akka Singleton, как подписаться на событие становления LEADER в шаблоне Akka Cluster Singleton.

application.conf следующим образом:

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://[email protected]:2051",
    "akka.tcp://[email protected]:2052"]

  auto-down-unreachable-after = 5s

  roles = ["registers"]
}
}

person Yanjiong Wang    schedule 29.07.2014    source источник


Ответы (2)


Идея синглтона кластера заключается в том, что он будет запущен от вашего имени, поэтому, когда такой актор запускается, он является «лидером» (как в «запуске синглтона»).

person Konrad 'ktoso' Malawski    schedule 29.07.2014

Если вопрос должен быть уведомлен при смене лидера (скажем, когда первый запущенный синглтон был отключен), то единственный способ узнать, кто является лидером, - это сделать следующее:

  • Иметь актера, подписывающегося на все MemberEvents
  • Whenever a MemberUp or MemberRemoved event happens:
    • update a sorted list of members of the role the singleton has (order by Member.ageOrdering)
    • первый элемент этого списка - текущий лидер

По сути, я заново реализую логику выбора нового лидера. Надеюсь, это поможет.

person CanardMoussant    schedule 24.11.2016