2017-08-22 5 views
0

私は公開エンドポイント 'P'と2人の消費者 'A'、 'B'を持っています。
'P'がメッセージ '1' '2' '3'を発行すると、消費者は '123'の順番でメッセージを消費することが予想されます。しかし実際には、消費順序はおそらく '132'、 '312'などとなります。
私は並行処理に関連する設定を構成しているが、それは
concurrency settingsマストランジットメッセージの消費順


質問動作しません:「A」が成功したメッセージを消費するまで、メッセージを取ってから「B」を防ぐことができる設定はありますか?

おかげ

答えて

1

あり順序で処理メッセージに関する保証はなく、すべてのコストで回避する必要があります。

キュー内のメッセージはFIFOですが、複数のコンシューマがプリフェッチを設定している場合、各コンシューマAとBはキューからx個のメッセージを取り出し、消費時間に応じて処理します消費者Bが完了する前に多くのメッセージのために戻って、一般的な状況である順不同のメッセージを処理する。

メッセージを再試行すると、メッセージが順不同で処理される可能性があります。

これを言って、これを必要とするなら、並行処理の制限が1である単一のコンシューマセットを使用すると、スループットを犠牲にして順番にメッセージが処理されます。

+0

返信いただきありがとうございます。私がプリフェッチを0に設定する限り、AはBが消費を完了する前にメッセージをフェッチすることができます。これは、masstransitやrabbitmqがこの種の「ブロック」をサポートしていないことを意味しますか? – Denni

+0

キューと分散型のコンシューマは何もサポートしません。注文が本当に重要な場合は、ストリーム処理(apache kafka)を参照できます – gertjvr

+0

メッセージ処理の順序が重要なのはなぜですか? – gertjvr