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

Compose more than one receive function in Akka Actors

我有一个 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... */
  }
}

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

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

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

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

非常感谢。

Receive 只是 PartialFunction[Any, Unit] 的类型别名,所以你可以在任何地方定义这样的别名,然后使用 f1 orElse f2:

组合它们
val manageQueries: Receive = { case ... }
val manageUpserts: Receive = { case ... }

def receive = manageQueries.orElse(manageUpserts) 

希望对您有所帮助