Library and tasks to handle round robin style workers
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.rvmrc
Gemfile
Gemfile.lock
LICENSE
README.md
TODO.md
round_robin.gemspec

README.md

Round Robin

A library for running background jobs over and over again in a round robin fashion.

Consists of two parts:

  • A rake task to start workers
  • A ruby library for adding, removing, querying and processing jobs

Overview

A Round Robin Job may be any Ruby class which responds to the method perform.

class SearchJob
  def self.perform(search_id)
    search = Search.find(search_id)
    # perform the search
  end
end

RoundRobin.add(SearchJob, 1)
RoundRobin.add(SearchJob, 2)
RoundRobin.add(SearchJob, 3)

Now fire up two workers with:

COUNT=2 rake round_robin:workers

The two workers workers will take one job at a time each and process them in order.

The workers will be persisted and will be kept even after a restart of the server. Typically in a Rails project a RoundRobin.add can be called in an after_create callback and similarly a RoundRobin.remove may be called after_destroy.

The RoundRobin.add call returns a RoundRobin::Job, that descends from ActiveRecord::Base. That record has the following attributes of interest,

started_at, finished_at: datetime

When the job was started and finished most recently.

every_n_hours: integer

Whether to skip to job unless it was atleast n hours since it was run last time. Use this to avoid running a job more often than preferred. By default set to nil. Nil and zero means as often as possible.

skip: boolean

Whether the job should be skipped in the future. By default set to false.

Round Robin is inspired by Resque and DelayedJob.