2016-09-05 15 views
1

同じキューでポーリングし、X秒ごとにキューをチェックする複数のコンシューマがあり、基本的にX秒後に少なくとも2人のコンシューマが同時にbasic.getを起動できることがあります。Rabbitmq 1つのキューを複数のコンシューマ

質問:
1.同時に少なくとも2人の消費者が同じメッセージを受け取ることができますか?

Consumer1はbasic.getとMSGを取り、それがbasic_ackラインに到達する前に、Consumer2はなっている:私は唯一のbasic_ackは、キューからメッセージを指定を削除し、私たちは次のシナリオがあるとします理解ものに2.According

このメッセージ(basic.get)、今はConsumer1basic.ackに達し、現在はConsumer2が自分自身のbasic.ackに達しています。
Consumer2がbasic.ackになるとどうなりますか?
アクションはアトミックではないため、Consumer2もメッセージを処理しますか?次のようにPythonのナキウサギを使用して、消費者の

私のコードのロジックは次のとおりです。

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]

ラウンドのであれば、私は知らない私は

をbasic.consume使用しないことに注意してくださいそのような使用のためにロビンフェッチが含まれています

答えて

2

1.同時に少なくとも2人の消費者が同じメッセージを受け取ることができますか?

いいえ - 1つのメッセージは単一のコンシューマにのみ配信されます。

このため、シナリオ#2はまったく動作しません。

nackメッセージをキューに戻しても処理を続行しない限り、2人のコンシューマが同じメッセージを処理することはありません。

関連する問題