2017-10-16 4 views
0

私はAkka Clusterを使用しています。興味深い問題があります。私はノードA(akka.tcp://[email protected]:2554)に1人の俳優Actor1を持っています。このアクターはmがクラスタのメンバであるAkka Cluster - デッドレターからのメッセージ?

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

を使用して別のノードに別の俳優を発見します。 actor2selはActor1が正しくメッセージを取得ACTOR2へのメッセージを、転送し、その後

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

ですが、送信者がdeadLettersです:

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

あなたは、原因が何であるか上の任意のポインタを持っていますか?

答えて

1

メッセージ転送チェーンにおける少なくとも三つのアクターが存在する場合、メッセージにのみ意味が:actor3

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

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

senderは、上記の、actor1への参照でありますメッセージチェーン。

関与のみ2人の俳優がある場合は、転送が適切なツールではありません。actor2

actor1 --[forwards Message1]--> 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にメッセージを(!)を送信していそれを転送する代わりに。

アクター1が別のアクターから転送される前にメッセージを受け取った場合、アクター2がsenderにアクセスする前に、この「前の」アクターが実行されていることを確認してください。

関連する問題