Skip to content

julienXX/resque-waiting-room

Repository files navigation

Resque Waiting Room

A Resque plugin. Requires Resque >= 1.19 and a >= 1.9 Ruby (MRI, JRuby or Rubinius).

If you want to limit the number of performs of a job for a given period, extend it with this module.

Installation

Add this line to your application's Gemfile:

gem 'resque-waiting-room'

And then execute:

$ bundle

Or install it yourself as:

$ gem install resque-waiting-room

Usage

Example -- 10 jobs processed every 30 seconds max

require 'resque/plugins/waiting_room'

class UpdateDataFromExternalAPI
  extend Resque::Plugins::WaitingRoom

  # This job can be performed 10 times every 30 seconds
  can_be_performed times: 10, period: 30

  def self.perform(repo_id)
    blah
  end
end

If 10 UpdateDataFromExternalAPI jobs have been performed in 20 seconds, for the next 10 seconds UpdateDataFromExternalAPI jobs will be placed in the waiting_room queue and processed when possible. When the first 30 seconds are elapsed, the counter is set back to 0 and 10 jobs can be performed again. You got to manually tweak the queue names in your workers though.

Testing

We include a matcher

require 'spec/support/matchers'

describe MyJob do
  it 'is rate limited' do
    MyJob.should be_only_performed(times: 100, period: 300)
  end
end

Run tests with the following command

bundle exec rake

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Thanks to the following people for helping out

  • Thomas Devol @socialchorus for adding the RSpec matcher
  • Max Dunn @maxdunn210 for making me switch Resque 2 specific code in it's own branch
  • Jeff Durand @johnnyiller for the update of has_remaining_performs_key using the latest form set and the fix for a rare ttl bug
  • Tatsuya Takamura @ttakamura for raising the issue on the rare ttl bug
  • Omry Zobel @omryYotpo for allowing some customization of the redis key

Build Status Code Climate

About

Resque plugin that throttles your jobs

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages