2009-08-21 13 views
5

Estoy tratando de reemplazar un pequeño sistema de mensajería local, y estoy jugando un poco con zmq. Voy a necesitar detectar lectores lentos y arrancarlos/desconectarlos: lentos lectores, lo que significa un consumidor particular cuyo tamaño de cola está por encima de un cierto umbral.Detectando lectores lentos con zmq (zeromq)

Hasta ahora, parece que zmq bloquea a todos los consumidores si uno de ellos es un poco lento (justo), pero No encuentro ninguna forma de detectar un posible consumidor lento. ¿Alguien tiene alguna experiencia con si es así y cómo esto es posible con zmq, o tiene algún otro sistema de mensajería sin intermediario para recomendar?

+0

Entonces, ¿por qué no sería mejor continuar tomando los mensajes más recientes cuando se alcanza el HWM y soltar los anteriores? Al menos puedo pensar en muchas situaciones en las que preferiría este comportamiento. Ciertamente, puedo aplicar el efecto yo mismo, pero parece ser una opción generalmente útil. –

Respuesta

3

A partir de zeromq-2.0.7, puede establecer la opción ZMQ_HWM en un socket para controlar la cantidad máxima de mensajes que pueden ponerse en cola para un suscriptor. Una vez que se ha alcanzado la marca de marea alta, todos los mensajes adicionales destinados a ese suscriptor se eliminarán hasta que el tamaño de la cola vuelva a caer por debajo de la marca de marea alta. Esto limita la cantidad de memoria dedicada a lo que usted llama un lector lento.

Sin embargo, como la biblioteca ZeroMQ expone sockets, no clientes, no hay forma de que identifique y desconecte forzosamente los clientes no deseados sin modificar la biblioteca.

0

Hay una sección en la Guía ZeroMq con respecto a esto, sugiere implementar un patrón llamado "Suicidal Snail Pattern".

Básicamente, invierte la dependencia e intenta convencer a los suscriptores lentos para que se desconecten/se suiciden al proporcionarles una forma de detectar si se han convertido en lectores lentos.