2016-07-02 1 views
0

Je suis en train de distribuer un message via RabbitMQ qui contient de nombreuses tâches:RabbitMQ: Dispatcher pour les messages qui contiennent de nombreuses tâches

Producer --> RabbitMQ Exchange --> 10 Consumers 

.: Le par exemple l'utilisateur envoie un message à l'échange qui contient 1000 tâches. L'échange doit distribuer les tâches de manière égale aux consommateurs ayant la file d'attente la plus courte. Comme le producteur n'a aucune connaissance des mécanismes de mise en file d'attente utilisés dans RabbitMQ, l'échange a besoin d'une logique personnalisée pour scinder l'ordre en tâches et les distribuer aux files d'attente des consommateurs.

Comment cela est-il fait? (J'utilise Python/Pika à la fois sur les producteurs et les consommateurs.)

Répondre

1

Cela semble beaucoup plus simple si vous utilisiez une seule file d'attente et que plusieurs utilisateurs étaient connectés à cette file d'attente et utilisaient Consumer Prefetch (QoS). De cette façon, vous pouvez envoyer 1000 messages à cette file d'attente et demander aux consommateurs disponibles de récupérer les messages.

Producer --> RabbitMQ Exchange --> RabbitMQ Queue --> 10 Consumers 

Consumer prélecture (QoS) essentiellement signifie simplement que vous pouvez définir le nombre de messages que le consommateur prélecture. Par exemple, si vous définissez cette valeur à 1, pika ne récupère et ne traite qu'un message à la fois, ce qui donne aux autres consommateurs une chance de consommer et de traiter les 999 autres messages.

+0

Bonne idée pour une distribution uniforme, mais le producteur devrait encore envoyer 1000 messages, ce que j'essaie d'éviter. – knipknap

+0

Ah, donc vous essayez de distribuer un seul message contenant 1000 tâches, et 10 consommateurs différents traitent des parties de ce message? Je vais probablement diviser ce message en 10 messages, et aller avec ce qui précède. De cette façon, vous n'enverrez que 10, pas 1000 messages. – eandersson

+0

Exactement! Malheureusement, 1000 tâches n'étaient qu'un exemple - en pratique, le nombre variera jusqu'à environ 100 000 ou plus. Les frais généraux pour les emballer chacun dans un message serait juste trop. Sans oublier que le suivi de tous pour l'achèvement serait poilu. – knipknap