2016-04-11 19 views
0

私の問題を解決する方法はありますが、これを行うにはもっとクリーンな方法があるのだろうかと思います。Rabbitmq複数のサービスを購読しますが、ラウンドロビンファッションで購読します

私のアーキテクチャは、Rabbitmqブローカーを通じてメッセージを発信するいくつかのサービスで構成されています。

一部のワーカーはこれらのメッセージを消費し、バックグラウンドジョブを実行します。

私は、同じサービスを利用し、同じタイプの複数のワーカーにラウンドロビンで仕事をさせることができる、異なるタイプのワーカーを作成できるようにしたいと考えています。

これを行うには、メッセージはpub/sub形式でサービスによって公開され、一連のワーカー専用の作業キューにメッセージを再配布するプロセスによって消費されます。

もっとエレガントな方法がありますか?

申し訳ありませんが説明がわからない場合は編集します。

ありがとうございます!

は(私はサービスに労働者一人当たりのキューを作成している可能性がありますが、私の解決策と私は任意のコードを触れることなく、私が好きなだけを購読することができます)

答えて

0

topic exchangeにぴったりのようですね。

+0

が、私はそれらを理解することはありませんそのように、多分私はしませんでしたそれについて十分に読んでください。 私が探しているもののように見えます。 私はテストして見ます。 ありがとうございます! – Sirf0x

+0

ようこそ。 – cantSleepNow

0

ご覧ください: https://www.rabbitmq.com/tutorials/tutorial-two-java.html

"ラウンドロビンは、派遣" あなたは、パラメータchannel.basicQos(X)設定する必要があります。

channel.basicQos(1); 

final Consumer consumer = new DefaultConsumer(channel) { 
    @Override 
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { 
    String message = new String(body, "UTF-8"); 

    System.out.println(" [x] Received '" + message + "'"); 
    try { 
     doWork(message); 
    } finally { 
     System.out.println(" [x] Done"); 
     channel.basicAck(envelope.getDeliveryTag(), false); 
    } 
    } 
}; 
関連する問題