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