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 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 retry_delay == 'auto-scale'
41
- retry_delay = retry_delays( attempt )
42
- end
38
+ if attempt < headers['retry']
39
+ retry_delay = headers.fetch( 'retry_delay', 30000 )
43
40
 
44
- Work.enqueue_payload( payload, headers.merge( delay: retry_delay, attempt: attempt + 1 ))
45
- channel.nack delivery_info.delivery_tag
41
+ if retry_delay == 'auto-scale'
42
+ retry_delay = retry_delays( attempt )
43
+ end
46
44
 
47
- return
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 )
@@ -1,3 +1,3 @@
1
1
  module RabbitWQ
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -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.1.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: 2689177657118754314
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: 2689177657118754314
164
+ hash: -1504652558847638442
165
165
  requirements: []
166
166
  rubyforge_project:
167
167
  rubygems_version: 1.8.25