1

scala リモート アプリケーションを実装するために、このリンクにあるサンプル コードを使用しました: https://stackoverflow.com/a/15367735/1932985

次の出力が得られます:
サーバー出力:

akka://GreetingSystem/user/joe
Server ready
joe received local msg! from Actor[akka://GreetingSystem/deadLetters]

クライアント出力:

STARTING
That 's Joe:ActorSelection[Anchor(akka://GreetingSystem-1/deadLetters), Path(/user/joe)]
Client has sent Hello to joe
[INFO] [09/16/2014 16:39:49.167] [GreetingSystem-1-akka.actor.default-dispatcher-5]   [akka://GreetingSystem-1/deadLetters] Message [java.lang.String] from Actor[akka://GreetingSystem-1/deadLetters] to Actor[akka://GreetingSystem-1/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] [09/16/2014 16:39:49.168] [GreetingSystem-1-akka.actor.default-dispatcher-5] [akka://GreetingSystem-1/deadLetters] Message [java.lang.String] from Actor[akka://GreetingSystem-1/user/$a#-555317575] to Actor[akka://GreetingSystem-1/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'.

最初にサーバー ファイルを実行し、次にクライアント ファイルを実行しました。受け取った出力は正しいですか? それとも私の実行方法が間違っていますか?私を助けてください!

ありがとう、ケシャフ

4

1 に答える 1

2

すべてが正常であることを確認するために結果 (同期) を待つ必要がある場合:

case class startMsg(id: Int)
class ActorExamp extends Actor {
    org.slf4j.LoggerFactory.getILoggerFactory.getLogger(this.getClass.getName);
    var logger = org.slf4j.LoggerFactory.getILoggerFactory.getLogger(this.getClass.getName);

  def receive = {
    case startMsg(id) => {
      val caller=sender // save the sender so you always call the right one
      logger.info("Actor is starting")
      println("Actor is starting, id: "+id)
      caller ! "OK"
  }
 }
}

呼び出し側:

implicit val timeoutActor = akka.util.Timeout(12, TimeUnit.HOURS)
object test extends App{
    implicit val timeoutActor = akka.util.Timeout(12, TimeUnit.HOURS)
    val syncActor = ActorSystem().actorOf(Props[ProcessesInf])
    val ansActor=syncActor ? startMsg(22)
    val res2= Await.result(ansActor, timeoutActor.duration).asInstanceOf[String]
    println(res2.toString)
}

非同期呼び出しを使用する場合は、アクターを初期化する必要があります。

object test extends App{
    val system = ActorSystem("akka")
    val asyncActor = system.actorOf(Props(new ProcessesInf), "ProcessesInf")
    val res1=asyncActor  ! startMsg(22)
    println(res1.toString)
}
于 2014-11-04T08:15:12.600 に答える