J'ai lu plusieurs exemples de définition de classe d'acteurs pour construire un programme. Ce que je remarque est qu'ils utilisent tous ActorRef
comme type de paramètres. Par exemple,Pourquoi l'acteur akka utilise-t-il ActorRef comme type de paramètre plutôt que le type lui-même?
class LogProcessor(dbWriter: ActorRef)
extends Actor with ActorLogging with LogParsing {
import LogProcessor._
def receive = {
case LogFile(file) =>
val lines: Vector[DbWriter.Line] = parse(file)
lines.foreach(dbWriter ! _)
}
}
le type réel de dbWriter
est DBWriter
défini comme:
class DbWriter(databaseUrl: String) extends Actor {
val connection = new DbCon(databaseUrl)
import DbWriter._
def receive = {
case Line(time, message, messageType) =>
connection.write(Map('time -> time,
'message -> message,
'messageType -> messageType))
}
override def postStop(): Unit = {
connection.close()
}
}
l'exemple, pourquoi ne pas utiliser DbWriter
comme type de dbWriter?
Si nous utilisons ActorRef
n'importe où, le programme externe ressemble à un système de type faible.
En outre, l'acteur Akka utilise la méthode actorOf
pour créer un acteur enfant et le retour ActorRef.I aussi confondre pourquoi ne pas retourner le type réel de l'acteur?
Tout cela est expliqué dans les documents Akka: http: // doc .akka.io/docs/akka/2.4/general/actors.html – Ryan