simple_job 0.4.0 → 0.5.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.
- data/CHANGELOG.rdoc +3 -0
- data/lib/simple_job/sqs_job_queue.rb +24 -4
- data/lib/simple_job/version.rb +1 -1
- metadata +3 -3
data/CHANGELOG.rdoc
CHANGED
@@ -30,15 +30,26 @@ class SQSJobQueue < JobQueue
|
|
30
30
|
@default_queue || super
|
31
31
|
end
|
32
32
|
|
33
|
+
# Sets up an SQS queue, using the given type as a unique identifier for the name.
|
34
|
+
#
|
35
|
+
# A :visibility_timeout option may be passed to override the visibility timeout
|
36
|
+
# that is used when polling the queue.
|
37
|
+
#
|
38
|
+
# The :asynchronous_execute option, if set to true, will cause the poll method to
|
39
|
+
# parse and immediately accept each message (if it's validly formatted). It will
|
40
|
+
# then execute the proper job (outside the receive_message block). This can be
|
41
|
+
# used when you have long-running jobs that will exceed the visibility timeout,
|
42
|
+
# and it is not critical that they be retried when they fail.
|
33
43
|
def self.define_queue(type, options = {})
|
34
44
|
type = type.to_s
|
35
45
|
|
36
46
|
options = {
|
37
47
|
:visibility_timeout => config[:default_visibility_timeout],
|
48
|
+
:asynchronous_execute => false,
|
38
49
|
:default => false,
|
39
50
|
}.merge(options)
|
40
51
|
|
41
|
-
queue = self.new(type, options[:visibility_timeout])
|
52
|
+
queue = self.new(type, options[:visibility_timeout], options[:asynchronous_execute])
|
42
53
|
self.queues ||= {}
|
43
54
|
self.queues[type] = queue
|
44
55
|
|
@@ -130,6 +141,7 @@ class SQSJobQueue < JobQueue
|
|
130
141
|
loop do
|
131
142
|
break if max_executions && (max_executions <= 0)
|
132
143
|
last_message = nil
|
144
|
+
last_definition = nil
|
133
145
|
current_start_milliseconds = get_milliseconds
|
134
146
|
current_job_type = 'unknown'
|
135
147
|
begin
|
@@ -146,9 +158,16 @@ class SQSJobQueue < JobQueue
|
|
146
158
|
end
|
147
159
|
|
148
160
|
definition = definition_class.new.from_json(message.body)
|
149
|
-
|
161
|
+
last_definition = definition
|
162
|
+
|
163
|
+
# NOTE: only executes if asynchronous_execute is false (message will be re-enqueued after
|
164
|
+
# vis. timeout if this fails or runs too long)
|
165
|
+
message_handler.call(definition, message) unless asynchronous_execute
|
150
166
|
end
|
151
167
|
|
168
|
+
# NOTE: only executes if asynchronous_execute is set (after message has been confirmed)
|
169
|
+
message_handler.call(definition, message) if asynchronous_execute
|
170
|
+
|
152
171
|
log_execution(true, last_message, current_job_type, current_start_milliseconds)
|
153
172
|
|
154
173
|
break if options[:idle_timeout] && ((Time.now - last_message_at) > options[:idle_timeout])
|
@@ -185,13 +204,14 @@ class SQSJobQueue < JobQueue
|
|
185
204
|
attr_accessor :queues
|
186
205
|
end
|
187
206
|
|
188
|
-
attr_accessor :queue_name, :sqs_queue, :visibility_timeout, :cloud_watch
|
207
|
+
attr_accessor :queue_name, :sqs_queue, :visibility_timeout, :asynchronous_execute, :cloud_watch
|
189
208
|
|
190
|
-
def initialize(type, visibility_timeout)
|
209
|
+
def initialize(type, visibility_timeout, asynchronous_execute)
|
191
210
|
sqs = ::AWS::SQS.new
|
192
211
|
self.queue_name = "#{self.class.config[:queue_prefix]}-#{type}-#{self.class.config[:environment]}"
|
193
212
|
self.sqs_queue = sqs.queues.create(queue_name)
|
194
213
|
self.visibility_timeout = visibility_timeout
|
214
|
+
self.asynchronous_execute = asynchronous_execute
|
195
215
|
self.cloud_watch = Fog::AWS::CloudWatch.new(
|
196
216
|
:aws_access_key_id => AWS.config.access_key_id,
|
197
217
|
:aws_secret_access_key => AWS.config.secret_access_key
|
data/lib/simple_job/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_job
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 5
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.5.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Dawson
|