chasqui 1.0.0.pre.rc1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +90 -78
- data/chasqui.gemspec +1 -1
- data/lib/chasqui.rb +83 -5
- data/lib/chasqui/cli.rb +8 -2
- data/lib/chasqui/config.rb +70 -8
- data/lib/chasqui/{queue_adapters → queue_adapter}/redis_queue_adapter.rb +6 -12
- data/lib/chasqui/subscriber.rb +1 -78
- data/lib/chasqui/subscription_builder.rb +135 -0
- data/lib/chasqui/subscription_builder/resque_subscription_builder.rb +31 -0
- data/lib/chasqui/subscription_builder/sidekiq_subscription_builder.rb +27 -0
- data/lib/chasqui/subscriptions.rb +20 -38
- data/lib/chasqui/version.rb +1 -1
- data/spec/integration/pubsub_examples.rb +1 -0
- data/spec/integration/setup/resque.rb +38 -1
- data/spec/integration/setup/sidekiq.rb +40 -1
- data/spec/lib/chasqui/brokers/redis_broker_spec.rb +12 -10
- data/spec/lib/chasqui/config_spec.rb +3 -3
- data/spec/lib/chasqui/{queue_adapters → queue_adapter}/redis_queue_adapter_spec.rb +6 -19
- data/spec/lib/chasqui/subscriber_spec.rb +4 -114
- data/spec/lib/chasqui/subscription_builder/resque_subscription_builder_spec.rb +20 -0
- data/spec/lib/chasqui/subscription_builder/sidekiq_subscription_builder_spec.rb +27 -0
- data/spec/lib/chasqui/subscription_builder_spec.rb +41 -0
- data/spec/lib/chasqui/subscriptions_spec.rb +4 -4
- data/spec/lib/chasqui_spec.rb +76 -12
- data/spec/support/chasqui_spec_helpers.rb +0 -21
- data/spec/support/fake_worker.rb +2 -0
- data/spec/support/shared_examples/subscription_builder_examples.rb +99 -0
- metadata +22 -16
- data/lib/chasqui/worker.rb +0 -81
- data/spec/integration/setup/subscribers.rb +0 -30
- data/spec/lib/chasqui/worker_spec.rb +0 -96
- data/spec/support/fake_subscriber.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 529cc6f7637b86eb3f4e6f2186e17432b766b9a0
|
4
|
+
data.tar.gz: 4d0d17f7b715880207944527b13828d7272f78eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ca9133c707e182c426b59e8d94cd6bc4c95836e21ef152b55e22194cb129eeeedaccab5e1dd1aeed285d9ce36944791417c5367671c15d9940a2b6f4fe5bebd
|
7
|
+
data.tar.gz: 8aeff03699366f0c44c73d077ee868412cca52b0dc61016f517aa7ae2c4df3807ffe613888214f7155b23852e306e24f71ff82c072e5d1e9d6fdf6ac9435fc90
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -3,138 +3,150 @@
|
|
3
3
|
|
4
4
|
# Chasqui
|
5
5
|
|
6
|
-
Chasqui
|
7
|
-
publish-subscribe
|
8
|
-
|
9
|
-
|
10
|
-
Chasqui delivers messages to subscribers in a Resque-compatible format. If you
|
11
|
-
are already using Resque and/or Sidekiq, Chasqui will make a wonderful
|
12
|
-
companion to your architecture.
|
6
|
+
Chasqui adds persistent
|
7
|
+
[publish-subscribe](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern)
|
8
|
+
(pub-sub) messaging capabilities to Sidekiq and Resque workers.
|
13
9
|
|
14
10
|
## Installation
|
15
11
|
|
16
|
-
Add this line to your application's Gemfile
|
12
|
+
Add this line to your application's Gemfile
|
17
13
|
|
18
14
|
gem 'chasqui'
|
19
15
|
|
20
|
-
|
16
|
+
then execute
|
21
17
|
|
22
18
|
$ bundle
|
23
19
|
|
24
|
-
|
20
|
+
or install it yourself as
|
25
21
|
|
26
22
|
$ gem install chasqui
|
27
23
|
|
28
24
|
## Dependencies
|
29
25
|
|
30
|
-
Chasqui uses [Redis](http://redis.io/) to
|
26
|
+
Chasqui uses [Redis](http://redis.io/) to store events and manage
|
31
27
|
subscriptions. You can install Redis with your favorite package manager, such
|
32
28
|
as homebrew, yum, or apt, or if you prefer, you can run `vagrant up` to run
|
33
|
-
Redis in a virtual machine.
|
29
|
+
Redis in a virtual machine. If you already have Resque or Sidekiq working, then
|
30
|
+
you already have everything you need to get started with Chasqui.
|
34
31
|
|
35
32
|
## Quick Start
|
36
33
|
|
37
|
-
Chasqui consists of two components - a client and a broker. Clients can both
|
38
|
-
publish to a channel and subscribe to events on one or more channels. The
|
39
|
-
broker transforms incoming events into Resque (or Sidekiq) jobs and places them
|
40
|
-
on one or more queues according to the currently registered subscribers. Under
|
41
|
-
the hood, a subscriber is simply a Sidekiq/Resque worker that processes jobs
|
42
|
-
placed on a queue.
|
43
|
-
|
44
34
|
### Start the broker
|
45
35
|
|
46
|
-
chasqui -r redis://localhost:6379/0
|
36
|
+
chasqui -r redis://localhost:6379/0
|
47
37
|
|
48
|
-
|
49
|
-
|
38
|
+
The broker is a ruby daemon that listens for events (messages) published to
|
39
|
+
channels (topics) and forwards those events to registered subscribers. In
|
40
|
+
order to work, your broker must use the same Redis database as your
|
41
|
+
Sidekiq/Resque workers. For a list of available broker options, see `chasqui
|
42
|
+
--help`.
|
50
43
|
|
51
|
-
### Publish events
|
44
|
+
### Publish an events
|
52
45
|
|
53
|
-
|
46
|
+
Chasqui.publish 'order.purchased', user, order
|
54
47
|
|
55
|
-
|
56
|
-
|
57
|
-
|
48
|
+
Publish an event to the `order.purchased` channel and include information
|
49
|
+
about the user and order that triggered the event. Any arguments after the
|
50
|
+
channel name must be JSON-serializable.
|
58
51
|
|
59
|
-
|
60
|
-
windows.
|
52
|
+
### Define workers to handle events
|
61
53
|
|
62
|
-
|
54
|
+
With Sidekiq
|
63
55
|
|
64
|
-
|
56
|
+
class OrderPublishWorker
|
57
|
+
include Sidekiq::Worker
|
58
|
+
sidekiq_options queue: 'pubsub' # you can use any options sidekiq supports
|
65
59
|
|
66
|
-
|
67
|
-
|
60
|
+
def perform(event, user, order_details)
|
61
|
+
# custom logic to handle the event
|
62
|
+
end
|
63
|
+
end
|
68
64
|
|
69
|
-
|
70
|
-
require 'chasqui'
|
65
|
+
With Resque
|
71
66
|
|
72
|
-
class
|
73
|
-
|
74
|
-
subscribe channel: 'user.sign-up'
|
67
|
+
class OrderPublishWorker
|
68
|
+
@queue = 'pubsub' # choice of queue name is up to you
|
75
69
|
|
76
|
-
def perform(
|
77
|
-
#
|
78
|
-
#
|
79
|
-
# User.create(name: payload[:user])
|
80
|
-
# => #<User:0X00fe346 @name="Darth Vader">
|
70
|
+
def self.perform(event, user, order_details)
|
71
|
+
# custom logic to handle the event
|
81
72
|
end
|
82
73
|
end
|
83
74
|
|
84
|
-
|
75
|
+
The `OrderPublishWorker` is a normal Sidekiq (or Resque) worker. The first
|
76
|
+
argument to the perform method is a [Chasqui::Event](#) object, and the
|
77
|
+
remaining arguments are the same arguments you passed to `Chasqui.publish`.
|
78
|
+
|
79
|
+
### Subscribe to events
|
80
|
+
|
81
|
+
Chasqui.subscribe do
|
82
|
+
on 'order.purchased', PurchasedOrderWorker
|
83
|
+
# ...more subscriptions
|
84
|
+
end
|
85
|
+
|
86
|
+
The above code tells Chasqui to place events published to the `order.purchased`
|
87
|
+
channel on `PurchaseOrderWorker`'s queue.
|
85
88
|
|
86
|
-
|
89
|
+
You can also use a callable object instead of a worker class to handle events.
|
87
90
|
|
88
|
-
|
91
|
+
Chasqui.subscribe queue: 'app_id:pubsub' do
|
92
|
+
on 'order.purchased', ->(event, user, order) {
|
93
|
+
logger.info event.to_json
|
94
|
+
}
|
95
|
+
end
|
89
96
|
|
90
|
-
|
91
|
-
[Sidekiq documentation](https://github.com/mperham/sidekiq).
|
97
|
+
### Running Subscribers
|
92
98
|
|
93
|
-
|
99
|
+
With Sidekiq
|
94
100
|
|
95
|
-
|
101
|
+
bundle exec sidekiq -q app_id:pubsub
|
96
102
|
|
97
|
-
|
98
|
-
require 'resque'
|
99
|
-
require 'resque/tasks'
|
103
|
+
With Resque
|
100
104
|
|
101
|
-
|
105
|
+
QUEUES=app_id:pubsub bundle exec rake resque:work
|
102
106
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
+
Subscribers are normal Sidekiq or Resque workers, and can take advantage of all
|
108
|
+
available features and plugins. Please refer to the documentation for those
|
109
|
+
libraries for detailed instructions.
|
110
|
+
|
111
|
+
* [Sidekiq documentation](https://github.com/mperham/sidekiq)
|
112
|
+
* [Resque documentation](https://github.com/resque/resque)
|
113
|
+
|
114
|
+
### Configuration
|
115
|
+
|
116
|
+
Chasqui.configure do |c|
|
117
|
+
c.redis = 'redis://my-redis.example.com:6379'
|
118
|
+
...
|
107
119
|
end
|
108
120
|
|
109
|
-
|
121
|
+
For a full list of configuration options, see the
|
122
|
+
[Chasqui::Config documentation](http://www.rubydoc.info/gems/chasqui/Chasqui/Config).
|
123
|
+
|
124
|
+
## Unsubscribing
|
110
125
|
|
111
|
-
|
126
|
+
Chasqui.unsubscribe 'order.purchased', 'app_id:pubsub'
|
112
127
|
|
113
|
-
|
114
|
-
the
|
128
|
+
If you no longer wish to handle events for a channel, you should unsubscribe
|
129
|
+
the worker so that the Chasqui broker stops placing jobs on that worker's
|
130
|
+
queue.
|
115
131
|
|
116
132
|
## Why Chasqui?
|
117
133
|
|
118
|
-
*
|
119
|
-
|
120
|
-
* Integrates with the
|
121
|
-
*
|
122
|
-
|
123
|
-
failed jobs.
|
134
|
+
* Persistent - events don't get lost when the broker restarts or your workers
|
135
|
+
are not running.
|
136
|
+
* Integrates with the proven Sidekiq and Resque background worker libraries.
|
137
|
+
* Reduces service coupling - publishers have no knowledge of subscribers and
|
138
|
+
subscribers have no knowledge of publishers.
|
124
139
|
|
125
140
|
## Limitations
|
126
141
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
system. If Chasqui is missing a feature that you think it should have, please
|
131
|
-
consider [opening a GitHub issue](https://github.com/jbgo/chasqui/issues/new)
|
132
|
-
to discuss your feature proposal.
|
142
|
+
Chasqui requires that the publisher, broker, and all subscribers must connect
|
143
|
+
to the same Redis database. If your applications use separate Redis databases,
|
144
|
+
they will not be able to communicate with each other using Chasqui.
|
133
145
|
|
134
146
|
## Contributing
|
135
147
|
|
136
|
-
* For
|
137
|
-
|
148
|
+
* For feature requests, please [open an issue](https://github.com/jbgo/chasqui/issues/new)
|
149
|
+
to discuss the proposed feature.
|
138
150
|
* For bug fixes, you are welcome to create a pull request without first opening
|
139
151
|
an issue.
|
140
152
|
* Except for documentation changes, tests are required with all pull requests.
|
@@ -143,7 +155,7 @@ to discuss your feature proposal.
|
|
143
155
|
|
144
156
|
## Code of Conduct
|
145
157
|
|
146
|
-
If you are unsure whether or not your communication
|
147
|
-
please consult the [Chasqui Code of Conduct](code-of-conduct.md). If you
|
158
|
+
If you are unsure whether or not your communication is appropriate for Chasqui
|
159
|
+
please consult the [Chasqui Code of Conduct](code-of-conduct.md). If you
|
148
160
|
suspect harassment or abuse, please report it to the email address listed in
|
149
161
|
the Code of Conduct.
|
data/chasqui.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Chasqui::VERSION
|
9
9
|
spec.authors = ["Jordan Bach"]
|
10
10
|
spec.email = ["jordan@opensolitude.com"]
|
11
|
-
spec.summary = %q{Chasqui
|
11
|
+
spec.summary = %q{Chasqui adds persistent publish-subscribe (pub-sub) messaging capabilities to Sidekiq and Resque workers.}
|
12
12
|
spec.homepage = "https://github.com/jbgo/chasqui"
|
13
13
|
spec.license = "MIT"
|
14
14
|
|
data/lib/chasqui.rb
CHANGED
@@ -9,36 +9,114 @@ require "chasqui/config"
|
|
9
9
|
require "chasqui/broker"
|
10
10
|
require "chasqui/brokers/redis_broker"
|
11
11
|
require "chasqui/queue_adapter"
|
12
|
-
require "chasqui/
|
12
|
+
require "chasqui/queue_adapter/redis_queue_adapter"
|
13
13
|
require "chasqui/subscriber"
|
14
14
|
require "chasqui/subscriptions"
|
15
|
-
require "chasqui/
|
15
|
+
require "chasqui/subscription_builder"
|
16
|
+
require "chasqui/subscription_builder/resque_subscription_builder"
|
17
|
+
require "chasqui/subscription_builder/sidekiq_subscription_builder"
|
16
18
|
|
19
|
+
# A persistent implementation of the publish-subscribe messaging pattern for
|
20
|
+
# Resque and Sidekiq workers.
|
17
21
|
module Chasqui
|
18
22
|
|
19
|
-
class ConfigurationError < StandardError; end
|
20
|
-
|
21
23
|
class << self
|
22
24
|
extend Forwardable
|
23
25
|
def_delegators :config, *CONFIG_SETTINGS
|
24
|
-
def_delegators :subscriptions, :register, :unregister
|
25
26
|
|
27
|
+
# Yields an object for configuring Chasqui.
|
28
|
+
#
|
29
|
+
# @example
|
30
|
+
# Chasqui.configure do |c|
|
31
|
+
# c.redis = 'redis://my-redis.example.com:6379'
|
32
|
+
# ...
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# @see Config See Chasqui::Config for a full list of configuration options.
|
36
|
+
#
|
37
|
+
# @yieldparam config [Config]
|
26
38
|
def configure(&block)
|
27
39
|
yield config
|
28
40
|
end
|
29
41
|
|
42
|
+
# @visibility private
|
43
|
+
#
|
44
|
+
# Returns the Chasqui configuration object.
|
45
|
+
#
|
46
|
+
# @see Config See Chasqui::Config for a full list of configuration options.
|
47
|
+
#
|
48
|
+
# @return [Config]
|
30
49
|
def config
|
31
50
|
@config ||= Config.new
|
32
51
|
end
|
33
52
|
|
53
|
+
# Publish an event to a channel.
|
54
|
+
#
|
55
|
+
# @param channel [String] the channel name
|
56
|
+
# @param args [Array<#to_json>] an array of JSON serializable objects that
|
57
|
+
# comprise the event's payload.
|
34
58
|
def publish(channel, *args)
|
35
59
|
redis.lpush inbox_queue, build_event(channel, *args).to_json
|
36
60
|
end
|
37
61
|
|
62
|
+
# Subscribe workers to channels.
|
63
|
+
#
|
64
|
+
# Chasqui.subscribe(queue: 'high-priority') do
|
65
|
+
# on 'channel1', Worker1
|
66
|
+
# on 'channel2', Worker2
|
67
|
+
# on 'channel3', ->(event) { ... }, queue: 'low-priority'
|
68
|
+
# ...
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# The +.subscribe+ method creates a context for registering workers to
|
72
|
+
# receive events for specified channels. Within a subscribe block you make
|
73
|
+
# calls to the {SubscriptionBuilder#on #on} method to create subscriptions.
|
74
|
+
#
|
75
|
+
# {SubscriptionBuilder#on #on} expects a channel name as the first argument
|
76
|
+
# and either a Resque/Sidekiq worker as the second argument or a callable
|
77
|
+
# object, such as a proc, lambda, or any object that responds to +#call+.
|
78
|
+
#
|
79
|
+
# @see SubscriptionBuilder#on
|
80
|
+
#
|
81
|
+
# @param [Hash] options default options for calls to +#on+. The defaults
|
82
|
+
# will be overriden by options supplied to the +#on+ method directly.
|
83
|
+
# See {Chasqui::SubscriptionBuilder#on} for available options.
|
84
|
+
def subscribe(options={})
|
85
|
+
builder = SubscriptionBuilder.builder(subscriptions, options)
|
86
|
+
builder.instance_eval &Proc.new
|
87
|
+
end
|
88
|
+
|
89
|
+
# @visibility private
|
90
|
+
#
|
91
|
+
# Returns the registered subscriptions.
|
92
|
+
#
|
93
|
+
# @return [Subscriptions]
|
38
94
|
def subscriptions
|
39
95
|
@subscriptions ||= Subscriptions.new build_queue_adapter
|
40
96
|
end
|
41
97
|
|
98
|
+
# Unsubscribe workers from a channel.
|
99
|
+
#
|
100
|
+
# When you unsubscribe from a channel, the broker will stop placing jobs on
|
101
|
+
# the worker queue. When only given +channel+ and +queue+ arguments,
|
102
|
+
# +#unsubscribe+ will unsubscribe all workers using that channel and queue.
|
103
|
+
# When the additional +worker+ argument is given, Chasqui will only
|
104
|
+
# unsubscribe the given worker.
|
105
|
+
#
|
106
|
+
# @param channel [String] the channel name
|
107
|
+
# @param queue [String] the queue name
|
108
|
+
# @param worker [.perform,#perform,#call] the worker class or proc for a
|
109
|
+
# a currently subscribed worker
|
110
|
+
def unsubscribe(channel, queue, worker=nil)
|
111
|
+
subscribers = if worker
|
112
|
+
[Subscriber.new(channel, queue, worker)]
|
113
|
+
else
|
114
|
+
subscriptions.find channel, queue
|
115
|
+
end
|
116
|
+
|
117
|
+
subscribers.each { |sub| subscriptions.unregister sub }
|
118
|
+
end
|
119
|
+
|
42
120
|
private
|
43
121
|
|
44
122
|
def build_event(channel, *args)
|
data/lib/chasqui/cli.rb
CHANGED
@@ -44,7 +44,7 @@ class Chasqui::CLI
|
|
44
44
|
opts = {}
|
45
45
|
|
46
46
|
@parser = OptionParser.new do |o|
|
47
|
-
o.banner = "Usage:
|
47
|
+
o.banner = "Usage: chasqui [options]"
|
48
48
|
|
49
49
|
o.on('-f', '--logfile PATH', 'log file path') do |arg|
|
50
50
|
opts[:logfile] = arg
|
@@ -71,7 +71,13 @@ class Chasqui::CLI
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
-
|
74
|
+
begin
|
75
|
+
@parser.parse!(argv)
|
76
|
+
rescue OptionParser::InvalidOption => ex
|
77
|
+
puts "Error: #{ex.message}\n\n#{@parser.help}"
|
78
|
+
exit 1
|
79
|
+
end
|
80
|
+
|
75
81
|
@options = OpenStruct.new opts
|
76
82
|
end
|
77
83
|
|
data/lib/chasqui/config.rb
CHANGED
@@ -1,16 +1,10 @@
|
|
1
1
|
module Chasqui
|
2
2
|
|
3
|
-
|
4
|
-
default_queue: 'chasqui-subscribers',
|
5
|
-
inbox_queue: 'inbox',
|
6
|
-
redis_namespace: 'chasqui',
|
7
|
-
broker_poll_interval: 3,
|
8
|
-
queue_adapter: -> { QueueAdapters::RedisQueueAdapter }
|
9
|
-
}.freeze
|
10
|
-
|
3
|
+
# Raised when configured settings prevent Chasqui from working correctly.
|
11
4
|
class ConfigurationError < StandardError
|
12
5
|
end
|
13
6
|
|
7
|
+
# @visibility private
|
14
8
|
CONFIG_SETTINGS = [
|
15
9
|
:broker_poll_interval,
|
16
10
|
:channel_prefix,
|
@@ -22,7 +16,75 @@ module Chasqui
|
|
22
16
|
:worker_backend
|
23
17
|
]
|
24
18
|
|
19
|
+
# Stores and manages all Chasqui configuration settings.
|
25
20
|
class Config < Struct.new(*CONFIG_SETTINGS)
|
21
|
+
|
22
|
+
# @!attribute broker_poll_interval
|
23
|
+
# How long the broker daemon waits for an event before pausing to handle
|
24
|
+
# signals. Default: +3+
|
25
|
+
# @return [Fixnum] seconds
|
26
|
+
|
27
|
+
# @!attribute channel_prefix
|
28
|
+
# A string to prepend to channel names for all published events. This is
|
29
|
+
# useful for namespacing channel names to prevent collisions with other
|
30
|
+
# applications that may choose the same channel name for a different type
|
31
|
+
# of event. Default: +nil+
|
32
|
+
#
|
33
|
+
# @example
|
34
|
+
# Chasqui.configure do |c|
|
35
|
+
# c.channel_prefix = 'com.example.app1'
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# # publishes to channel: "com.example.app1.user.signup"
|
39
|
+
# Chasqui.publish 'user.signup', user
|
40
|
+
#
|
41
|
+
# @return [String]
|
42
|
+
|
43
|
+
# @!attribute default_queue
|
44
|
+
# The queue to use when a worker class does not define a queue and a
|
45
|
+
# queue option is not supplied to {Chasqui::SubscriptionBuilder#on #on}.
|
46
|
+
# Default: +"chasqui-workers"+
|
47
|
+
# @return [String]
|
48
|
+
|
49
|
+
# @!attribute inbox_queue
|
50
|
+
# The queue that stores published events until they are delivered to
|
51
|
+
# subscriber (worker) queues. Default: "chasqui-inbox"
|
52
|
+
# @return [String]
|
53
|
+
|
54
|
+
# @!attribute logger
|
55
|
+
# The logger to use for the Chasqui broker. Default: +Logger.new(STDOUT)+
|
56
|
+
# @return [Logger]
|
57
|
+
|
58
|
+
# @!attribute [rw] queue_adapter
|
59
|
+
# @api private
|
60
|
+
# The queue adapter to use for binding queues to channels.
|
61
|
+
# @return [Chasqui::QueueAdapter]
|
62
|
+
|
63
|
+
# @!attribute redis
|
64
|
+
# Customize the Redis databse connection Chasqui uses.
|
65
|
+
# Default: +"redis://localhost:6379/0"+
|
66
|
+
# @return [Redis,String,Hash]
|
67
|
+
|
68
|
+
# @!attribute worker_backend
|
69
|
+
# The type of worker that will handle events in class to
|
70
|
+
# {Chasqui.subscribe}. Can be either +resque+ or +sidekiq+. Chasqui will
|
71
|
+
# attempt to auto-detect the +worker_backend+ if either library is
|
72
|
+
# loaded. Default: +nil+
|
73
|
+
# @return [Symbol]
|
74
|
+
|
75
|
+
# @visibility private
|
76
|
+
# Default values for all configuration settings.
|
77
|
+
Defaults = {
|
78
|
+
broker_poll_interval: 3,
|
79
|
+
channel_prefix: nil,
|
80
|
+
default_queue: 'chasqui-workers',
|
81
|
+
inbox_queue: 'chasqui-inbox',
|
82
|
+
logger: STDOUT,
|
83
|
+
queue_adapter: -> { QueueAdapter::RedisQueueAdapter },
|
84
|
+
redis_namespace: 'chasqui',
|
85
|
+
worker_backend: nil
|
86
|
+
}.freeze
|
87
|
+
|
26
88
|
def default_queue
|
27
89
|
self[:default_queue] ||= Defaults.fetch(:default_queue)
|
28
90
|
end
|