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 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