Scala Remote Actor Пример - Eclipse
Я использовал приведенный в этой ссылке пример кода для реализации удаленного приложения scala: /questions/36616610/primer-minimalnogo-udalennogo-aktera-akka-21/36616621#36616621
Я получаю следующий вывод:
Выход сервера:
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'.
Сначала я запустил файл сервера, а затем файл клиента. Правильно ли получен вывод? Или я так расстроился? Пожалуйста, помогите мне!
Спасибо кешав
1 ответ
Решение
Если вам нужно дождаться результатов (синхронизировать), чтобы убедиться, что все в порядке:
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)
}