【发布时间】:2017-09-05 10:18:16
【问题描述】:
我有一个 Akka Actor,它管理一些消息,例如 Find、Query,它们将新消息转发给其他类型的 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类型消息的转发的响应消息。 UpsertNAck 和 UpsertAck 是对 Upsert 消息的可能响应。
为了使代码更具可读性和可维护性,我希望将这两组cases 分组为两个专用方法,即manageQueries 和manageUpserts,得到类似于以下代码的内容。
class Actorbase extends Actor {
override def receive = {
manageQueries.andThen(manageUpserts)
}
}
有可能吗?我是否需要声明多个返回 Receive 对象的方法,然后以某种方式组合它们?
非常感谢。
【问题讨论】:
标签: scala akka reactive-programming composition