rabbit-wq 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -0
- data/lib/rabbit_wq/message_handler.rb +16 -9
- data/lib/rabbit_wq/version.rb +1 -1
- data/lib/rabbit_wq/work.rb +8 -0
- metadata +3 -3
data/README.md
CHANGED
@@ -64,3 +64,8 @@ Auto-scale will set up retries at the following intervals: 1 min, 5 mins, 15 min
|
|
64
64
|
|
65
65
|
worker = SomeWorker.new( 1 )
|
66
66
|
worker.work # same as RabbitWQ::Work.enqueue( worker )
|
67
|
+
|
68
|
+
### Error Queue
|
69
|
+
|
70
|
+
Once a worker has thrown an exception and no retry attempts are remaining, the worker is placed on
|
71
|
+
the error queue with the exception type, message and backtraces.
|
@@ -14,12 +14,11 @@ module RabbitWQ
|
|
14
14
|
channel = options[:channel]
|
15
15
|
delivery_info = options[:delivery_info]
|
16
16
|
metadata = options[:metadata]
|
17
|
-
headers = metadata[:headers]
|
17
|
+
#headers = metadata[:headers]
|
18
18
|
payload = options[:payload]
|
19
19
|
|
20
20
|
debug "PAYLOAD ARRIVED #{payload}"
|
21
21
|
|
22
|
-
$stdout.puts headers.inspect
|
23
22
|
worker = YAML::load( payload )
|
24
23
|
worker.call
|
25
24
|
channel.ack delivery_info.delivery_tag
|
@@ -34,18 +33,26 @@ module RabbitWQ
|
|
34
33
|
headers = metadata[:headers]
|
35
34
|
|
36
35
|
if headers['retry']
|
37
|
-
retry_delay = headers.fetch( 'retry_delay', 30000 )
|
38
36
|
attempt = headers.fetch( 'attempt', 1 ).to_i
|
39
37
|
|
40
|
-
if
|
41
|
-
retry_delay =
|
42
|
-
end
|
38
|
+
if attempt < headers['retry']
|
39
|
+
retry_delay = headers.fetch( 'retry_delay', 30000 )
|
43
40
|
|
44
|
-
|
45
|
-
|
41
|
+
if retry_delay == 'auto-scale'
|
42
|
+
retry_delay = retry_delays( attempt )
|
43
|
+
end
|
46
44
|
|
47
|
-
|
45
|
+
Work.enqueue_payload( payload, headers.merge( delay: retry_delay, attempt: attempt + 1 ))
|
46
|
+
channel.nack delivery_info.delivery_tag
|
47
|
+
return
|
48
|
+
end
|
48
49
|
end
|
50
|
+
|
51
|
+
Work.enqueue_error_payload( payload, error: { type: e.class.name,
|
52
|
+
message: e.message,
|
53
|
+
backtrace: e.backtrace } )
|
54
|
+
channel.nack delivery_info.delivery_tag
|
55
|
+
return
|
49
56
|
end
|
50
57
|
|
51
58
|
def requeue( channel, delivery_info, e=nil )
|
data/lib/rabbit_wq/version.rb
CHANGED
data/lib/rabbit_wq/work.rb
CHANGED
@@ -35,6 +35,14 @@ module RabbitWQ
|
|
35
35
|
headers: options )
|
36
36
|
end
|
37
37
|
|
38
|
+
def self.enqueue_error_payload( payload, options={} )
|
39
|
+
mq = ::Bunny.new.tap { |bunny| bunny.start }
|
40
|
+
channel = mq.create_channel
|
41
|
+
|
42
|
+
error_q = channel.queue( ERROR_QUEUE, durable: true )
|
43
|
+
error_q.publish( payload, durable: true,
|
44
|
+
headers: options )
|
45
|
+
end
|
38
46
|
|
39
47
|
end
|
40
48
|
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.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -152,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
152
|
version: '0'
|
153
153
|
segments:
|
154
154
|
- 0
|
155
|
-
hash:
|
155
|
+
hash: -1504652558847638442
|
156
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
157
|
none: false
|
158
158
|
requirements:
|
@@ -161,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
161
|
version: '0'
|
162
162
|
segments:
|
163
163
|
- 0
|
164
|
-
hash:
|
164
|
+
hash: -1504652558847638442
|
165
165
|
requirements: []
|
166
166
|
rubyforge_project:
|
167
167
|
rubygems_version: 1.8.25
|