Necesito publicar mensajes de diferentes tipos para la secuencia de eventos, y esos mensajes deben tener prioridades diferentes, por ejemplo, si se han publicado 10 mensajes de tipo A, y un mensaje de tipo B se publica después de todo, y la prioridad de B es más alta que la prioridad de A - el mensaje B debe recogerse por el próximo actor incluso si hay 10 mensajes de tipo A en cola.Akka :: Uso de mensajes con diferentes prioridades sobre secuencia de eventos en ActorSystem
He leído acerca de los mensajes priorizados here y ha creado mi sencilla aplicación de ese buzón:
class PrioritizedMailbox(settings: Settings, cfg: Config) extends UnboundedPriorityMailbox(
PriorityGenerator {
case ServerPermanentlyDead => println("Priority:0"); 0
case ServerDead => println("Priority:1"); 1
case _ => println("Default priority"); 10
}
)
luego de haberla configurado en application.conf
akka {
actor {
prio-dispatcher {
type = "Dispatcher"
mailbox-type = "mailbox.PrioritizedMailbox"
}
}
}
y por cable en mi actor:
private val myActor = actors.actorOf(
Props[MyEventHandler[T]].
withRouter(RoundRobinRouter(HIVE)).
withDispatcher("akka.actor.prio-dispatcher").
withCreator(
new Creator[Actor] {
def create() = new MyEventHandler(storage)
}), name = "eventHandler")
Estoy usando ActorSystem.eventStream.publish in para enviar mensajes, y mi actor está suscrito (puedo ver en los registros que se procesan los mensajes, pero en orden FIFO).
Sin embargo, parece que no es suficiente, porque en los registros/consola nunca he visto los mensajes como "Prioridad predeterminada". ¿Me estoy perdiendo de algo? ¿El enfoque descrito funciona con secuencias de eventos o simplemente con invocaciones directas de enviando un mensaje al actor? ¿Y cómo obtengo mensajes priorizados con eventStream?