EDIT: Исключение, связанное с сериализацией/десериализацией Акка Актер остается после того, как forEach подтверждается, что выполняется. Я изучаю Акку и сталкиваюсь с этой проблемой сериализации, я совершенно новичок в Akka и считаю довольно сложно понять, как лучше всего подойти к решению.Пытается десериализовать сериализованный ActorRef без системы ActorSystem - Spark/Akka/Scala
У меня есть класс, в котором создан actorSystem и актер, этот класс вызывает метод в другом классе, я хотел бы использовать моего актера в этом другом классе. До сих пор я пытался:
Class a:
-create actor
-classB.methodX(actor)
Class b:
-methodX(actorRef)
--actorRef! message
настоящее сообщение из класса б не присылают в то время как те, класс А сделать, это заставляет меня думать, что я либо нужно создать экземпляр нового актера с ActorRef, что я Переходим, или это совершенно неправильно.
Я понимаю, что система должна присутствовать на всех узлах, но я не уверен, как это сделать.
Edit: Код Отрывки:
ClassA:
private val system = ActorSystem("System")
private val metricActor= system.actorOf(Props(new MetricActor("metrics")), name = "metrics")
metricActor ! message works fine
writeFiles(metricActor) //writeFiles is in another class
writeFiles(actor: ActorRef) {
f.forEach(v => {
actor ! message // this doesn't seem to work
})
}
Edited предоставить больше кода.
полный пример ClassB, как это было
def writeFiles(bucket: String, filesToWrite: RDD[(String, String)], actor:ActorRef): Unit =
filesToWrite.foreachPartition(f => {
f.foreach(v => {
try {
//actor ! ProcessSingleItem(MetricItem("File Created"))
logger.debug(s"Writing file:")
writeFile()
}
catch {
case e: Exception =>
//actor ! ProcessSingleItem(CloudWatchMetricItem("File create failure"))
logger.error("Error creating file", e)
}
})
})
Акка Акка - это лишь небольшие части более крупного оборудования, которое скрыто. Актерская система больше похожа на двигатель автомобиля, и ваши актеры, как говорят, похожи на ускоритель и т. Д. Как вы думаете, только ускоритель заставит вас двигаться, если пропадет вся машина? –
@SarveshKumarSingh Что вы можете предложить для решения моей нынешней дилеммы? Должен ли каждый узел иметь машину? Это кажется экстремальным. Если узел может отправить сообщение на ногу, чтобы указать, чтобы нажать на ускоритель? – null
Короткий ответ -> Независимо от того, какой узел должен вести себя как автомобиль, необходимо иметь возможности автомобиля. Просто разработайте свое решение, чтобы только узлы автомобильного типа должны были вести себя как автомобили. Другие узлы могут оставаться легкими. –