Skip to content

Instantly share code, notes, and snippets.

@tkambler
Created May 6, 2015 17:34
Show Gist options
  • Save tkambler/0fc87d9c14de6dc7dfa8 to your computer and use it in GitHub Desktop.
Save tkambler/0fc87d9c14de6dc7dfa8 to your computer and use it in GitHub Desktop.
node-gearman - background job error
'use strict';
var Gearman = require('node-gearman');
var gearman = new Gearman('localhost', 4730);
var submit = function(workerName, payload, cb) {
payload = JSON.stringify(payload);
var result = '';
var job = gearman.submitJob(workerName, payload);
job.on('data', function(data) {
// console.log('data1', data);
data = data.toString('utf-8');
// console.log('data2');
// console.log(data);
result += data.toString('utf-8');
// console.log('r', result);
});
job.on('end', function() {
// console.log('rrr', result);
result = JSON.parse(result);
console.log('Job completed', result);
cb(null, result);
});
job.on('error', function(err) {
console.log('Worker error', err);
cb(err);
});
};
var queue = function(workerName, payload, cb) {
payload = JSON.stringify(payload);
var result = '';
var job = gearman.submitJob(workerName, payload, false, {
'background': true
});
job.on('data', function(data) {
// console.log('data1', data);
data = data.toString('utf-8');
// console.log('data2');
// console.log(data);
result += data.toString('utf-8');
// console.log('r', result);
});
job.on('end', function() {
// console.log('rrr', result);
result = JSON.parse(result);
cb(null, result);
});
job.on('error', function(err) {
cb(err);
});
};
gearman.on('connect', function() {
console.log('Connected.');
gearman.registerWorker('doSomething', function(payload, worker) {
console.log('Incoming doSomething job', payload);
payload = payload.toString('utf-8');
try {
console.log('Calling JSON.parse on payload: --%s--', payload);
payload = JSON.parse(payload);
} catch(err) {
console.log('JSON.parse error', err);
return worker.error(err);
}
console.log('Parsed payload', payload);
return worker.end(JSON.stringify({
'name': 'Tim'
}));
});
setTimeout(function() {
submit('doSomething', {
'animals': ['cats', 'dogs']
}, function(err, result) {
if (err) throw new Error(err);
console.log('result', result);
process.exit();
});
// queue('doSomething', {
// 'animals': ['cats', 'dogs']
// });
}, 1000);
});
gearman.connect();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment