rabbit-wq 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- 1.9.3-p392
1
+ 2.1.0
data/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  A work queue built on RabbitMQ and Celluloid.
4
4
 
5
- This is NOT production ready. Released only to reserve gem name.
6
-
7
5
 
8
6
  ## Installation
9
7
 
@@ -22,7 +20,32 @@ Or install it yourself as:
22
20
 
23
21
  ## Usage
24
22
 
25
- ### Queueing Work
23
+ ### Queue Subscriber
24
+
25
+ #### Starting the Work Queue Subscriber in Interactive Mode
26
+
27
+ $ rabbit-wq start --interactive
28
+
29
+ #### Starting the Work Queue Subscriber as a Daemon
30
+
31
+ $ rabbit-wq start
32
+
33
+ #### Stopping the Work Queue Subscriber
34
+
35
+ $ rabbit-wq stop
36
+
37
+ #### Restarting the Work Queue Subscriber
38
+
39
+ $ rabbit-wq restart
40
+
41
+ #### Checking the Status of the Work Queue Subscriber
42
+
43
+ $ rabbit-wq status
44
+
45
+
46
+ #### Queueing Work
47
+
48
+ #### Implementing as a PORO
26
49
 
27
50
  class SomeWorker < Struct.new( :some_variable )
28
51
  def call
@@ -33,15 +56,15 @@ Or install it yourself as:
33
56
  worker = SomeWorker.new( 1 )
34
57
  RabbitWQ::Work.enqueue( worker )
35
58
 
36
- ### Queueing Work in the Future
59
+ #### Work in the Future
37
60
 
38
61
  RabbitWQ::Work.enqueue( worker, delay: 30000 )
39
62
 
40
- ### Queueing Work with a Retry
63
+ #### Queueing Work with a Retry
41
64
 
42
65
  RabbitWQ::Work.enqueue( worker, retry: 1 )
43
66
 
44
- ### Queueing Work with a Retry and a Retry Delay
67
+ #### Queueing Work with a Retry and a Retry Delay
45
68
 
46
69
  RabbitWQ::Work.enqueue( worker, retry: 1, retry_delay: 30000 )
47
70
 
@@ -52,7 +75,7 @@ Or install it yourself as:
52
75
  Auto-scale will set up retries at the following intervals: 1 min, 5 mins, 15 mins, 30 mins,
53
76
  1 hr, 6 hrs, 12 hrs, 24 hrs. and 48 hrs.
54
77
 
55
- ### Using the Worker Module
78
+ #### Implementing with the Worker Module
56
79
 
57
80
  class SomeWorker < Struct.new( :some_variable )
58
81
  include RabbitWQ::Worker
@@ -90,3 +113,92 @@ do not have to provide a refrence to self in this case.
90
113
  end
91
114
 
92
115
  The RabbitWQ loggers provide the following log levels: debug, info, warn, error and fatal.
116
+
117
+ ### Configuration File
118
+
119
+ The RabbitWQ configuration file uses JSON syntax. The default location for the configuration file is /var/run/rabbit-wq/rabbit-wq.conf
120
+
121
+ Here is an example configuration file with each option's default value:
122
+
123
+ {
124
+ "delayed_exchange_prefix": "work-delay",
125
+ "delayed_queue_prefix": "work-delay",
126
+ "environment_file_path": nil,
127
+ "env": "production",
128
+ "error_queue": "work-error",
129
+ "threads": 1,
130
+ "time_zone": "UTC",
131
+ "work_exchange": "work",
132
+ "work_log_level": "info",
133
+ "work_log_path": "/var/log/rabbit-wq/rabbit-wq-work.log",
134
+ "work_queue": "work"
135
+ }
136
+
137
+ #### Options
138
+
139
+ #####delayed_exchange_prefix
140
+ The prefix for the delayed exchanges. Defaults to work-delay.
141
+
142
+ #####delayed_queue_prefix
143
+ The prefix for the delayed queues. Defaults to work-delay.
144
+
145
+ #####environment_file_path
146
+ The path to the environment file (loads all or some of application environment). No default.
147
+
148
+ #####env
149
+ The environment to run in. Defaults to production.
150
+
151
+ #####error_queue
152
+ The name of the error queue. Defaults to error.
153
+
154
+ #####threads
155
+ The size of the thread pool. Can be overridden with the command line option --threads or -t. Defaults to 1.
156
+
157
+ #####time_zone
158
+ The time zone to use with ActiveRecord.
159
+
160
+ #####work_exchange
161
+ The name of the work exchange. Defaults to work.
162
+
163
+ #####work_log_level
164
+ The log level of the worker logger. Defaults to info.
165
+
166
+ #####work_log_path
167
+ The path the worker logger will log to. Defaults to /var/log/rabbit-wq/rabbit-wq-work.log.
168
+
169
+ #####work_queue
170
+ The name of the work queue. Defaults to work.
171
+
172
+
173
+ ### Command Line Interface
174
+
175
+ #### Commands
176
+
177
+ #####start
178
+ Starts the subscriber.
179
+
180
+ #####stop
181
+ Stops the subscriber.
182
+
183
+ #####restart
184
+ Restarts the subscriber.
185
+
186
+ #####status
187
+ Reports the status of the subscriber, started or stopped.
188
+
189
+ #### Options
190
+
191
+ #####config (--config or -c)
192
+ The path for the configuration file. Defaults to /etc/rabbit-wq/rabbit-wq.conf.
193
+
194
+ #####log_level (--log_level)
195
+ The log level for the work subscriber's logger. This does not have an effect on the worker logger. Defaults to info.
196
+
197
+ #####log (--log or -l)
198
+ The path for the work subsciber's log file. Defaults to /var/log/rabbit-wq/rabbit-wq.log.
199
+
200
+ #####pid (--pid)
201
+ The path to the PID file. Defaults to /var/run/rabbit-wq/rabbit-wq.pid.
202
+
203
+ #####interactive (--interactive or -i)
204
+ When used the work subscriber is executed in interactive (attached) mode as opposed to as a daemon.
@@ -1,4 +1,4 @@
1
- require 'rubygems'
1
+ require 'rubygems'
2
2
  require 'rabbit_wq'
3
3
  require 'trollop'
4
4
  require 'yell'
@@ -20,8 +20,6 @@ module RabbitWQ
20
20
  DEFAULT_LOG_PATH = "/var/log/#{APP_ID}/#{APP_ID}.log"
21
21
  DEFAULT_PID_PATH = "/var/run/#{APP_ID}/#{APP_ID}.pid"
22
22
 
23
- DEFAULT_NUMBER_OF_THREADS = 1
24
-
25
23
  def initialize( args )
26
24
  Trollop::options do
27
25
  version VERSION_COPYRIGHT
@@ -51,7 +49,7 @@ options:
51
49
  opt :log_level, "The log level", :type => String, :default => 'info'
52
50
  opt :log, "The path for the log file", :type => String, :short => '-l', :default => DEFAULT_LOG_PATH
53
51
  opt :pid, "The path for the PID file", :type => String, :default => DEFAULT_PID_PATH
54
- opt :threads, "The number of threads", :type => Integer, :default => DEFAULT_NUMBER_OF_THREADS, :short => '-t'
52
+ opt :threads, "The number of threads", :type => Integer, :short => '-t'
55
53
  end
56
54
  when "start"
57
55
  Trollop::options do
@@ -60,7 +58,7 @@ options:
60
58
  opt :log_level, "The log level", :type => String, :default => 'info'
61
59
  opt :log, "The path for the log file", :type => String, :short => '-l', :default => DEFAULT_LOG_PATH
62
60
  opt :pid, "The path for the PID file", :type => String, :default => DEFAULT_PID_PATH
63
- opt :threads, "The number of threads", :type => Integer, :default => DEFAULT_NUMBER_OF_THREADS, :short => '-t'
61
+ opt :threads, "The number of threads", :type => Integer, :short => '-t'
64
62
  end
65
63
  when "status"
66
64
  Trollop::options do
@@ -10,6 +10,7 @@ module RabbitWQ
10
10
  environment_file_path
11
11
  env
12
12
  error_queue
13
+ threads
13
14
  time_zone
14
15
  work_exchange
15
16
  work_log_level
@@ -45,18 +45,20 @@ module RabbitWQ
45
45
  end
46
46
 
47
47
  def pool
48
- @pool ||= MessageHandler.pool( size: options[:threads] )
48
+ @pool ||= MessageHandler.pool( size: threads )
49
49
  end
50
50
 
51
51
  def run
52
- if options[:threads] == 1
52
+ if threads == 1
53
53
  Celluloid::Actor[:message_handler] = MessageHandler.new
54
54
  end
55
55
 
56
+ info "threads: #{threads}"
57
+
56
58
  @work_consumer = work_queue.subscribe( manual_ack: true ) do |delivery_info, metadata, payload|
57
59
  info "LISTENER RECEIVED #{payload}"
58
60
 
59
- if options[:threads] > 1
61
+ if threads > 1
60
62
  pool.async.call( payload: payload,
61
63
  delivery_info: delivery_info,
62
64
  metadata: metadata,
@@ -74,6 +76,10 @@ module RabbitWQ
74
76
  Celluloid::Actor[:message_handler]
75
77
  end
76
78
 
79
+ def threads
80
+ config.threads
81
+ end
82
+
77
83
  def config
78
84
  RabbitWQ.configuration
79
85
  end
@@ -82,6 +88,7 @@ module RabbitWQ
82
88
  load_configuration
83
89
  initialize_loggers
84
90
  load_environment
91
+ resolve_threads
85
92
  end
86
93
 
87
94
  def load_configuration
@@ -100,6 +107,16 @@ module RabbitWQ
100
107
  require environment_file_path
101
108
  end
102
109
 
110
+ def resolve_threads
111
+ if options[:threads]
112
+ RabbitWQ.configuration.threads = options[:threads]
113
+ end
114
+
115
+ return if RabbitWQ.configuration.threads
116
+
117
+ RabbitWQ.configuration.threads = 1
118
+ end
119
+
103
120
  def environment_file_path
104
121
  RabbitWQ.configuration.environment_file_path
105
122
  end
@@ -1,3 +1,3 @@
1
1
  module RabbitWQ
2
- VERSION = "0.5.0"
2
+ VERSION = "1.0.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit-wq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-22 00:00:00.000000000 Z
12
+ date: 2014-01-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler