介紹
Puppeteer 因為也可以是爬蟲的角色,這時候就不得不提到任務管理的套件,可以想像如果有個產品頁面有過個class 跟很多產品內頁 ,情況 看起來能像是 網址/prodution/classId/productionId 透過 Puppeteer 把這類的基礎任務全部的都列成任務清單,如果想要多台機器並發 又有錯誤的回饋與重發 這時候 Rabbitmq就是你的好選擇之一,類似的套件也有很多 Rabbitmq 相比之下是個重量級的套件
官網的部分教學一共有六個單元 每個單元都可以觀看不同語言的DEMO
https://www.rabbitmq.com/getstarted.html
學習Rabbitmq 要先了解這張圖片
P (producer) 可以想成發送訊息的 中間的紅色的就是任務 是推疊 query 的方式 pop in pop out 後面的C (consumer) 就是準備要來執行這些query 而這些都是可以多個然後產生不同的結構
Hello World 看到的是最簡單的
server端安裝 請參考 https://www.rabbitmq.com/download.html 不同版本下的安裝方法
clent端安裝 以 node.js 為例
npm install amqplib
var amqp = require('amqplib/callback_api');
連結到 rabbitmq server
amqp.connect('amqp://localhost', function(err, conn) {});
Client Sending
新增 Channel 並發送一個query到這個ch 裡面
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
ch.assertQueue(q, {durable: false});
// Note: on Node 6 Buffer.from(msg) should be used
ch.sendToQueue(q, new Buffer('Hello World!'));
console.log(" [x] Sent 'Hello World!'");
});
});
如果結束後記得把連線關掉
setTimeout(function() { conn.close(); process.exit(0) }, 500);
Client Receiving
安裝
var amqp = require('amqplib/callback_api');
這邊跟上面的P一樣再次啟動一次,確保Channel有跑起來
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
ch.assertQueue(q, {durable: false});
});
});
使用ch.consume 去接 query ,這樣就是一個最基本的 Rabbitmq Hello World
console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", q);
ch.consume(q, function(msg) {
console.log(" [x] Received %s", msg.content.toString());
}, {noAck: true});
總結
Rabbitmq 如果base很大 ,就可以考慮做多台 consume 去接收不同頻道的工作這樣的好處就是可以把每一台機的資源用到剛剛好 ,不會讓機器負擔太重或是都沒有工作