我正在用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...
//...
}
我有两个问题。
在我的actor的receive方法中,如何获取每种PastryMessage的时间戳?如果我能以某种方式得到它,我是否必须编写代码才能在每个case子句中得到它?
我想将收到的糕点消息路由到其他节点,如何获取收到的原始消息。对于Join消息的情况,我认为route(Join(destId,newbie))将创建另一个具有不同时间戳的Join消息。
答案 0 :(得分:0)
1.您可以按如下方式匹配Join消息,以通过分配局部变量(即msg
)来获取时间戳,但是您必须为所有案例类进行此类匹配。
case msg @ Join(destId, newBie) => {
println("timeStamp "+msg.timeStamp)
}
2。由于您可以将消息分配给变量,因此可以将消息转发到目的地。但是我应该问你使用这个时间戳的是什么?特别是在分布式系统中,时间戳可以在大多数时间变化和不准确。希望这会有所帮助。欢呼声。