2016-09-05 1 views
1

J'ai plusieurs consommateurs qui interrogent sur la même file d'attente, et vérifiant la file d'attente toutes les X secondes, fondamentalement après X secondes il pourrait être qu'au moins deux consommateurs peuvent lancer basic.get en même temps. Les questions sont:
1.Si au moins deux consommateurs en même temps peuvent recevoir le même message?Rabbitmq un file d'attente plusieurs consommateurs

2.Selon ce que je compris que basic_ack va supprimer un mesage de la file d'attente, donc supposons que nous ayons le scénario suivant:

Consumer1 prend msg avec basic.get et avant d'atteindre la ligne basic_ack, Consumer2 devient ce message aussi (basic.get), maintenant Consumer1 atteint le basic.ack, et seulement maintenant Consumer2 atteint son propre basic.ack.
Que se passera-t-il lorsque Consumer2 atteindra son basic.ack?
Le message sera-t-il également traité par Consumer2, car les actions ne sont pas atomiques?

Ma logique de code de la consommation en utilisant pika python est comme suit:

while true: m_frame =None while(m_frame is None):
self.connection.sleep(10) m_frame,h_frame,body = self.channel.basic_get('test_queue') self.channel.basic_ack(m_frame.delivery_tag) [Doing some long logic - couple of minutes]

S'il vous plaît noter que je ne l'utilise basic.consume

Je ne sais pas si rond le prélèvement de robinets est inclus pour une telle utilisation

Répondre

2

1.Si au moins deux consommateurs en même temps peuvent recevoir le même message?

non - un seul message ne sera envoyé qu'à un seul consommateur. À cause de cela, votre scénario n ° 2 n'intervient pas du tout.

Vous n'aurez jamais 2 consommateurs travaillant sur le même message, sauf si vous renvoyez le message dans la file d'attente mais continuez le traitement de toute façon.