Module: AdvancedSneakersActiveJob
- Defined in:
- lib/advanced_sneakers_activejob.rb,
lib/advanced_sneakers_activejob/errors.rb,
lib/advanced_sneakers_activejob/handler.rb,
lib/advanced_sneakers_activejob/railtie.rb,
lib/advanced_sneakers_activejob/version.rb,
lib/advanced_sneakers_activejob/publisher.rb,
lib/advanced_sneakers_activejob/content_type.rb,
lib/advanced_sneakers_activejob/configuration.rb,
lib/advanced_sneakers_activejob/active_job_patch.rb,
lib/advanced_sneakers_activejob/workers_registry.rb,
lib/advanced_sneakers_activejob/delayed_publisher.rb,
lib/advanced_sneakers_activejob/exponential_backoff.rb,
lib/advanced_sneakers_activejob/support/locate_workers_by_queues.rb
Overview
Advanced Sneakers adapter for ActiveJob
Defined Under Namespace
Modules: ActiveJobPatch, Support
Classes: Configuration, DelayedPublisher, Handler, PublishError, Publisher, Railtie, WorkersRegistry
Constant Summary
collapse
- VERSION =
'0.6.0'
- CONTENT_TYPE =
'application/vnd.activejob+json'
- EXPONENTIAL_BACKOFF =
Calculating exponential backoff by formulas with randomization leads to numerous RabbitMQ queues.
{
1 => 3, 2 => 30, 3 => 90, 4 => 240, 5 => 600, 6 => 1200, 7 => 2400, 8 => 3600, 9 => 7200, 10 => 10_800, 11 => 14_400, 12 => 21_600, 13 => 28_800, 14 => 36_000, 15 => 50_400, 16 => 64_800, 17 => 86_400 }.tap { |h| h.default = 86_400 }.freeze
Class Method Summary
collapse
Class Method Details
.config ⇒ Object
40
41
42
|
# File 'lib/advanced_sneakers_activejob.rb', line 40
def config
@config ||= Configuration.new
end
|
44
45
46
|
# File 'lib/advanced_sneakers_activejob.rb', line 44
def configure
yield config
end
|
.const_missing(name) ⇒ Object
85
86
87
88
89
|
# File 'lib/advanced_sneakers_activejob.rb', line 85
def const_missing(name)
Sneakers::Worker::Classes.define_active_job_consumers
constants.include?(name) ? const_get(name) : super
end
|
.consumer_name(queue_name:) ⇒ Object
Based on ActiveSupport::Inflector#parameterize
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/advanced_sneakers_activejob.rb', line 70
def consumer_name(queue_name:)
parameterized_string = ::ActiveSupport::Inflector.transliterate(queue_name)
parameterized_string.gsub!(/[^a-z0-9\-_]+/, '_')
parameterized_string.gsub!(/_{2,}/, '_')
parameterized_string.gsub!(/^_|_$/, '')
parameterized_string.gsub!(/\A(\d)/, 'queue\1')
[parameterized_string, 'consumer'].join('_').classify
end
|
.define_consumer(queue_name:) ⇒ Object
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/advanced_sneakers_activejob.rb', line 48
def define_consumer(queue_name:)
name = consumer_name(queue_name: queue_name)
return const_get(name) if const_defined?(name)
klass = Class.new(ActiveJob::QueueAdapters::AdvancedSneakersAdapter::JobWrapper)
const_set(name, klass)
klass.include Sneakers::Worker
klass.from_queue(queue_name, config.sneakers)
klass
end
|
.delayed_publisher ⇒ Object