2017-09-05 7 views
1

私は、Find,Queryのようないくつかのメッセージを管理し、他のタイプのアクターに新しいメッセージを転送するAkkaアクターを持っています。これらの俳優は新しいタイプのメッセージで応答します。上記の例でAkkaアクターで複数の受信機能を作成する

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のメッセージの順方向の応答メッセージです。 UpsertNAckおよびUpsertAckは、Upsertメッセージに対する可能な応答です。

caseの2つのセットを2つの専用メソッド、つまりmanageQueriesmanageUpsertsにグループ化して、次のコードに類似したものを取得したいと思います。

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

が可能ですか? Receiveオブジェクトを返す複数のメソッドを宣言して何らかの方法でそれらを作成する必要がありますか?

ありがとうございます。

答えて

4

ReceivePartialFunction[Any, Unit]のためだけのタイプの別名であるので、あなたはどこでも、このような定義やf1 orElse f2を使用して、それらを組み合わせることができます。

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

def receive = manageQueries.orElse(manageUpserts) 

ホープこれは、応答のための

+0

感謝を助けます。私が質問に記載したアプローチや[this]で公開されているアプローチがより良いと思いますか(https://stackoverflow.com/questions/8681444/composing-trait-behavior-in-scala-in-an-akka-受信方法?rq = 1) –

+1

これは他のプロジェクトよりも優れています(プロジェクトのメンテナーとして) –

関連する問題