2009-08-21 12 views
5

Sto provando a sostituire un piccolo sistema di messaggistica homegrown e sto giocando un po 'con zmq. Avrò bisogno di rilevare lettori lenti, e di avviarli/disconnetterli: i lettori lenti praticamente significano un particolare consumatore che la dimensione della coda supera una certa soglia.Rilevamento di lettori lenti con zmq (zeromq)

Finora sembra che zmq blocchi ogni utente se uno di essi è un po 'lento (abbastanza giusto), ma non riesco a trovare alcun modo per rilevare un potenziale consumatore lento. Qualcuno ha esperienza con e come questo è possibile con zmq - o ha qualche altro sistema di messaggistica senza intermediari da reccomommendare?

+0

Quindi, perché non sarebbe meglio continuare a prendere i messaggi più recenti quando viene raggiunto l'HWM e abbandonare quelli più vecchi? Almeno posso pensare a molte situazioni in cui preferirei questo comportamento. Sicuramente posso far rotolare l'effetto ma sembra un'opzione generalmente utile da avere. –

risposta

3

A partire da zeromq-2.0.7, è possibile impostare l'opzione ZMQ_HWM su un socket ZMQ_PUB per controllare il numero massimo di messaggi che possono essere messi in coda per un sottoscrittore. Una volta raggiunto il limite massimo, tutti gli altri messaggi destinati a quell'abbonato verranno eliminati fino a quando la dimensione della coda non scende sotto il limite massimo. Questo limita la quantità di memoria dedicata a quello che chiami un lettore lento.

Tuttavia, poiché la libreria ZeroMQ espone socket e non client, non è possibile identificare e disconnettere forzatamente i client indesiderati senza modificare la libreria stessa.

0

C'è una sezione nella Guida ZeroMq su questo, suggerisce di implementare un modello che chiama "Suicidal Snail Pattern".

Fondamentalmente, inverte la dipendenza e cerca di convincere gli abbonati lenti a disconnettersi/uccidersi dando loro un modo per rilevare se sono diventati lettori lenti.