2017-10-16 107 views
0

我正在使用Akka集羣,我有一個有趣的問題。我在節點A上有一個演員Actor1(akka.tcp://[email protected]:2554)。此演員發現使用Akka集羣 - 來自死信的消息?

val actor2sel = context.actorSelection(RootActorPath(m.address)/"user"/"actor2") 

m哪裏是集羣的成員的另一節點上的另一行動者。 actor2sel是

ActorSelection[Anchor(akka.tcp://[email protected]:2553/), Path(/user/actor2)] 

後來,Actor1轉發消息Actor2,它正確地得到消息,但發件人是deadLetters:

akka.tcp://[email protected]:2554/deadLetters 

你有什麼原因可以是任何指針?

回答

1

轉發郵件纔有意義,如果至少有三個演員在消息鏈:

actor1 --[sends Messsage1]--> actor2 --[forwards Message1]--> actor3 

actor3

def receive = { 
    case Message1 => 
    sender ! Response1 
} 

sender以上是actor1基準,在上述的消息鏈。

如果只有兩個演員參與,轉發是不正確的工具:

actor1 --[forwards Message1]--> actor2 

actor2,如果在消息鏈轉發來自actor1一個Message1,沒有「以前」的演員,然後發件人將是一紙空文:

def receive = { 
    case Message1 => 
    sender ! Response1 
    // sender is dead letters if there are only two actors in the forwarding chain 
} 

如果Actor1不轉發該消息Actor2之前接收來自另一演員的消息,只是有Actor1發送(!)的消息Actor2而不是轉發它。

如果Actor1在轉發之前確實收到來自其他演員的消息,請確保此演員在Actor2訪問sender之前正在運行。