rabbit-wq 1.6.3 → 1.7.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.
- 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
|