You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.5 KiB


Why yet another Sidekiq workflow library?

easymarketing/sidekiq_workflows is only usable with Sidekiq Pro

chaps-io/gush move from Sidekiq to ActiveJob on their 1.0 and don't support all advanced Sidekiq configuration like sidekiq_options or sidekiq_retry_in because all jobs are encapsulated on a single (and shared) Sidekiq class worker.

This library try to keep all Sidekiq features available at job level, using Module#prepend to encapsulate own workflow behaviour around classic Sidekiq worker behaviour.

How to use it

require 'sidekiq/workflow'
Sidekiq::Workflow.configure url: 'redis://localhost/0'

class FetchJob
  include Sidekiq::Workflow::Worker
  sidekiq_options queue: :default, retry: 3
  sidekiq_retry_in { 10 }

  def perform(...) end

class SampleWorkflow < Sidekiq::Workflow
  def configure(url_to_fetch_from)
    fetch1 = job FetchJob, { url: url_to_fetch_from }
    fetch2 = job FetchJob, { some_flag: true, url: '' }

    persist1 = job PersistJob, after: fetch1
    persist2 = job PersistJob, after: fetch2

    index = job Index

    job Normalize, after: [persist1, persist2], before: index

SampleWorkflow.start! ''