AKKA从接收的扩展消息特征中获得普通成员

时间:2013-10-26 13:19:53

标签: scala pattern-matching akka traits

我正在用AKKA实现Pastry协议。在这里,我定义了一个特征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...
//...
}

我有两个问题。

  1. 在我的actor的receive方法中,如何获取每种PastryMessage的时间戳?如果我能以某种方式得到它,我是否必须编写代码才能在每个case子句中得到它?

  2. 我想将收到的糕点消息路由到其他节点,如何获取收到的原始消息。对于Join消息的情况,我认为route(Join(destId,newbie))将创建另一个具有不同时间戳的Join消息。

1 个答案:

答案 0 :(得分:0)

1.您可以按如下方式匹配Join消息,以通过分配局部变量(即msg)来获取时间戳,但是您必须为所有案例类进行此类匹配。

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

2。由于您可以将消息分配给变量,因此可以将消息转发到目的地。但是我应该问你使用这个时间戳的是什么?特别是在分布式系统中,时间戳可以在大多数时间变化和不准确。希望这会有所帮助。欢呼声。