beetle 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8a90e706d339d2a9e458c0b82113b58d5be98243fa9c9adbeaafb12fadeeb3d1
4
- data.tar.gz: d89db5e989cfa51558ebda9db9c6acd10170c27fda0135378157e252570be626
3
+ metadata.gz: 81efac323bc4a748a3e15d4ca496fa826cc75338b6841d28d22970cd38bf7a4d
4
+ data.tar.gz: f34c106da764a475f0396b225482a16083b00b659270d58b7b04c6887b59c6fd
5
5
  SHA512:
6
- metadata.gz: ee25e895ba9f3f38afe6d4985297435d93cab432b0dd8d483b8890a25b58f89d9993fac429c0d710bfeed49568dd1a28c948a0241297c1352ad2200987e0aebc
7
- data.tar.gz: d1dff384a6bd1da983b2c400e524970d086759ae7c24106089ef0e36a167b7cb9b8769f6938b96b9a5b78435abb945cddba432b14755716f67c96e508783ef51
6
+ metadata.gz: 933a4abbd1748fca969f40bd1c2cd304302ce70ec52251c0e1af66b491878644bb6be881686d9899718836f709caeba036bab2a0e0df5f4d9824233af7082dd7
7
+ data.tar.gz: 4b215e85dd35302221e1d7366f7fbc271025b032fddc9e9a7cf6fa60f37fd8502bcb22605785969cb9607229e74708df97af7d78f51b659159a98ce53c876ec4
@@ -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
@@ -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.
@@ -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"
@@ -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
@@ -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
- begin
150
- require "uuid4r"
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)
@@ -3,6 +3,8 @@ module Beetle
3
3
 
4
4
  # message processing result return codes
5
5
  class ReturnCode
6
+ attr_reader :name
7
+
6
8
  def initialize(*args)
7
9
  @reject = args.delete :reject
8
10
  @failure = args.delete :failure
@@ -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
- logger.info "Beetle: ignoring message since channel to server #{server} already closed"
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
- # logger.info "Beetle: sending reply to queue #{reply_to}"
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
- # swallow all exceptions
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
@@ -1,3 +1,3 @@
1
1
  module Beetle
2
- VERSION = "3.0.0"
2
+ VERSION = "3.1.0"
3
3
  end
@@ -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.0.0
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-27 00:00:00.000000000 Z
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