"Dead Letters aufgetreten" Fehlermeldung während der Ausführung von AKKA remote-Akteure
Ich versuche, remote-Akteure mit AKKA, auf meinem localhost, aber jedes mal bekomme ich diesen Fehler. Es sagt Toten Briefe gefunden. Ich suchte im internet und fand heraus, dass dieser Fehler kommt, wenn die Akteure erhalten eine Nachricht, nachdem der thread beendet ist. Also ich bin auf der Suche nach einem Weg, um die Akteure lebendig, die auf remote-Maschinen. Ich bin mit akka Akteure und nicht der scala-Akteure.
[INFO] [09/16/2013 18:44:51.426] [run-main] [Remoting] Starting remoting
[INFO] [09/16/2013 18:44:51.688] [run-main] [Remoting] Remoting started; listening on addresses :[akka.tcp://actorSystem1@localhost:2209]
[INFO] [09/16/2013 18:44:51.759] [actorSystem2-akka.actor.default-dispatcher-5] [akka://actorSystem2/deadLetters] Message [java.lang.String] from
Actor[akka://actorSystem2/deadLetters] to Actor[akka://actorSystem2/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'.
Folgende code ist der code.
import akka.actor.{Actor, Props, ActorSystem}
import com.typesafe.config.ConfigFactory
import akka.remote._
object MyApp extends App {
val actorSystem1 = ActorSystem("actorSystem1", ConfigFactory.parseString("""
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = ["akka.remote.netty.tcp"]
netty.tcp {
hostname = "localhost"
port = 2209
}
}
}
"""))
val actorSystem2 = ActorSystem("actorSystem2")
actorSystem1.actorOf(Props(new Actor {
def receive = {
case x: String =>
Thread.sleep(1000)
println("RECEIVED MESSAGE: " + x)
} }), "simplisticActor")
val remoteActor = actorSystem2.actorFor("akka://actorSystem1@localhost:2209/user/simplisticActor")
remoteActor ! "TEST 1"
remoteActor ! "TEST 2"
Thread.sleep(1000)
actorSystem1.shutdown()
actorSystem2.shutdown()
}
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, ich sehe ein paar Probleme mit dem code, der möglicherweise führt zu deadletters. Erstens, wenn Ihre Absicht ist, Suche ein Schauspieler auf einem remote-system aus
actorSystem2
inactorSystem1
, dann werden Sie noch einrichten müssen remoting-Eigenschaften füractorSystem1
, die meisten speziell, die Sie benötigen, um sicherzustellen, dass es mit derRemoteActorRefProvider
. Wenn Sie dies nicht tun, system 2 wird nicht in der Lage sein, zum nachschlagen einer remote-Schauspieler in system 1. Sobald Sie diese änderung vornehmen, würde ich auch ändern Sie Ihre remote-Schauspieler-lookup aus:zu:
Den
actorFor
Methode ist veraltet und ich denke auch, daß Sie Links aus der.tcp
Teil derakka
Protokoll für die Suche des remote-Schauspieler.Diese änderungen vornehmen und dann sehen, ob die Dinge für Sie arbeiten.
akka.actor.provider
config fürakka.remote.RemoteActorRefProvider
. Es wurde behoben, Dank dieser Antwort.