Scala AKKA从receive中的扩展消息特征获取公共成员

Scala AKKA从receive中的扩展消息特征获取公共成员,scala,pattern-matching,akka,traits,Scala,Pattern Matching,Akka,Traits,我正在和AKKA执行糕点协议。在这里,我定义了一个trait PastryMessage和几个将此trait扩展为具体消息类型的case类 trait PastryMessage{ val timeStamp = System.currentTimeMillis() val destId: NodeId } case class Join(destId:NodeId, newbie: ActorRef) extends PastryMessage case class RoutingTa

我正在和AKKA执行糕点协议。在这里,我定义了一个trait PastryMessage和几个将此trait扩展为具体消息类型的case类

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...
//...
}
我有两个问题

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

我想将收到的糕点消息路由到其他节点,如何获取收到的原始消息。对于加入消息的情况,我认为RouteJointDestind,新手将创建另一个具有不同时间戳的加入消息


1.您可以按如下方式匹配Join消息,通过分配给局部变量(即msg,afaik)来获得时间戳。您必须对所有case类进行这种匹配

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

二,。由于可以将消息分配给变量,因此可以将其转发到目的地。但是我要问你用这个时间戳干什么?特别是在分布式系统中,时间戳在大多数情况下可能会变化且不准确。希望这会有所帮助。干杯。

谢谢。我从来不知道我可以将消息分配给局部变量。我使用时间戳来估计从一个节点到另一个节点的旅行时间成本,并更新邻近表。很抱歉迟了答复。