1

我正在用 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. 我想将收到的糕点消息路由到其他节点,如何获取收到的原始消息。对于加入消息的情况,我认为 route(Join(destId, newbie)) 将创建另一个具有不同时间戳的加入消息。

4

1 回答 1

0

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

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

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

于 2013-10-26T19:33:35.580 回答