2017-07-13 7 views
1

私はrabbitmqキューと2つの春の春の消費者を持っています。 各消費者が順番にメッセージを処理したいと思っています。RabbitMQ(またはスプリングクラウドストリーム)はメッセージを排他的に消費できますか?

私はconsumer1がackを送るとき、consumer2は2番目のメッセージ を受け取ると思ったので、私はmessage1を期待していたので、message2は各消費者で順番に処理されました。

-------------------- time pass ------------------------> 

consumer1: message1    message3 
consumer2:    message2   message4 

しかし、そうではありませんでした。 consumer1、consumer2はmessage1、message2、processを同時に受信します。

-------------------- time pass ------------------------> 

consumer1: message1 message3 
consumer2: message2 message4 

春のクラウドストリームがメッセージを独占的に消費する方法はありますか?

答えて

2

RabbitMQ(AMQP)はこれをサポートしていません。各消費者はprefetchというメッセージを受け取ります。

それは排他的な消費者をサポートしますが、consumer1がすべてのメッセージを取得し、consumer2がconsumer1が終了するとメッセージを受け取るだけであることを意味します。

ただし、Spring Cloud Streamは現在、このオプションを設定するプロパティを提供していません。

+0

問題に関するGH問題:https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit/issues/80 –

+0

こんにちは!この機能が今実装されているのかどうか疑問に思っていましたか? –

+0

私は負荷分散オプションでこれを行うことができますか?前もって感謝します –

1

異なる方法でキューをモデル化する必要があります。例えば。正確に1つの消費者コーディネータを有する「着信」待ち行列を有することによって達成される。このコンシューマは、consumer1 + 2が待機していて、ラウンドロビン方式で作業を行う「作業」キューにメッセージを中継します。

次に、3番目のキューのコーディネータに完了を知らせると、1つのメッセージを作業キューに中継することが再開されます。

関連する問題