rabbit-wq 0.1.0 → 0.2.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/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
|