2015-04-22 4 views
5

Come verificare akka per quanto tempo un messaggio era in arrivo? Voglio fare un messaggio di log se il messaggio era in arrivo per troppo tempo. Qualcosa del tipo:Akka - come verificare per quanto tempo un messaggio era in arrivo?

override def receive: Receive = { 
    case Message => 
     val timeInInbox = ... 
     if (timeInInbox > treshold) log.warn("bla bla bla the doom is coming") 
+1

una soluzione può essere quella di timestamp in modo esplicito i messaggi, ad esempio: 'caso classe messaggio (ts: Long)' – kosii

+2

facciamo qualcosa di molto simile, tranne che invece di registrazione, stiamo aggiornando metriche timer per i messaggi come lunghi rimani nella casella di posta. Facciamo ciò che @kosii suggerisce e stampiamo tutti i nostri messaggi che vanno ai nostri attori con un timestamp e poi abbiamo un impl di cassetta postale personalizzato che sovrascrive 'dequeue' per vedere quanto tempo è trascorso da quando i messaggi sono stati creati e quando è stato rimosso dalla casella di posta. – cmbaxter

+0

È un grande sovraccarico se creo una casella di posta personalizzata, con overriden 'enqueue' che mette il messaggio originale in tuple' (msg, timestamp) 'e sovrascritto' dequeue' con la registrazione? – mpr

risposta

2

Sono disponibili metriche/librerie di telemetria in grado di fornire queste informazioni. Uno è kamon.io (open source), che vi dà un "tempo-in-cassetta della posta" metrica, vedere http://kamon.io/documentation/kamon-akka/0.6.6/actor-router-and-dispatcher-metrics/

un altro (non libero, chiuso source) è "Lightbend Telemetry", che lo definisce "il tempo delle cassette postali" , vedi http://developer.lightbend.com/docs/monitoring/latest/instrumentations/akka/akka.html#actor-metrics

0

Attualmente Akka non dispone di alcun elemento che faccia questo.

È possibile creare un'implementazione personalizzata della cassetta postale che registra l'ora di arrivo di ciascun messaggio su enqueue e registra la durata della coda su dequeue. Vedi "Creating your own Mailbox type" nei documenti di Akka.

Attenzione che chiamare getCurrentTimeMillis o simili non è economico, quindi è possibile che una casella di posta elettronica di questo tipo abbia un costo significativo delle prestazioni. Mi aspetto che sia per questo che Akka non offre questo fuori dagli schemi.

Problemi correlati