2017-12-27 8 views
0

私はリモートのアクタアクタをプログラムで作成しています。以下はリモートアクタをプログラムで作成すると動作しない

プログラムである -

package remoting.programatic.demo 

import akka.actor.{ActorSystem, Props} 
import com.typesafe.config.ConfigFactory 
import remoting.config.demo.RemoteActor 

object RemoteActorApp extends App { 

    val system = ActorSystem("RemoteNodeApp", ConfigFactory.load().getConfig("RemoteProgrammatically")) 
    val remoteActor = system.actorOf(Props[RemoteActor], name = "remoteActorAddr") 

    remoteActor ! "Hello!" 

    val actorSelection = system.actorSelection("akka.tcp://[email protected]:2553/user/remoteActorAddr") 
    Thread.sleep(4000L) 

    actorSelection ! "Hello!" 

} 

設定がある -

RemoteProgrammatically { 
    akka { 
    actor { 
     provider = "akka.remote.RemoteActorRefProvider" 
     deployment { 
     /remoteActorAddr { 
      remote = "akka.tcp://[email protected]:2553" 
     } 
     } 
    } 
    remote { 
     enabled-transports = ["akka.remote.netty.tcp"] 
     netty.tcp { 
     hostname = "localhost" 
     port = 2553 
     } 
    } 
    } 
} 

プログラムを実行した後に出力されている -

[INFO] [12/27/2017 10:37:30.053] [main] [akka.remote.Remoting] Starting remoting 
[INFO] [12/27/2017 10:37:30.378] [main] [akka.remote.Remoting] Remoting started; listening on addresses :[akka.tcp://[email protected]:2553] 
[INFO] [12/27/2017 10:37:30.379] [main] [akka.remote.Remoting] Remoting now listens on addresses: [akka.tcp://[email protected]:2553] 
[INFO] [12/27/2017 10:37:30.418] [RemoteNodeApp-akka.actor.default-dispatcher-14] [akka://RemoteNodeApp/deadLetters] Message [java.lang.String] from Actor[akka://RemoteNodeApp/user/remoteActorAddr#-766312407] to Actor[akka://RemoteNodeApp/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
[INFO] [12/27/2017 10:37:34.419] [RemoteNodeApp-akka.actor.default-dispatcher-14] [akka://RemoteNodeApp/deadLetters] Message [java.lang.String] from Actor[akka://RemoteNodeApp/user/remoteActorAddr#-766312407] to Actor[akka://RemoteNodeApp/deadLetters] was not delivered. [2] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

私は役者に送信されたメッセージが常にあります死んだ手紙に入る。 remoteActorAddrがRemoteNodeAppアクターシステムで正常に作成されていないようです。 俳優が作成されず、メッセージが常にデッドレターに入る理由についてのアイデア。おかげさまで

答えて

1
Message [java.lang.String] from Actor[akka://RemoteNodeApp/user/remoteActorAddr#-766312407] to Actor[akka://RemoteNodeApp/deadLetters] was not delivered. [1] dead letters encountered. 

あなたのログから上記の抜粋はからリモート俳優を文字列メッセージを送信するときに死んだ手紙のメールボックスが検出されたと言っています。リモートアクタは、明らかに、sender()にメッセージを送信しています。これは、リモートアクタが受信したメッセージが、アクタの外部からtell!)で送信されたため、この場合はデッドレターです。言い換えれば、遠隔俳優は正常に作成ですが、次の二つのメッセージが死んだ文字に解決するために、リモートの俳優でsender()の原因となる非俳優、から送信されますから、

remoteActor ! "Hello!" 
... 
actorSelection ! "Hello!" 

documentation(強調鉱山):俳優の中から呼び出された場合

actorRef ! message 

、次に送信アクター参照が暗黙メッセージとともに渡されますd sender(): ActorRefメンバーメソッドで受信側の俳優が利用できる。ターゲットアクターはこれを使用して、元の送信者にsender() ! replyMsgを使用して返信することができます。

アクタでないインスタンスから呼び出された場合、送信者はデフォルトでdeadLettersアクター参照になります。

別のアクターからメッセージを送信し、または(応答を処理するための内部アクタを作成)askパターンを使用します。

関連する問題