beetle 3.0.0 → 3.1.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.rdoc +4 -0
- data/RELEASE_NOTES.rdoc +8 -0
- data/beetle.gemspec +0 -1
- data/lib/beetle/handler.rb +8 -0
- data/lib/beetle/message.rb +4 -11
- data/lib/beetle/r_c.rb +2 -0
- data/lib/beetle/subscriber.rb +13 -9
- data/lib/beetle/version.rb +1 -1
- data/test/beetle/subscriber_test.rb +1 -0
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81efac323bc4a748a3e15d4ca496fa826cc75338b6841d28d22970cd38bf7a4d
|
4
|
+
data.tar.gz: f34c106da764a475f0396b225482a16083b00b659270d58b7b04c6887b59c6fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 933a4abbd1748fca969f40bd1c2cd304302ce70ec52251c0e1af66b491878644bb6be881686d9899718836f709caeba036bab2a0e0df5f4d9824233af7082dd7
|
7
|
+
data.tar.gz: 4b215e85dd35302221e1d7366f7fbc271025b032fddc9e9a7cf6fa60f37fd8502bcb22605785969cb9607229e74708df97af7d78f51b659159a98ce53c876ec4
|
data/README.rdoc
CHANGED
@@ -13,6 +13,10 @@ infrastructure. It offers the following features:
|
|
13
13
|
|
14
14
|
More information can be found on the {project website}[http://xing.github.com/beetle].
|
15
15
|
|
16
|
+
== Release notes
|
17
|
+
|
18
|
+
See {RELEASE_NOTES.rdoc}[https://github.com/xing/beetle/blob/master/RELEASE_NOTES.rdoc]
|
19
|
+
|
16
20
|
== Usage
|
17
21
|
|
18
22
|
=== Configuration
|
data/RELEASE_NOTES.rdoc
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
= Release Notes
|
2
2
|
|
3
|
+
== Version 3.1.0
|
4
|
+
* added more debug log statements
|
5
|
+
* added new callbacks on class Beetle::Handler:
|
6
|
+
* pre_process is called before any message processing commences
|
7
|
+
* post_process is called after all processing has been completed
|
8
|
+
these handlers can be used for logging purposes (such as logjam
|
9
|
+
integration)
|
10
|
+
|
3
11
|
== Version 3.0.0
|
4
12
|
|
5
13
|
* provide client method to setup queues and queue policies.
|
data/beetle.gemspec
CHANGED
@@ -30,7 +30,6 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_runtime_dependency "amqp", "= 1.8.0"
|
31
31
|
s.add_runtime_dependency "activesupport", ">= 2.3.4"
|
32
32
|
|
33
|
-
s.add_development_dependency "uuid4r", ">= 0.1.2"
|
34
33
|
s.add_development_dependency "activerecord", "~> 5.0"
|
35
34
|
s.add_development_dependency "cucumber", "~> 2.4.0"
|
36
35
|
s.add_development_dependency "daemon_controller", "~> 1.2.0"
|
data/lib/beetle/handler.rb
CHANGED
@@ -48,12 +48,20 @@ module Beetle
|
|
48
48
|
@__handler_called__ = true
|
49
49
|
end
|
50
50
|
|
51
|
+
# called before message processing starts
|
52
|
+
def pre_process
|
53
|
+
end
|
54
|
+
|
51
55
|
# called for message processing if no processor was specfied when the handler instance
|
52
56
|
# was created
|
53
57
|
def process
|
54
58
|
logger.info "Beetle: received message #{message.inspect}"
|
55
59
|
end
|
56
60
|
|
61
|
+
# called after message processing finishes
|
62
|
+
def post_process
|
63
|
+
end
|
64
|
+
|
57
65
|
# should not be overriden in subclasses
|
58
66
|
def process_exception(exception) #:nodoc:
|
59
67
|
if @error_callback
|
data/lib/beetle/message.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "timeout"
|
2
|
+
require "securerandom"
|
2
3
|
|
3
4
|
module Beetle
|
4
5
|
# Instances of class Message are created when a subscription callback fires. Class
|
@@ -146,16 +147,8 @@ module Beetle
|
|
146
147
|
end
|
147
148
|
|
148
149
|
# generate uuid for publishing
|
149
|
-
|
150
|
-
|
151
|
-
def self.generate_uuid
|
152
|
-
UUID4R::uuid(4)
|
153
|
-
end
|
154
|
-
rescue LoadError
|
155
|
-
require "securerandom"
|
156
|
-
def self.generate_uuid
|
157
|
-
SecureRandom.uuid
|
158
|
-
end
|
150
|
+
def self.generate_uuid
|
151
|
+
SecureRandom.uuid
|
159
152
|
end
|
160
153
|
|
161
154
|
# whether the publisher has tried sending this message to two servers
|
@@ -264,7 +257,7 @@ module Beetle
|
|
264
257
|
|
265
258
|
# process this message and do not allow any exception to escape to the caller
|
266
259
|
def process(handler)
|
267
|
-
logger.debug "Beetle: processing message #{msg_id}"
|
260
|
+
logger.debug "Beetle: processing message #{msg_id}(#{timestamp})"
|
268
261
|
result = nil
|
269
262
|
begin
|
270
263
|
result = process_internal(handler)
|
data/lib/beetle/r_c.rb
CHANGED
data/lib/beetle/subscriber.rb
CHANGED
@@ -168,13 +168,15 @@ module Beetle
|
|
168
168
|
def create_subscription_callback(queue_name, amqp_queue_name, handler, opts)
|
169
169
|
server = @server
|
170
170
|
lambda do |header, data|
|
171
|
+
msg_id = header.attributes[:message_id]
|
171
172
|
if channel(server).closing?
|
172
|
-
|
173
|
+
timestamp = header.attributes[:timestamp]
|
174
|
+
logger.info "Beetle: ignored message #{msg_id}(#{timestamp}) since channel to server #{server} was already closed"
|
173
175
|
return
|
174
176
|
end
|
175
177
|
begin
|
176
|
-
# logger.debug "Beetle: received message"
|
177
178
|
processor = Handler.create(handler, opts)
|
179
|
+
processor.pre_process
|
178
180
|
message_options = opts.merge(:server => server, :store => @client.deduplication_store)
|
179
181
|
m = Message.new(amqp_queue_name, header, data, message_options)
|
180
182
|
result = m.process(processor)
|
@@ -185,23 +187,25 @@ module Beetle
|
|
185
187
|
sleep 1
|
186
188
|
header.reject(:requeue => true)
|
187
189
|
end
|
190
|
+
logger.debug "Beetle: rejected #{msg_id} RC: #{result.name}"
|
188
191
|
elsif reply_to = header.attributes[:reply_to]
|
189
|
-
|
190
|
-
# require 'ruby-debug'
|
191
|
-
# Debugger.start
|
192
|
-
# debugger
|
192
|
+
logger.debug "Beetle: sending reply to queue #{reply_to} for #{msg_id}"
|
193
193
|
status = result == Beetle::RC::OK ? "OK" : "FAILED"
|
194
194
|
exchange = AMQP::Exchange.new(channel(server), :direct, "")
|
195
195
|
exchange.publish(m.handler_result.to_s, :routing_key => reply_to, :persistent => false, :headers => {:status => status})
|
196
196
|
end
|
197
|
-
# logger.debug "Beetle: processed message"
|
198
197
|
rescue Exception
|
199
198
|
Beetle::reraise_expectation_errors!
|
200
|
-
#
|
201
|
-
logger.error "Beetle: internal error during message processing: #{$!}: #{$!.backtrace.join("\n")}"
|
199
|
+
logger.debug "Beetle: internal error on #{msg_id}: #{$!}: #{$!.backtrace.join("\n")}"
|
202
200
|
ensure
|
203
201
|
# processing_completed swallows all exceptions, so we don't need to protect this call
|
204
202
|
processor.processing_completed
|
203
|
+
logger.debug "Beetle: completed #{msg_id}"
|
204
|
+
begin
|
205
|
+
processor.post_process
|
206
|
+
rescue Exception
|
207
|
+
Beetle::reraise_expectation_errors!
|
208
|
+
end
|
205
209
|
end
|
206
210
|
end
|
207
211
|
end
|
data/lib/beetle/version.rb
CHANGED
@@ -266,6 +266,7 @@ module Beetle
|
|
266
266
|
@sub = client.send(:subscriber)
|
267
267
|
@exception = Exception.new "murks"
|
268
268
|
@handler = Handler.create(lambda{|*args| raise @exception})
|
269
|
+
@handler.instance_eval { def post_process; raise "shoot"; end }
|
269
270
|
@callback = @sub.send(:create_subscription_callback, "my myessage", @queue, @handler, :exceptions => 1)
|
270
271
|
end
|
271
272
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beetle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Kaes
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2019-05
|
15
|
+
date: 2019-07-05 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: bunny
|
@@ -98,20 +98,6 @@ dependencies:
|
|
98
98
|
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
100
|
version: 2.3.4
|
101
|
-
- !ruby/object:Gem::Dependency
|
102
|
-
name: uuid4r
|
103
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
-
requirements:
|
105
|
-
- - ">="
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
version: 0.1.2
|
108
|
-
type: :development
|
109
|
-
prerelease: false
|
110
|
-
version_requirements: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: 0.1.2
|
115
101
|
- !ruby/object:Gem::Dependency
|
116
102
|
name: activerecord
|
117
103
|
requirement: !ruby/object:Gem::Requirement
|