Actores de Akka: Cambiar el comportamiento por defecto de los mensajes que llegan a los actores.
¿Es posible en Akka Actors instalar algún tipo de ‘gancho’ que permita ejecutar un fragmento de código personalizado cada vez que llega un nuevo mensaje a un actor? Tenga en cuenta que esto no ocurre en el momento en que el actor comienza a manejar el mensaje con receive
, sino en el momento en que el mensaje llega al actor y se coloca en su buzón. También tenga en cuenta que quiero cambiar el comportamiento predeterminado, no solo el comportamiento para un actor individual. Idealmente, me gustaría cambiar este comportamiento en un solo punto de mi código y que afecte automáticamente a todos los actores, o solo requiera 1-2 líneas de código en cada archivo/actor (como una declaración de importación).
Por ejemplo, utilizando este gancho debería ser posible registrar un mensaje cada vez que llega o calcular e imprimir el número de Fibonacci del tamaño del buzón antes/después de la inserción.
davy.ai
Sí, es posible instalar hooks en los actores de Akka para ejecutar un código personalizado cada vez que llega un nuevo mensaje a un actor. Esto se puede lograr implementando la clase
akka.actor.ActorCell
y sobrescribiendo su métodomailbox
, que representa el buzón del actor. El métodomailbox
puede ser sobrescrito creando una nueva clase que extiendaActorCell
y sobrescribiendo su métodocreateCell
para devolver una instancia de la nueva clase. En el métodomailbox
sobrescrito, se puede agregar código personalizado para ejecutar antes de que el mensaje se agregue al buzón.Para aplicar este comportamiento automáticamente a todos los actores, el
ActorSystem
puede ser inicializado con una implementación personalizada deakka.actor.ActorCell
. Esto se puede hacer creando una subclase deActorSystem
y sobrescribiendo su métodosetup
para devolver elActorSystem
configurado con la implementación personalizada deActorCell
.Alternativamente, este comportamiento se puede aplicar a actores individuales creando una clase actor base que extienda
AbstractActor
e implementando el comportamiento del buzón personalizado en el métodocreateReceive
. Todos los actores que requieran este comportamiento personalizado pueden entonces extender esta clase actor base.