1

AKKA でペストリー プロトコルを実装しています。ここでは、トレイト PastryMessage と、このトレイトを具体的なメッセージ型として拡張するいくつかのケース クラスを定義しました。

trait PastryMessage{
  val timeStamp = System.currentTimeMillis()
  val destId: NodeId
}
case class Join(destId:NodeId, newbie: ActorRef) extends PastryMessage
case class RoutingTable(destId: NodeId, routingTable: Array[PastryNode]) extends PastryMessage

私の受信方法は次のようになります

def receive = {
  case Join(destId, newbie)=>route(Join(destId, newbie))//and other stuff...
//...
}

2 つの質問があります。

  1. アクターの receive メソッドで、PastryMessage の各タイプのタイムスタンプを取得するにはどうすればよいですか? どうにかして取得できる場合、すべての case 句で取得するコードを作成する必要がありますか?

  2. 受信したペストリー メッセージを他のノードにルーティングしたいのですが、受信した元のメッセージを取得するにはどうすればよいですか。Join メッセージの場合、 route(Join(destId, newbie)) は異なるタイムスタンプを持つ別の Join メッセージを作成すると思います。

4

1 に答える 1

0

1.次のように Join メッセージを照合して、ローカル変数 (つまりmsg) に割り当ててタイムスタンプを取得できます。すべてのケース クラスに対してこの種の照合を行う必要があることがわかりました。

case msg @ Join(destId, newBie) => {
     println("timeStamp "+msg.timeStamp)
}

2.メッセージを変数に割り当てることができるので、それを宛先に転送できます。ただし、このタイムスタンプを何に使用するかお尋ねしますか? 特に分散システムでは、ほとんどの場合、タイムスタンプが変化し、不正確になる可能性があります。これが役立つことを願っています。乾杯。

于 2013-10-26T19:33:35.580 に答える