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.

48 lines
1.5 KiB

2 years ago
# Sidekiq::Workflow
## Why yet another Sidekiq workflow library?
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! ''