framework scala playframework akka

scala - framework - Akka-reenviando el mensaje de "ruptura"



akka microservices (1)

Ya recibió el mensaje de error en PreRestart (ver: mensaje: Opción [Cualquiera]), por lo que no es necesario que lo guarde. Y sí, está perfectamente bien volver a enviarlo a ti mismo, pero ten cuidado con los reinicios infinitos en combinación con esto, ya que lo más probable es que termines con un mensaje que nunca se descartará.

En los documentos oficiales de akka 2.0.4 dice:

Un reinicio de actor reemplaza solo el objeto de actor real; El contenido del buzón no se ve afectado por el reinicio, por lo que el procesamiento de los mensajes se reanudará después de que vuelva el enlace post-reinicio. El mensaje que activó la excepción no se volverá a recibir. Cualquier mensaje enviado a un actor mientras se reinicia se pondrá en cola en su buzón como de costumbre.

Digamos que tengo un mensaje que hizo que mi actor se reiniciara. Ya no está en el buzón, por lo que no será procesado por el actor que ocupará su lugar. Si quiero que el actor procese este mensaje (suponiendo que la orden no importa en ese caso), ¿sería una mala idea que el actor se envíe el mensaje al reiniciarse?

Algún código (pseudo) para mostrar lo que quiero decir:

class ResendingActor extends Actor { var curMessage: Option[MyMessage] = None def receive = { case MyMessage(x) => { curMessage = Some(MyMessage(x)) /* processing */ curMessage = None } } override def preRestart(reason: Throwable, message: Option[Any]) { curMessage match { case Some(x) => self ! x case None => ; } } }

De esta manera, el mensaje que no fue procesado por el actor antes de que se reinicie se empuja hasta el final de la cola para el nuevo actor.

Entonces mi pregunta es: ¿Hay alguna razón por la que no debería estar haciendo esto?

Lo único en lo que puedo pensar es que si el mensaje está mal formado por alguna razón, nunca abandonará el sistema y hará que el actor se reinicie con regularidad ...