gpt4 book ai didi

scala - 在 Akka Actors 中编写多个接收函数

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

我有一个 Akka Actor 来管理一些消息,例如 FindQuery,它们将新消息转发给其他类型的 Actor。这些参与者将用新类型的消息进行响应。

class Actorbase extends Actor {
override def receive = {
/* The two message below are related to each other */
case Find(coll, id) => // Do something
case QueryAck(key, value, u) => // Do something
/* The three message below are related to each other */
case Upsert(collection, id, value) => // Do something
case Response.UpsertNAck(key, msg, u) => // Do something
case Response.UpsertAck(key, u) => // Do something
/* And so on... */
}
}

在上面的例子中,QueryAck是转发Find类型消息的响应消息。 UpsertNAckUpsertAck 是对 Upsert 消息的可能响应。

为了使代码更具可读性和可维护性,我希望将两组 case 分组到两个专用方法中,即 manageQueriesmanageUpserts,获得类似于以下代码的内容。

class Actorbase extends Actor {
override def receive = {
manageQueries.andThen(manageUpserts)
}
}

有可能吗?我是否需要声明多个返回 Receive 对象的方法,然后以某种方式组合它们?

非常感谢。

最佳答案

Receive 只是 PartialFunction[Any, Unit] 的类型别名,因此您可以在任何地方定义此类并使用 f1 或 Else f2< 组合它们:

val manageQueries: Receive = { case ... }
val manageUpserts: Receive = { case ... }

def receive = manageQueries.orElse(manageUpserts)

希望这有帮助

关于scala - 在 Akka Actors 中编写多个接收函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46052549/

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