2016-07-02 8 views
0

を含むメッセージのために:のRabbitMQ:ディスパッチャ私は多くのタスクが含まれているのRabbitMQを経由してメッセージを配布しようとしています多くのタスク

Producer --> RabbitMQ Exchange --> 10 Consumers 

例えば: ユーザーは、1000の作業が含まれている交換機へメッセージを送信します。取引所は、最短の待ち行列を有する消費者にタスクを均等に分配する必要がある。

RabbitMQで使用されるキューイングメカニズムについての知識がないため、注文をタスクに分割してコンシューマキューに配布するためのカスタムロジックが必要です。

これはどのように行われますか?あなたが単一のキューを使用し、そのキューとレバレッジConsumer Prefetch (QoS)に接続された複数の消費者を持っていた場合(私は生産者と消費者の両方でPython /ピカを使用しています。)

答えて

1

それはずっと簡単に聞こえます。この方法で、そのキューに1000個のメッセージを送信し、使用可能なコンシューマにメッセージを受け取らせることができます。

消費者プリフェッチ(QoS)は、基本的に、コンシューマがプリフェッチするメッセージの数を設定できることを意味します。例として、これを1に設定すると、pikaは一度に1つのメッセージをフェッチして処理し、他のコンシューマーに他の999メッセージを消費し処理する機会を与えます。

+0

偶数ディストリビューションのための良いアイデアだが、プロデューサーはまだ私が避けようとしている1000個のメッセージを送信する必要があります。 – knipknap

+0

ああ、1000のタスクを含む1つのメッセージを配布しようとしていて、10人の異なる消費者がそのメッセージの一部を処理しようとしていますか?私はたぶんそのメッセージを10個のメッセージに分割し、上記と一緒に行くでしょう。そうすれば、1000個のメッセージではなく10個だけを送信することになります。 – eandersson

+0

まさに!残念ながら、1000タスクは一例に過ぎませんでした。実際には、数値は〜100.000以上まで変動します。それぞれをメッセージにパッケージ化するオーバーヘッドはあまりにも大きすぎます。言うまでもなく、それらをすべて追跡すると、毛深いものになります。 – knipknap

関連する問題