2010-01-29 21 views
4

Je voudrais créer une batterie de processus capables de traiter du texte OCR. J'ai envisagé d'utiliser une seule file de messages qui est lue par plusieurs processus OCR.Plusieurs consommateurs et producteurs connectés à une file d'attente de messages, Est-ce possible dans AMQP?

Je souhaite faire en sorte que:

  • chaque message dans la file d'attente est finalement traitée
  • le travail est plus ou moins également distribué
  • une image est analysée par un seul processus OCR
  • Un processus OCR n'obtient pas plusieurs messages à la fois (de sorte que tout autre processus OCR gratuit peut gérer le message).

Est-ce possible de faire avec AMQP?

Je prévois d'utiliser python et rabbitmq

Répondre

3

Oui, cela est possible. Un cluster de serveurs pour un jeu MMO en temps réel sur lequel je travaille fonctionne de cette façon. Nous utilisons ActiveMQ, mais je pense que tout cela est également possible avec RabbitMQ.

Tous les articles que vous avez mentionnés sont sortis de la boîte, sauf le dernier.

  • chaque message dans la file d'attente est finalement traitée - ce qui est l'une des principales responsabilités des courtiers de messages
  • le travail est plus ou moins également répartie - ce qui est une autre :)
  • un l'image sera analysée uniquement par un processus OCR - la distinction de/topic et/queue existe pour cela. Les sujets sont comme les signaux de diffusion, les files d'attente sont des tâches. Vous avez besoin d'une/file d'attente dans votre scénario

Pour faire durer une œuvre de façon souhaitée, les consommateurs envoient argument spécifique de AMQ lors de la souscription à la file d'attente:

activemq.prefetchSize: 1 

Cette garantie de réglage que le consommateur ne prendra pas plus de messages après qu'il a pris un et jusqu'à ce qu'il envoie un ack à AMQ. Je crois que quelque chose de similaire existe dans RabbitMQ.

5

Oui, comme l'indique @nailxx. Le modèle de programmation AMQP est légèrement différent de JMS en ce que vous avez seulement files d'attente, qui peuvent être partagées entre les travailleurs, ou utilisé en privé par un seul travailleur. Vous pouvez également configurer facilement RabbitMQ pour faire PubSub des cas d'utilisation ou quoi dans JMS sont appelés sujets. S'il vous plaît aller à notre page Getting Started sur le RabbitMQ web site pour trouver une tonne d'informations utiles à ce sujet. Maintenant, pour votre cas d'utilisation en particulier, il y a déjà beaucoup d'outils disponibles sur le marché. Une personne que les gens utilisent beaucoup, et qui est bien pris en charge, est Celery.Voici un blog post à ce sujet, que je pense vous aidera à démarrer:

Si vous avez des questions s'il vous plaît écrivez-nous ou postez sur la liste de diffusion rabbitmq-discuss.

+0

+1 Le céleri a l'air ravissant. Je vais vérifier à l'occasion la plus proche. –