2011-08-30 14 views
11

Sto cercando di creare una coda di lavoro infinita usando redis e ruby ​​eventmachine. Per ottenere ciò, io sto usando il comando redis BLPOP con 0 timeout. Dopo il successo con BLPOP, lo eseguo di nuovo.Coda lavori con redis con BLPOP

Sono sulla strada giusta o c'è un modo migliore per creare la coda dei lavori con redis?

+0

Ci sono diversi articoli/risorse per quanto riguarda questo scenario, ecco uno: - [Redis code : An Emerging Usecase] (http://nosql.mypopescu.com/post/426360602/redis-queues-an-emerging-usecase) – yojimbo87

risposta

6

Se si utilizza BLPOP da solo per rimuovere un messaggio dalla coda e l'utente del messaggio non riesce a elaborarlo, il messaggio dovrà essere nuovamente accodato, per evitare che scompaia per sempre insieme al consumatore non riuscito.

Per un'elaborazione più duratura dei messaggi, è necessario mantenere un elenco di messaggi elaborati in modo che possano essere reinseriti in coda in caso di errore.

[B] RPOPLPUSH è perfetto per questo scenario; può atomicamente far scoppiare un messaggio dalla coda dei messaggi e inserirlo in una coda di elaborazione in modo che l'applicazione possa rispondere in caso di errore alla fine del consumatore.

http://redis.io/commands/rpoplpush

reale ri-messa in coda è lasciata alla domanda, ma questo comando Redis fornisce le basi per farlo.

Ci sono anche alcune implementazioni drop-in-place di code utilizzando Redis galleggianti intorno al web, come RestMQ [http://www.restmq.com/]

Problemi correlati