2012-05-20 17 views
14

Antes que nada, soy nuevo en ZeroMQ y en los sistemas de colas de mensajes, por lo que lo que estoy tratando de hacer se puede resolver con un enfoque diferente. Estoy diseñando un sistema de mensajería que hace lo siguiente:¿Cómo puedo controlar/administrar la cola en ZeroMQ?

  • Varios clientes se conectan a un corredor y enviar el identificador de un elemento que necesita ser procesada. El cliente se desconecta inmediatamente 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 devolución devuelve una señal de que el procesamiento se completó.

Tengo una configuración de sistema rudimentario que está procesando las peticiones/respuestas correctamente, pero también me gustaría ser capaz de hacer lo siguiente:

  • consulta al corredor para ver cuántos procesos en realidad están funcionando con los trabajadores y cuántos simplemente están esperando ser ejecutados.

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

Estoy utilizando una configuración de sondeo con conectores intermedios/distribuidores. El código que estoy usando es muy similar al this example from Ian Barber.

Mi primera inclinación (aunque no estoy seguro de cómo implementarlo en zmq) es que el bróker realice un seguimiento de los identificadores que se han recibido, y aquellos que están siendo procesados ​​activamente por los trabajadores. Parece que el intermediario reenvía las solicitudes a los trabajadores de inmediato, independientemente de si están o no disponibles para ejecutar el procesamiento. Los trabajadores luego ponen en cola los identificadores y los procesan en orden. Esto no es ideal ya que estoy buscando poder monitorear y controlar lo que está sucediendo en el sistema centralmente para lograr confiabilidad.

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

+0

sólo un pensamiento, ZMQ es bastante barebones/ligero, tal vez debería echar un vistazo a los productos como activemq, RabbitMQ o OpenMQ, vienen con amplias posibilidades de gestión. productos como activemq y openmq están bastante centrados en Java pero tienen enlaces muy funcionales para muchos lenguajes de programación. – fvu

+0

@fvu - gracias - Tenía la esperanza de poner en marcha zmq pero verificaría algunas de las otras bibliotecas, en particular, creo que RabbitMQ podría funcionar. – jonstjohn

Respuesta

14

ZeroMQ es, en mi opinión, mejor utilizado en diseños sin intermediarios, para los cuales está diseñada la biblioteca. Si desea monitorear la cantidad de elementos en una cola o producción, o lo que sea, tendrá que compilarlos en la aplicación/dispositivo/productor usted mismo. Como usted es nuevo en la mensajería, eso podría salirse de control rápidamente. Ante esto, sugeriría que busques RabbitMQ (o un agente similar), que te proporcionaría estos servicios de manera inmediata. Si adoptas RabbitMQ (o más bien, AMQP), te sugiero que uses un intercambio de fanouts para el escenario que describes arriba.

+0

+1 tienes razón sobre zeromq pero yo usaría zeromq con rabbitmq usando rabbit como servidor de cola y zeromq message broker. – BlaShadow

13

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

+0

Gracias! Esta documentación es definitivamente útil.Acabo de terminar de implementar esta configuración usando RabbitMQ, que parecía ser una solución decente con algo menos de flexibilidad. – jonstjohn