zmq socket español context zeromq

socket - ¿Cómo puedo monitorear/administrar la cola en ZeroMQ?



zmq context (2)

La biblioteca de Python para ZeroMQ parece venir con un patrón para tratar esto: http://zeromq.github.com/pyzmq/devices.html#monitoredqueue

En primer lugar, soy nuevo en ZeroMQ y en los sistemas de colas de mensajes, por lo que lo que estoy tratando de hacer puede resolverse a través de un enfoque diferente. Estoy diseñando un sistema de mensajería que hace lo siguiente:

  • Varios clientes se conectan a un intermediario y envían la identificación de un elemento que debe procesarse. El cliente se desconecta de inmediato y no espera una respuesta.

  • El intermediario envía artículos a los trabajadores, un artículo por trabajador, para realizar algún procesamiento. Cada retorno devuelve una señal de que el procesamiento se completó.

Tengo una configuración de sistema rudimentaria que está procesando solicitudes / respuestas correctamente, pero también me gustaría poder hacer lo siguiente:

  • Consulte al agente para ver cuántos procesos se están ejecutando realmente en los trabajadores y cuántos simplemente están esperando para ejecutarse.

  • Haga que el intermediario se asegure de que solo se esté ejecutando un proceso por ID: si llega un ID duplicado y ese elemento no está siendo procesado actualmente por un trabajador, no lo agregue a la cola.

Estoy usando una configuración de sondeo con sockets de agente / distribuidor. El código que estoy usando es muy similar a este ejemplo de Ian Barber .

Mi primera inclinación (aunque no estoy seguro de cómo implementarlo en zmq) es hacer que el agente realice un seguimiento de las identificaciones que se han recibido y las que están siendo procesadas activamente por los trabajadores. Parece que el corredor reenvía las solicitudes a los trabajadores inmediatamente, independientemente de si están disponibles o no para ejecutar el procesamiento. Luego, los trabajadores ponen en cola los identificadores y los procesan en orden. Esto no es ideal ya que estoy buscando poder monitorear y controlar lo que sucede en el sistema de manera centralizada para lograr confiabilidad.

De todos modos, cualquier sugerencia, consejo o ejemplo de este tipo de configuración sería muy apreciado.


ZeroMQ es, en mi opinión, el mejor uso en diseños sin intermediarios, para los cuales está diseñada la biblioteca. Si desea monitorear la cantidad de elementos en una cola, o rendimiento, o lo que sea, tendrá que integrarlo usted mismo en la aplicación / dispositivo / productor. Ya que eres nuevo en la mensajería, eso podría salirse de control muy rápido. Teniendo en cuenta esto, sugeriría buscar en RabbitMQ (o un agente similar), que proporcionaría estos servicios de manera inmediata. Si adopta RabbitMQ (o, mejor dicho, AMQP), sugeriría usar un intercambio de fanout para el escenario que describió anteriormente.