Node.js 分布式作業隊列:Martinet
Martinet 是分布式任務管理工具。
Martinet 數據庫后端,基于 zeroMQ 的分布式任務管理系統。Martinet 可以使用任意的 sequelize.js 兼容的數據庫(默認是 SQLite)。
Martinet 使用 push-pull 管理模式來確保在分布式的環境下高效的運行。
安裝
npm install martinet
使用
Martinet 包括兩個部分: Martinet
對象,處理調度和調度任務; Worker
對象,接受任務和定義。
Martinet
安裝
var Martinet = require('martinet'); var martinet = new Martinet(); // Martinet allows you to create multiple workers // so that you can keep worker code in separate // logical modules.martinet.addWorker('WORKER_NAME_1', 'WORKER_PORT_1'); martinet.addWorker('WORKER_NAME_2', 'WORKER_PORT_2');
創建任務
martinet.execute({ worker: 'WORKER_NAME', name: 'task_name', description: 'Do a thing' // Used in the backend so it's easier to lookup tasks later }, args); // args JSON object of named arguments, so like // { // thing_id: 1 // } // // this object gets serialized and passed to the Worker //
martinet.schedule('in 20 minutes', { worker: 'WORKER_NAME', name: 'task_name', description: 'Do a thing in 20 minutes'}, args);
martinet.every('30 minutes', { worker: 'WORKER_NAME', name: 'task_name', description: 'Do a thing every half hour', run_at: 'midnight' // optional time to start the recurring task}, args);
Workers
安裝
var MartinetWorker = require('martinet').Worker;var WORKER_PORT = 3000;var worker = new MartinetWorker(WORKER_PORT, { martinet_url: '127.0.0.1', martinet_port: '8089'});
定義任務
worker.on('task_name', function(taskId, data, callback) { // do a thing. // if it's successful, callback(), // if there's an error, callback(err)});
端口
Martinet 的 pull socket 監聽端口:
var Martinet = require('martinet');var options = { port: 8009};var martinet = new Martinet(options);
DB
后端數據庫的連接信息,使用 sequelize.js 選項。
默認:
var Martinet = require('martinet');var options = { db: { database: 'martinet-db', username: process.env.USER, password: null, options: { dialect: 'sqlite', storage: 'martinet.db', logging: false, omitNull: true }, sync: true }};var martinet = new Martinet(options);
使用 postgres:
var Martinet = require('martinet');var options = { db: { database: 'martinet-db', username: process.env.USER, password: null, options: { dialect: 'postgres', port: 5432, host: 'database.host' logging: false, omitNull: true }, sync: true }};var martinet = new Martinet(options);
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!