rabbit-wq 1.6.3 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -0
- data/lib/rabbit_wq.rb +1 -0
- data/lib/rabbit_wq/final_error.rb +11 -0
- data/lib/rabbit_wq/message_handler.rb +11 -2
- data/lib/rabbit_wq/version.rb +1 -1
- data/lib/rabbit_wq/worker.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c97ac243defa2aac2f23a698f956eac51dfa8574
|
4
|
+
data.tar.gz: 3339d19f9f1d53523e05343c2e69e906111f3afb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a411faf8ad4c6a2fc5c79059898172754f0661f42ce7dd35db00709c487b322c2ac94ef0c2cdabb18974c5f7de0fdb38b67ffae7c1e111966680ae4ae69dbb27
|
7
|
+
data.tar.gz: f4042f81efaa480cdb975f1e8df376e1d504b1d934a02888150085d124f0eeb875df25387f161c4e430768c989cdfc2a096301dbae2d390f0b8962a644210422
|
data/README.md
CHANGED
@@ -68,6 +68,30 @@ Or install it yourself as:
|
|
68
68
|
|
69
69
|
RabbitWQ::Work.enqueue( worker, retry: 1, retry_delay: 30000 )
|
70
70
|
|
71
|
+
#### Skipping Retry by Forcing a Final Error
|
72
|
+
|
73
|
+
You can use the RabbitWQ::FinalError to skip retry functionality in the case of an error that will never recover given a time delay.
|
74
|
+
|
75
|
+
class SomeWorker < Struct.new( :some_variable )
|
76
|
+
def call
|
77
|
+
final_error( "Some message" )
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
The #final_error method will raise a RabbitWQ::FinalError which triggers the normal final error functionality (callbacks, logging,
|
82
|
+
error queue queueing). If you owuld like to treat the final error as something other than an error level occurence, you can pass the level
|
83
|
+
to #final_error.
|
84
|
+
|
85
|
+
class SomeWorker < Struct.new( :some_variable )
|
86
|
+
def call
|
87
|
+
final_error( "Some message", :info )
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
When a level other than :error is provided, an log entry to the work log is created at the level provided, ie. :info. However, an error is
|
92
|
+
not logged and an error is not queued on the error queue. The error callbacks are still executed. If you want to avoid functionality in
|
93
|
+
an existing callback, you can test the #level of the error.
|
94
|
+
|
71
95
|
### Queueing Work with a Retry and Auto-Scaling Retry Dealy
|
72
96
|
|
73
97
|
RabbitWQ::Work.enqueue( worker, retry: 1, retry_delay: 'auto-scale' )
|
data/lib/rabbit_wq.rb
CHANGED
@@ -10,6 +10,7 @@ module RabbitWQ
|
|
10
10
|
|
11
11
|
autoload :Command, 'rabbit_wq/command'
|
12
12
|
autoload :Configuration, 'rabbit_wq/configuration'
|
13
|
+
autoload :FinalError, 'rabbit_wq/final_error'
|
13
14
|
autoload :Logging, 'rabbit_wq/logging'
|
14
15
|
autoload :Queues, 'rabbit_wq/queues'
|
15
16
|
autoload :MessageHandler, 'rabbit_wq/message_handler'
|
@@ -24,7 +24,6 @@ module RabbitWQ
|
|
24
24
|
try_on_success_callback( worker )
|
25
25
|
channel.ack delivery_info.delivery_tag
|
26
26
|
rescue => e
|
27
|
-
error e
|
28
27
|
handle_error( worker, e, channel, delivery_info, payload, metadata )
|
29
28
|
end
|
30
29
|
|
@@ -49,7 +48,7 @@ module RabbitWQ
|
|
49
48
|
message: e.message,
|
50
49
|
backtrace: e.backtrace }
|
51
50
|
|
52
|
-
if headers && headers['retry']
|
51
|
+
if headers && headers['retry'] && !e.is_a?( RabbitWQ::FinalError )
|
53
52
|
attempt = headers.fetch( 'attempt', 1 ).to_i
|
54
53
|
|
55
54
|
if attempt < headers['retry']
|
@@ -61,6 +60,7 @@ module RabbitWQ
|
|
61
60
|
|
62
61
|
Work.enqueue_payload( payload, headers.merge( delay: retry_delay, attempt: attempt + 1 ).
|
63
62
|
merge( error: error_metadata ))
|
63
|
+
error( e )
|
64
64
|
worker_error( worker, "ERROR WITH RETRY " + error_metadata.inspect )
|
65
65
|
try_on_error_callback( worker, e )
|
66
66
|
try_on_retryable_error_callback( worker, e )
|
@@ -69,7 +69,16 @@ module RabbitWQ
|
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
72
|
+
if e.is_a?( RabbitWQ::FinalError ) && e.level != :error
|
73
|
+
RabbitWQ.work_logger.send( e.level, worker, e.message )
|
74
|
+
try_on_error_callback( worker, e )
|
75
|
+
try_on_final_error_callback( worker, e )
|
76
|
+
channel.nack delivery_info.delivery_tag
|
77
|
+
return
|
78
|
+
end
|
79
|
+
|
72
80
|
Work.enqueue_error_payload( payload, error: error_metadata )
|
81
|
+
error( e )
|
73
82
|
worker_error( worker, "FINAL ERROR " + error_metadata.inspect )
|
74
83
|
try_on_error_callback( worker, e )
|
75
84
|
try_on_final_error_callback( worker, e )
|
data/lib/rabbit_wq/version.rb
CHANGED
data/lib/rabbit_wq/worker.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbit-wq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- C. Jason Harrelson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- lib/rabbit_wq/cli.rb
|
131
131
|
- lib/rabbit_wq/command.rb
|
132
132
|
- lib/rabbit_wq/configuration.rb
|
133
|
+
- lib/rabbit_wq/final_error.rb
|
133
134
|
- lib/rabbit_wq/logging.rb
|
134
135
|
- lib/rabbit_wq/message_handler.rb
|
135
136
|
- lib/rabbit_wq/queues.rb
|