Skip to content

krasnoukhov/sidekiq-middleware

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Additional sidekiq middleware

Gem Version Dependency Status Code Climate Build Status Coverage Status

This gem provides additional middleware for Sidekiq.

See Sidekiq Wiki for more details.

Installation

Add this line to your application's Gemfile:

gem 'sidekiq-middleware'

And then execute:

$ bundle

Or install it yourself as:

$ gem install sidekiq-middleware

Contents

UniqueJobs

Provides uniqueness for jobs.

Usage

Example worker:

class UniqueWorker
  include Sidekiq::Worker

  sidekiq_options({
    # Should be set to true (enables uniqueness for async jobs)
    # or :all (enables uniqueness for both async and scheduled jobs)
    unique: :all,

    # Unique expiration (optional, default is 30 minutes)
    # For scheduled jobs calculates automatically based on schedule time and expiration period
    expiration: 24 * 60 * 60
  })

  def perform
    # Your code goes here
  end
end

Custom lock key and manual expiration:

class UniqueWorker
  include Sidekiq::Worker

  sidekiq_options({
    unique: :all,
    expiration: 24 * 60 * 60,
    
    # Set this to true when you need to handle locks manually.
    # You'll be able to handle unique expiration inside your worker.
    # Please see example below.
    manual: true
  })
  
  # Implement your own lock string
  def self.lock(id)
    "locks:unique:#{id}"
  end
  
  # Implement method to handle lock removing manually
  def self.unlock!(id)
  	lock = self.lock(id)
    Sidekiq.redis { |conn| conn.del(lock) }
  end

  def perform(id)
    # Your code goes here
    # You are able to re-schedule job from perform method,
    # Just remove lock manually before performing job again.
    sleep 5
    
    # Re-schedule!
    self.class.unlock!(id)
    self.class.perform_async(id)
  end
end

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

About

Additional sidekiq middleware

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages