rabbit-wq 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -88,11 +88,35 @@ Auto-scale will set up retries at the following intervals: 1 min, 5 mins, 15 min
88
88
  worker = SomeWorker.new( 1 )
89
89
  worker.work # same as RabbitWQ::Work.enqueue( worker )
90
90
 
91
- ### Error Queue
91
+ ### Success Callback
92
92
 
93
- Once a worker has thrown an exception and no retry attempts are remaining, the worker is placed on
93
+ #### on_success
94
+
95
+ Called on success when defined on a worker.
96
+
97
+
98
+ ### Error Handling
99
+
100
+ Once a worker has raised an exception and no retry attempts are remaining, the worker is placed on
94
101
  the error queue with the exception type, message and backtraces.
95
102
 
103
+ #### Error Callbacks
104
+
105
+ There are several error callbacks that will be called if defined on a worker. Each error callback will receive
106
+ a single parameter, the error.
107
+
108
+ ##### on_error
109
+
110
+ Called anytime an error is raised, including if a retry will be attempted.
111
+
112
+ ##### on_final_error
113
+
114
+ Called when an error is raised and either no retries were requested or are remaining.
115
+
116
+ ##### on_retryable_error
117
+
118
+ Called when an error is raised and a retry will be attempted.
119
+
96
120
  ### Logging
97
121
 
98
122
  RabbitWQ provides a work logger that is available within all workers. You must send a reference to self
@@ -16,14 +16,12 @@ module RabbitWQ
16
16
  channel = options[:channel]
17
17
  delivery_info = options[:delivery_info]
18
18
  metadata = options[:metadata]
19
- #headers = metadata[:headers]
20
19
  payload = options[:payload]
21
20
 
22
- debug "PAYLOAD ARRIVED #{payload}"
23
-
24
21
  worker = YAML::load( payload )
25
22
  info ANSI.yellow { "WORKER [#{worker.object_id}] " + worker.inspect }
26
23
  worker.call
24
+ try_on_success_callback( worker )
27
25
  channel.ack delivery_info.delivery_tag
28
26
  rescue => e
29
27
  handle_error( worker, e, channel, delivery_info, payload, metadata )
@@ -50,15 +48,39 @@ module RabbitWQ
50
48
 
51
49
  Work.enqueue_payload( payload, headers.merge( delay: retry_delay, attempt: attempt + 1 ).
52
50
  merge( error: error_metadata ))
51
+ worker_error( worker, "ERROR WITH RETRY " + error_metadata.inspect )
52
+ try_on_error_callback( worker, e )
53
+ try_on_retryable_error_callback( worker, e )
53
54
  channel.nack delivery_info.delivery_tag
54
55
  return
55
56
  end
56
57
  end
57
58
 
58
59
  Work.enqueue_error_payload( payload, error: error_metadata )
59
- worker_error( worker, error_metadata.inspect )
60
+ worker_error( worker, "FINAL ERROR " + error_metadata.inspect )
61
+ try_on_error_callback( worker, e )
62
+ try_on_final_error_callback( worker, e )
60
63
  channel.nack delivery_info.delivery_tag
61
- return
64
+ end
65
+
66
+ def try_on_success_callback( worker )
67
+ return unless worker.respond_to?( :on_success )
68
+ worker.on_success
69
+ end
70
+
71
+ def try_on_error_callback( worker, e )
72
+ return unless worker.respond_to?( :on_error )
73
+ worker.on_error( e )
74
+ end
75
+
76
+ def try_on_retryable_error_callback( worker, e )
77
+ return unless worker.respond_to?( :on_retryable_error )
78
+ worker.on_retryable_error( e )
79
+ end
80
+
81
+ def try_on_final_error_callback( worker, e )
82
+ return unless worker.respond_to?( :on_final_error )
83
+ worker.on_final_error( e )
62
84
  end
63
85
 
64
86
  def requeue( channel, delivery_info, e=nil )
@@ -53,8 +53,6 @@ module RabbitWQ
53
53
  Celluloid::Actor[:message_handler] = MessageHandler.new
54
54
  end
55
55
 
56
- info "threads: #{threads}"
57
-
58
56
  @work_consumer = work_queue.subscribe( manual_ack: true ) do |delivery_info, metadata, payload|
59
57
  info "LISTENER RECEIVED #{payload}"
60
58
 
@@ -1,3 +1,3 @@
1
1
  module RabbitWQ
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -36,9 +36,6 @@ module RabbitWQ
36
36
 
37
37
  end
38
38
 
39
- def level=( l )
40
- end
41
-
42
39
  protected
43
40
 
44
41
  attr_reader :logger
@@ -30,7 +30,7 @@ module RabbitWQ
30
30
  def with_logging
31
31
  info "BEGIN #{self.class.name}"
32
32
  yield
33
- info "END #{self.class.name}"
33
+ info "END #{self.class.name}"
34
34
  end
35
35
 
36
36
  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: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-24 00:00:00.000000000 Z
12
+ date: 2014-01-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler