如何在Akka Cluster Singleton Pattern中订阅成为LEADER的事件

时间:2014-07-29 06:39:11

标签: akka akka-cluster

作为Akka Singleton集群的实例成员,如何在Akka Cluster Singleton Pattern中订阅成为LEADER的事件。

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://PashRegister@127.0.0.1:2051",
    "akka.tcp://PashRegister@127.0.0.1:2052"]

  auto-down-unreachable-after = 5s

  roles = ["registers"]
}
}

2 个答案:

答案 0 :(得分:4)

群集单例的想法是它将代表你开始 - 所以当这样的演员开始时它是"领导者" (如"运行单身")。

答案 1 :(得分:0)

如果领导者改变时要通知问题(比如说第一个开始的单身人士被击倒的话),那么我发现知道谁是领导者的唯一方法就是做以下事情:

  • 让演员订阅所有MemberEvents
  • 每当发生MemberUp或MemberRemoved事件时:
    • 更新单身人士角色成员的排序列表(按Member.ageOrdering排序)
    • 此列表的第一个元素是当前的领导者

基本上我正在重新实施选择新领导者的逻辑。 希望有所帮助。