2017-06-15 9 views

答えて

1

Node.jsマスターワーカースレッドはrabbitmqキューイングと異なり、rabbitmqは、ワーカーがフリーであるときにワーカープロセスによって消費されるようにタスクをキューに格納する機能を提供します。これらの2つを組み合わせると、非常に具体的なユースケースがあり、一般的には必要ありません。

これら2つの組み合わせの実装には、主にnode-amqp clientclusterが含まれています。クラスタは、マスターワーカースレッドにapiを提供するノードのデフォルト機能です。 rabbitmqを使用しないと、一般的に1つのマスタープロセスを使用してタスクを配布します。つまり、すべてのワーカープロセスにタスクを送信し、ワーカースレッドはタスクを受信するのを待ちます。

rabbitmqを使用したいので、最初にsubscribeを交換する必要があります。すべてのタスクを待機し、タスクを受け取ったらそれをワーカープロセスに渡します。以下は説明の要旨を提供する小さなスニペットです。

connection.on('ready', function() { 
    connection.exchange('exchange-name', function(exchange) { 
     _exchange = exchange; 

     connection.queue('queue-name', function(queue) { 
      _queue = queue; 

      // Bind to the exchange 
      queue.bind('exchange-name', 'routing-key'); 

      // Subscribe to the queue 
      queue 
       .subscribe(function(message) { 
        // When receiving the message call the worker thread to complete the task 
        console.log('Got message', message); 
        queue.shift(false, false); 
       }) 
       .addCallback(function(res) { 
        // Hold on to the consumer tag so we can unsubscribe later 
        _consumerTag = res.consumerTag; 
       }) 
      ; 
     }); 
    }); 
}); 

マスターとワーカー間のメッセージ交換:マスタワーカーにメッセージを直接送信する代わりに、成功メッセージをキューに入れる必要があります。マスターは、確認と成功メッセージを受け取るためにそのキューを待ち受けます。

関連する問題