gpt4 book ai didi

scala-如何订阅akka leader up事件

转载 作者:行者123 更新时间:2023-12-02 08:37:55 27 4
gpt4 key购买 nike

我正在玩 akka。我希望在新领导上任时只做一次

I am going to find something like ,换句话说,我正在寻找这样的东西。

class LeaderUpHook {   
def onLeaderUp {
log.log("a new leader is up")
}
}

我查了聚类文档,还是不知道怎么办

最佳答案

您应该能够使用集群事件来解决这个问题。我的代码示例基于文档的 Subscribe to Cluster Events 部分下的文档 here .所以简而言之,您基本上创建了一个订阅相关集群事件的参与者,以确定领导者是谁以及领导者何时启动。那个 Actor 可能看起来像这样:

import akka.actor._
import akka.cluster._

class LeaderUpHandler extends Actor{
import ClusterEvent._

val cluster = Cluster(context.system)
cluster.subscribe(self, classOf[MemberUp])
cluster.subscribe(self, classOf[LeaderChanged])
var leader:Option[Address] = None

def receive = {
case state:CurrentClusterState =>
println(s"Got current state: $state")

case MemberUp(member) =>
println(s"member up: $member")
leader.filter(_ == member.address) foreach{ address =>
println("leader is now up...")
}

case LeaderChanged(address) =>
println(s"leader changed: $address")
leader = address
}
}

然后要测试此代码,您可以执行以下操作:

val cfg = """
akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
remote {
netty.tcp {
hostname = "127.0.0.1"
port = 2552
}
}
cluster {
seed-nodes = [
"akka.tcp://clustertest@127.0.0.1:2552"
]
auto-down = on
}
}

"""
val config = ConfigFactory.parseString(cfg).withFallback(ConfigFactory.load)
val system = ActorSystem("clustertest", config)
system.actorOf(Props[LeaderUpHandler])

当您运行上面的代码时,您应该会看到领导者确定要启动。这是一个过于简单的例子;我只是想说明您可以使用集群事件来查找您要查找的内容。

关于scala-如何订阅akka leader up事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com