Module: Sidekiq

Defined in:
lib/sidekiq/api.rb,
lib/sidekiq.rb,
lib/sidekiq/cli.rb,
lib/sidekiq/job.rb,
lib/sidekiq/web.rb,
lib/sidekiq/fetch.rb,
lib/sidekiq/rails.rb,
lib/sidekiq/client.rb,
lib/sidekiq/config.rb,
lib/sidekiq/deploy.rb,
lib/sidekiq/logger.rb,
lib/sidekiq/capsule.rb,
lib/sidekiq/manager.rb,
lib/sidekiq/systemd.rb,
lib/sidekiq/testing.rb,
lib/sidekiq/version.rb,
lib/sidekiq/embedded.rb,
lib/sidekiq/job_util.rb,
lib/sidekiq/launcher.rb,
lib/sidekiq/component.rb,
lib/sidekiq/job_retry.rb,
lib/sidekiq/paginator.rb,
lib/sidekiq/processor.rb,
lib/sidekiq/scheduled.rb,
lib/sidekiq/sd_notify.rb,
lib/sidekiq/job_logger.rb,
lib/sidekiq/web/action.rb,
lib/sidekiq/web/router.rb,
lib/sidekiq/ring_buffer.rb,
lib/sidekiq/web/helpers.rb,
lib/sidekiq/metrics/query.rb,
lib/sidekiq/metrics/shared.rb,
lib/sidekiq/web/application.rb,
lib/sidekiq/metrics/tracking.rb,
lib/sidekiq/middleware/chain.rb,
lib/sidekiq/redis_connection.rb,
lib/sidekiq/middleware/modules.rb,
lib/sidekiq/web/csrf_protection.rb,
lib/sidekiq/redis_client_adapter.rb,
lib/generators/sidekiq/job_generator.rb,
lib/sidekiq/transaction_aware_client.rb,
lib/sidekiq/transaction_aware_client.rb,
lib/sidekiq/worker_compatibility_alias.rb,
lib/sidekiq/middleware/current_attributes.rb

Overview

Use ‘Sidekiq.transactional_push!` in your sidekiq.rb initializer

Defined Under Namespace

Modules: Component, Context, CurrentAttributes, Generators, Job, JobUtil, LoggingUtils, Metrics, Middleware, Paginator, Queues, RedisConnection, Scheduled, SdNotify, ServerMiddleware, TestingClient, TestingExtensions, WebHelpers, WebRouter Classes: BasicFetch, CLI, Capsule, Client, Config, DeadSet, Deploy, Embedded, EmptyQueueError, JobLogger, JobRecord, JobRetry, JobSet, Launcher, Logger, Manager, Monitor, Process, ProcessSet, Processor, Queue, Rails, RedisClientAdapter, RetrySet, RingBuffer, ScheduledSet, Shutdown, SortedEntry, SortedSet, Stats, Testing, TransactionAwareClient, Web, WebAction, WebApplication, WebRoute, Work, WorkSet

Constant Summary collapse

NAME =
"Sidekiq"
LICENSE =
"See LICENSE and the LGPL-3.0 for licensing details."
Workers =

Since “worker” is a nebulous term, we’ve deprecated the use of this class name. Is “worker” a process, a type of job, a thread? Undefined! WorkSet better describes the data.

WorkSet
VERSION =
"7.2.2"
MAJOR =
7
ClientMiddleware =

no difference for now

ServerMiddleware
Worker =

Sidekiq::Job is a new alias for Sidekiq::Worker as of Sidekiq 6.3.0. Use ‘include Sidekiq::Job` rather than `include Sidekiq::Worker`.

The term “worker” is too generic and overly confusing, used in several different contexts meaning different things. Many people call a Sidekiq process a “worker”. Some people call the thread that executes jobs a “worker”. This change brings Sidekiq closer to ActiveJob where your job classes extend ApplicationJob.

Job

Class Method Summary collapse

Class Method Details

.configure_client {|default_configuration| ... } ⇒ Object



134
135
136
# File 'lib/sidekiq.rb', line 134

def self.configure_client
  yield default_configuration unless server?
end

.configure_embed {|cfg| ... } ⇒ Object

Creates a Sidekiq::Config instance that is more tuned for embedding within an arbitrary Ruby process. Notably it reduces concurrency by default so there is less contention for CPU time with other threads.

inst = Sidekiq.configure_embed do |config|
  config.queues = %w[critical default low]
end
inst.run
sleep 10
inst.terminate

NB: it is really easy to overload a Ruby process with threads due to the GIL. I do not recommend setting concurrency higher than 2-3.

NB: Sidekiq only supports one instance in memory. You will get undefined behavior if you try to embed Sidekiq twice in the same process.

Yields:

  • (cfg)


122
123
124
125
126
127
128
129
130
131
132
# File 'lib/sidekiq.rb', line 122

def self.configure_embed(&block)
  raise "Sidekiq global configuration is frozen, you must create all embedded instances BEFORE calling `run`" if @frozen

  require "sidekiq/embedded"
  cfg = default_configuration
  cfg.concurrency = 2
  @config_blocks&.each { |block| block.call(cfg) }
  yield cfg

  Sidekiq::Embedded.new(cfg)
end

.configure_server {|default_configuration| ... } ⇒ Object



96
97
98
99
# File 'lib/sidekiq.rb', line 96

def self.configure_server(&block)
  (@config_blocks ||= []) << block
  yield default_configuration if server?
end

.default_configurationObject



88
89
90
# File 'lib/sidekiq.rb', line 88

def self.default_configuration
  @config ||= Sidekiq::Config.new
end

.default_job_optionsObject



84
85
86
# File 'lib/sidekiq.rb', line 84

def self.default_job_options
  @default_job_options ||= {"retry" => true, "queue" => "default"}
end

.default_job_options=(hash) ⇒ Object



80
81
82
# File 'lib/sidekiq.rb', line 80

def self.default_job_options=(hash)
  @default_job_options = default_job_options.merge(hash.transform_keys(&:to_s))
end

.dump_json(object) ⇒ Object



56
57
58
# File 'lib/sidekiq.rb', line 56

def self.dump_json(object)
  JSON.generate(object)
end

.ent?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/sidekiq.rb', line 64

def self.ent?
  defined?(Sidekiq::Enterprise)
end

.freeze!Object



101
102
103
104
# File 'lib/sidekiq.rb', line 101

def self.freeze!
  @frozen = true
  @config_blocks = nil
end

.load_json(string) ⇒ Object



52
53
54
# File 'lib/sidekiq.rb', line 52

def self.load_json(string)
  JSON.parse(string)
end

.loggerObject



92
93
94
# File 'lib/sidekiq.rb', line 92

def self.logger
  default_configuration.logger
end

.pro?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/sidekiq.rb', line 60

def self.pro?
  defined?(Sidekiq::Pro)
end

.redis(&block) ⇒ Object



72
73
74
# File 'lib/sidekiq.rb', line 72

def self.redis(&block)
  (Thread.current[:sidekiq_capsule] || default_configuration).redis(&block)
end

.redis_poolObject



68
69
70
# File 'lib/sidekiq.rb', line 68

def self.redis_pool
  (Thread.current[:sidekiq_capsule] || default_configuration).redis_pool
end

.server?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/sidekiq.rb', line 48

def self.server?
  defined?(Sidekiq::CLI)
end

.start_watchdogObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sidekiq/systemd.rb', line 8

def self.start_watchdog
  usec = Integer(ENV["WATCHDOG_USEC"])
  return Sidekiq.logger.error("systemd Watchdog too fast: " + usec) if usec < 1_000_000

  sec_f = usec / 1_000_000.0
  # "It is recommended that a daemon sends a keep-alive notification message
  # to the service manager every half of the time returned here."
  ping_f = sec_f / 2
  Sidekiq.logger.info "Pinging systemd watchdog every #{ping_f.round(1)} sec"
  Thread.new do
    loop do
      sleep ping_f
      Sidekiq::SdNotify.watchdog
    end
  end
end

.strict_args!(mode = :raise) ⇒ Object



76
77
78
# File 'lib/sidekiq.rb', line 76

def self.strict_args!(mode = :raise)
  Sidekiq::Config::DEFAULTS[:on_complex_arguments] = mode
end

.transactional_push!Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/sidekiq/transaction_aware_client.rb', line 40

def self.transactional_push!
  begin
    require "after_commit_everywhere"
  rescue LoadError
    raise %q(You need to add `gem "after_commit_everywhere"` to your Gemfile to use Sidekiq's transactional client)
  end

  Sidekiq.default_job_options["client_class"] = Sidekiq::TransactionAwareClient
  Sidekiq::JobUtil::TRANSIENT_ATTRIBUTES << "client_class"
  true
end

.❨╯°□°❩╯︵┻━┻Object



44
45
46
# File 'lib/sidekiq.rb', line 44

def self.❨╯°□°❩╯︵┻━┻
  puts "Take a deep breath and count to ten..."
end