2013-01-02 2 views
5

Mi chiedo se ci sia un modo per ritardare l'elaborazione di un messaggio akka?Akka: aggiunta di un ritardo a una cassetta postale duratura

Il mio caso d'uso: Per ogni richiesta che ho, ho una piccola quantità di lavoro che devo fare e quindi ho bisogno di un lavoro aggiuntivo due ore più tardi.

C'è un modo semplice per ritardare l'elaborazione di un messaggio in AKKA? So che probabilmente posso impostare una coda distribuita esterna come ActiveMQ, RabbitMQ che probabilmente ha questa funzione, ma io preferisco non farlo.

So che avrei bisogno di rendere la cassetta postale durevole in modo che possa sopravvivere a riavvii o arresti anomali. Abbiamo già l'installazione di mongo, quindi probabilmente userò lo MongoBasedMailbox per la durata.

risposta

0

Non è l'ideale, ma lo Akka Camel Quartz scheduler farebbe il trucco. Più pesante rispetto allo schedulatore incorporato ActorSystem, ma sappiamo che Quartz ha i suoi problemi.

+1

È possibile fornire qualsiasi preventivo o collegamento sulla durabilità del quarzo? Se non ci sono tali garanzie, perché non usare [pianificatore semplice] (http://doc.akka.io/docs/akka/snapshot/scala/scheduler.html)? –

+0

Concordato, se il risultato di "piccole quantità di lavoro" deve sopravvivere ai riavvii, in qualche modo si salva lo stato durante 'preRestart'. La durata è per gli arresti anomali. – idonnie

+1

@ om-nom-nom - Quartz ha una [funzione lavoro persistente] (http://quartz-scheduler.org/overview/features). – jamie

0

si può ancora usare il normale schedulatore di Akka, si dovrà solo mantenere uno stato sulla persistenza dell'attore per evitare di perdere il lavoro se il server viene riavviato.

Recentemente ho usato PersistentFsmActor - che manterrà lo stato dell'attore persisteva

Non sono sicuro nel tuo caso è necessario utilizzare FSM (Finite State Machine), così si potrebbe fondamentalmente solo usare un persistentActor per salvare il tempo in cui il lavoro è stato inserito e avviare un programma di pianificazione fino a quel momento. in questo modo, anche se si riavvia il server, l'attore verrà avviato e verrà creato un nuovo processo pianificato utilizzare i dati permanenti per calcolare il tempo rimanente per eseguirlo.

+0

e puoi anche utilizzare https://github.com/ironfish/akka-persistence-mongo – Elyran