dispatch-rider 0.2.6 → 0.2.7
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 +11 -6
- data/lib/dispatch-rider/configuration.rb +2 -1
- data/lib/dispatch-rider/demultiplexer.rb +29 -2
- data/lib/dispatch-rider/runner.rb +7 -3
- data/lib/dispatch-rider/subscriber.rb +27 -6
- data/lib/dispatch-rider/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30af4d35a460ffed8231e8baf51fce6e2cd03d31
|
4
|
+
data.tar.gz: 72064d34039b26cff1d57f1e378c261f68e7a59d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bafae95fb175d28736ac1ca3615c84d3e446f4736e82ba75582b092877f205dc363e9d9f26b36d8ddcc5f07b7103f63307f91ab656e557c8ffa080ea7a9e60bc
|
7
|
+
data.tar.gz: 6fefbc2b6f0b5f72dad10835a76c1ae810abb4f391368eb1c71f0816fc1074d4611fb519eb2451e2e5569590bf3ef460dcfdb088bcb7700b98812b1cc1087f9f
|
data/README.md
CHANGED
@@ -208,6 +208,8 @@ DispatchRider.config do |config|
|
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
|
+
config.logger = Rails.logger
|
212
|
+
|
211
213
|
config.error_handler = DispatchRider::DefaultErrorHandler # an object that responds to .call(message, exception)
|
212
214
|
|
213
215
|
config.queue_kind = :sqs
|
@@ -217,6 +219,11 @@ DispatchRider.config do |config|
|
|
217
219
|
end
|
218
220
|
```
|
219
221
|
|
222
|
+
Options:
|
223
|
+
|
224
|
+
* `logger` : what logger to use to send messages to (responds to the standard ruby Logger protocol), defaults to a new Logger sending messages to STDERR
|
225
|
+
|
226
|
+
|
220
227
|
### Callbacks
|
221
228
|
|
222
229
|
Dispatch rider supports injecting callbacks in a few parts of the
|
@@ -237,12 +244,10 @@ To setup a subscriber you'll need message handlers. The handlers are named the s
|
|
237
244
|
Sample message handler:
|
238
245
|
```ruby
|
239
246
|
# app/handlers/bar_handler
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
puts headline
|
245
|
-
end
|
247
|
+
class ReadNews < DispatchRider::Handlers::Base
|
248
|
+
def process(message_body)
|
249
|
+
message_body["headlines"].each do |headline|
|
250
|
+
puts headline
|
246
251
|
end
|
247
252
|
end
|
248
253
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module DispatchRider
|
2
2
|
class Configuration
|
3
|
-
attr_accessor :handler_path, :error_handler, :queue_info, :queue_kind, :subscriber
|
3
|
+
attr_accessor :handler_path, :error_handler, :queue_info, :queue_kind, :subscriber, :logger
|
4
4
|
attr_reader :callbacks
|
5
5
|
|
6
6
|
def initialize
|
@@ -10,6 +10,7 @@ module DispatchRider
|
|
10
10
|
@queue_info = { path: "tmp/dispatch-rider-queue" }
|
11
11
|
@callbacks = Callbacks::Storage.new
|
12
12
|
@subscriber = DispatchRider::Subscriber
|
13
|
+
@logger = Logger.new(STDERR)
|
13
14
|
end
|
14
15
|
|
15
16
|
delegate :before, :after, :around, :to => :callbacks
|
@@ -35,7 +35,7 @@ module DispatchRider
|
|
35
35
|
def dispatch_message(message)
|
36
36
|
dispatcher.dispatch(message)
|
37
37
|
rescue => exception
|
38
|
-
|
38
|
+
handle_message_error message, exception
|
39
39
|
false
|
40
40
|
end
|
41
41
|
|
@@ -48,11 +48,38 @@ module DispatchRider
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
def message_info_fragment(message)
|
52
|
+
"(#{message.object_id}): #{message.subject} : #{message.body.inspect}"
|
53
|
+
end
|
54
|
+
|
51
55
|
def handle_next_queue_item
|
52
56
|
queue.pop do |message|
|
53
|
-
|
57
|
+
begin
|
58
|
+
logger.info "Starting execution of: #{message_info_fragment(message)}"
|
59
|
+
dispatch_message(message)
|
60
|
+
ensure
|
61
|
+
logger.info "Completed execution of: #{message_info_fragment(message)}"
|
62
|
+
end
|
54
63
|
end
|
55
64
|
end
|
56
65
|
|
66
|
+
def exception_info_fragment(message, exception)
|
67
|
+
"(#{message.object_id}): #{message.subject} with #{exception.class}: #{exception.message}"
|
68
|
+
end
|
69
|
+
|
70
|
+
def handle_message_error(message, exception)
|
71
|
+
begin
|
72
|
+
logger.error "Failed execution of: #{exception_info_fragment(message, exception)}"
|
73
|
+
error_handler.call(message, exception)
|
74
|
+
rescue => error_handler_exception # the error handler crashed
|
75
|
+
logger.error "Failed error handling of: #{exception_info_fragment(message, error_handler_exception)}"
|
76
|
+
raise error_handler_exception
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def logger
|
81
|
+
DispatchRider.config.logger
|
82
|
+
end
|
83
|
+
|
57
84
|
end
|
58
85
|
end
|
@@ -30,12 +30,16 @@ module DispatchRider
|
|
30
30
|
@callbacks ||= Callbacks::Access.new(config.callbacks)
|
31
31
|
end
|
32
32
|
|
33
|
+
def logger
|
34
|
+
config.logger
|
35
|
+
end
|
36
|
+
|
33
37
|
def ready
|
34
|
-
|
38
|
+
logger.info "Creating subscriber..."
|
35
39
|
@subscriber = config.subscriber.new
|
36
40
|
|
37
41
|
config.handlers.each do |handler_name|
|
38
|
-
|
42
|
+
logger.info "Registering #{handler_name} handler..."
|
39
43
|
@subscriber.register_handler(handler_name)
|
40
44
|
end
|
41
45
|
end
|
@@ -44,7 +48,7 @@ module DispatchRider
|
|
44
48
|
kind = config.queue_kind
|
45
49
|
info = config.queue_info
|
46
50
|
|
47
|
-
|
51
|
+
logger.info "Setting #{kind} queue @ #{info.to_json} ..."
|
48
52
|
@subscriber.register_queue(kind, info)
|
49
53
|
@subscriber.setup_demultiplexer(kind, config.error_handler)
|
50
54
|
end
|
@@ -30,17 +30,38 @@ module DispatchRider
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def process
|
33
|
-
Signal.trap("QUIT")
|
34
|
-
|
33
|
+
Signal.trap("QUIT") do
|
34
|
+
# signal number: 3
|
35
|
+
logger.info "Received SIGQUIT, stopping demultiplexer"
|
36
|
+
demultiplexer.stop
|
37
|
+
end
|
38
|
+
|
39
|
+
Signal.trap("TERM") do
|
40
|
+
# signal number: 15
|
41
|
+
logger.info "Received SIGTERM, stopping demultiplexer"
|
42
|
+
demultiplexer.stop
|
43
|
+
end
|
35
44
|
|
36
|
-
# user
|
37
|
-
|
45
|
+
# user interruption
|
46
|
+
already_interrupted = false
|
38
47
|
Signal.trap("INT") do
|
39
|
-
|
40
|
-
|
48
|
+
if already_interrupted
|
49
|
+
logger.info "Received SIGINT second time, aborting"
|
50
|
+
exit(0)
|
51
|
+
else
|
52
|
+
logger.info "Received SIGINT first time, stopping demultiplexer"
|
53
|
+
demultiplexer.stop
|
54
|
+
end
|
55
|
+
already_interrupted = true
|
41
56
|
end
|
42
57
|
|
43
58
|
demultiplexer.start
|
44
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def logger
|
64
|
+
DispatchRider.config.logger
|
65
|
+
end
|
45
66
|
end
|
46
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dispatch-rider
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Suman Mukherjee
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-12-
|
14
|
+
date: 2013-12-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|