2013-08-16 72 views
1

我正在使用rabbitmq的項目。隊列我有(工作讓稱它爲「testq」獲得不時約35000項必須要工作node-amqp和async ack

基本上(很短):

var q = new Queue(); 
q.subscribe('testq', { ack: true, prefetchCount: 100 }, function(doc, object, queueOptions, originalDocument) { 
//do some action 
originalDocument.acknowledge(); 

}); 

我現在的問題是:我想一次獲得100條消息(預取計數= 100),但是我什麼時候知道所有100條消息都已經過處理,以便我可以確認並獲得接下來的100條消息?「做某個動作塊」是異步的:(

感謝您的任何建議!

回答

3

您承認消息一個接一個,你不應該擔心收到下100封郵件,而這是一個向你傳遞郵件的中介工作。 do some action異步是沒有錯的,只需在some action完成後做出確認,我想可以通過回調來完成,就像在node.js中完成的一切一樣。類似的東西:

q.subscribe(
    'testq', 
    { ack: true, prefetchCount: 100 }, 

    function(doc, object, queueOptions, originalDocument) { 
     doSomeAction(function() { 
      originalDocument.acknowledge(); 
     }); 
    } 
); 
+0

所有的消息是否會同時開始,或者下一個消息會等到您回覆之前的消息嗎? – MiniGod

+0

郵件按順序逐個處理,以便發佈。預取計數表示您的客戶可以保存不超過100個未確認的消息。所以,如果你有10條消息,另外90條不是,你只會得到10條新消息。請注意,如果您使用自動確認'prefetch count'忽略。 – pinepain

+0

然後什麼是並行處理消息的最佳方式?多次調用'q.subscribe()'x? – MiniGod