GitXplorerGitXplorer
t

coffee-resque

public
545 stars
44 forks
3 issues

Commits

List of commits on branch master.
Unverified
cddec8828bb8bafcddb6b494651578e0ef1e5323

Merge pull request #43 from Sailias/master

ssteelThread committed 9 years ago
Unverified
148c0730acd757e507e29bb666b678adb54597cd

Merge pull request #45 from technoweenie/redis_compat_issue

ssteelThread committed 9 years ago
Unverified
78d0ab84ab34dfa5057746db08503ab7dd4c736f

Defaulting the port & host to resolve an incompatiblity issue with node-redis >= 0.12

ssteelThread committed 9 years ago
Unverified
95a248e76580875bc9a1580186e7dc5e912557b2

Issue 43 - Updating to latest refactor

committed 10 years ago
Unverified
ae0fe16e2b2dc33ccc61733c3a4944bcb0916df5

whitespace cleanup

ssteelThread committed 10 years ago
Unverified
d9792863fed0ead2a167e99a1c7f5f295c6d1e77

Merge pull request #42 from MishaConway/add-ability-to-get-size-of-queue

ssteelThread committed 10 years ago

README

The README file for this repository.

Coffee-Resque

Coffeescript/Node.js port of Resque.

USAGE

First, you'll want to queue some jobs in your app:

var resque = require('coffee-resque').connect({
  host: redisHost,
  port: redisPort
});
resque.enqueue('math', 'add', [1,2], function(err, remainingJobs) {
  console.log('New job queued. Remaining jobs in queue: ' + remainingJobs);
});

Next, you'll want to setup a worker to handle these jobs.

Upon completion of the job, invoke the passed callback with a result (if a result was produced by the job) or an Error (if an error was encountered). If an Error is received, resque fails the job. In all other cases resque assumes the job is successful.

The callback is important—it notifies resque that the worker has completed the current job and is ready for another. Neglecting to invoke the callback will result in worker starvation.

// implement your job functions.
var myJobs = {
  add: function(a, b, callback) { callback(a + b); },
  succeed: function(arg, callback) { callback(); },
  fail: function(arg, callback) { callback(new Error('fail')); }
}

// setup a worker
var worker = require('coffee-resque').connect({
  host: redisHost,
  port: redisPort
}).worker('*', myJobs)

// some global event listeners
//
// Triggered every time the Worker polls.
worker.on('poll', function(worker, queue) {})

// Triggered before a Job is attempted.
worker.on('job', function(worker, queue, job) {})

// Triggered every time a Job errors.
worker.on('error', function(err, worker, queue, job) {})

// Triggered on every successful Job run.
worker.on('success', function(worker, queue, job, result) {})

worker.start()

Worker Polling Mechanism

As of v0.1.9, workers poll the given queues similar to Ruby Resque:

start
loop do
  if job = reserve
    job.process
  else
    sleep 5 # Polling frequency = 5
  end
end
shutdown

This ensures that multiple queues are polled in the priority mentioned. Eg: If a worker is started on "queue1,queue2", queue1 is drained completely before jobs in queue2 are processed.

Prior to v0.1.9, workers used to poll the queues in a round-robin fashion.

Development

All code is written in Coffee Script and converted to javascript as it's published to npm.

For normal development, all you need to be concerned about is testing:

$ make test

If you need to generate javascript for production purposes and don't want to use npm packages, you can use:

$ make generate-js
$ make remove-js

You can also have coffeescript watch the src directory and generate Javascript files as they're updated.

$ make dev

TODO

  • Generic failure handling
  • Better polling