Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cristianbica/resque-serial-queues
Reque serial queues
https://github.com/cristianbica/resque-serial-queues
Last synced: about 1 month ago
JSON representation
Reque serial queues
- Host: GitHub
- URL: https://github.com/cristianbica/resque-serial-queues
- Owner: cristianbica
- License: mit
- Created: 2014-06-19T22:28:55.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-06-23T19:37:44.000Z (over 10 years ago)
- Last Synced: 2024-09-18T19:27:43.662Z (about 2 months ago)
- Language: Ruby
- Size: 168 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/cristianbica/resque-serial-queues.svg?branch=master)](https://travis-ci.org/cristianbica/resque-serial-queues)
[![Gem Version](https://badge.fury.io/rb/resque-serial-queues.svg)](http://badge.fury.io/rb/resque-serial-queues)
[![Code Climate](https://codeclimate.com/github/cristianbica/resque-serial-queues.png)](https://codeclimate.com/github/cristianbica/resque-serial-queues)# Resque::Plugins::SerialQueues
This gem is tested on the latest version from Resque 1.x.
Declaring resque queues as serial. Jobs from a serial queue won't be processed more than one at a time event if you have multiple workers / servers. There are similar solutions but none of them worked for me. To lock jobs from running in parallel I used `Redis#setnx`. This implementation has a few sensitive things:
- `Resque::Job.reserve` is overriden (here the queue locking is done)
- Added `Object#after_perform_unlock_queue_if_serial` (here the queue is unlocked)
- Added `Object#on_failure_unlock_queue_if_serial` (here the queue is unlocked)I think serial queues are not a scalable. You shouldn't have to have serial queues. This should be a temporary drop-in solution without changing the deployment process. If you really need serial job processing you should start a worker for each serial queue that will listen for jobs only on that queue or migrate to a background processing / messaging tool that provides serial processing out of the box.
## Installation
Add this line to your application's Gemfile:
gem 'resque-serial-queues'
And then execute:
$ bundle
Or install it yourself as:
$ gem install resque-serial-queues
## Usage (Rails)
Create a `.rb` file in config/initializers
```ruby
Resque::Plugins::SerialQueues.configure do |config|
config.serial_queues = [:serial_jobs]
config.lock_timeout = 120 #default 3600 seconds
end
```and use the declared serial queues in your jobs:
```ruby
class MyJob@queue = :serial_jobs
def perform(*)
endend
```## Contributing
1. Fork it ( https://github.com/cristianbica/resque-serial-queues/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request