vx-common-amqp 0.3.2 → 0.3.4

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
  SHA1:
3
- metadata.gz: 2251542292e73fae9c86662ae4b6888e0752d238
4
- data.tar.gz: 01e1467005dea28437f1a44eedbb0202d8cc9cea
3
+ metadata.gz: 78c7ba1237547a68870877cf97e753e060e409a8
4
+ data.tar.gz: b176e9a6819bca67fc9244da4fec6186ef6ca94e
5
5
  SHA512:
6
- metadata.gz: a142abeb99aa4f54a4d2135817fe211b28468545dc304b06528de30502951ff897573d21391dbb4b21c245fb729c8bb56028eef5a703ae3692b9cb51e2d18db2
7
- data.tar.gz: b877c2bf0be744fef8f7e11c34e11f19dde8cbe20fcf799dc0e0f70cbaa0e077b8e860b6c7690e4a4cdfb1675b57c794d4ebd00ab6404ac122fb25ecde608eee
6
+ metadata.gz: 5b71ffdcc44ec306ba4fdde80ae3f76df4cc708429a89651a7c7508f7dfb9439ea6280c426cc612a88dee7a04bd07e78ee0b69e1ec55c62b87c46deef5095816
7
+ data.tar.gz: f3f3d0af052ef31fc59c39c12ee69453a5676c961c82814074fa8bd966d6c19dd50017a3e9c07c31ae586529d0a82ec277afa25648fee5f1b1b090662c6977c6
@@ -6,9 +6,9 @@ module Vx
6
6
  module AMQP
7
7
  class Config
8
8
 
9
- attr_accessor :url, :default_exchange_options, :default_queue_options,
9
+ attr_accessor :default_exchange_options, :default_queue_options,
10
10
  :default_publish_options, :default_exchange_type, :logger, :pool_timeout,
11
- :heartbeat, :spawn_attempts, :content_type, :instrumenter, :debug
11
+ :heartbeat, :spawn_attempts, :content_type, :instrumenter, :debug, :on_error
12
12
 
13
13
  def initialize
14
14
  reset!
@@ -27,7 +27,6 @@ module Vx
27
27
  end
28
28
 
29
29
  def reset!
30
- @url = nil
31
30
  @logger = ::Logger.new(STDOUT)
32
31
  @default_exchange_type = :topic
33
32
  @pool_timeout = 0.1
@@ -37,12 +36,13 @@ module Vx
37
36
  @recieving_builder = nil
38
37
  @subscribing_builder = nil
39
38
 
40
- @spawn_attempts = 5
39
+ @spawn_attempts = 1
41
40
 
42
41
  @content_type = 'application/json'
43
42
 
44
43
  @callbacks = {}
45
44
  @instrumenter = nil
45
+ @on_error = ->(e, env){ nil }
46
46
 
47
47
  @default_exchange_options = {
48
48
  durable: true,
@@ -17,8 +17,7 @@ module Vx
17
17
  attr_accessor :delivery_info
18
18
  attr_accessor :properties
19
19
  attr_accessor :channel
20
- attr_accessor :uuid
21
- attr_accessor :payload
20
+ attr_accessor :request_id
22
21
 
23
22
  @@classes = []
24
23
 
@@ -7,9 +7,8 @@ module Vx
7
7
  instrumentation = {
8
8
  consumer_id: self.class.consumer_id,
9
9
  consumer: self.class.consumer_name,
10
+ message_id: properties[:message_id],
10
11
  multiple: multiple,
11
- payload: payload,
12
- uuid: uuid,
13
12
  }
14
13
  self.class.session.channel.ack delivery_info.delivery_tag, multiple
15
14
  instrument("ack.consumer.amqp", instrumentation)
@@ -19,10 +18,9 @@ module Vx
19
18
  instrumentation = {
20
19
  consumer_id: self.class.consumer_id,
21
20
  consumer: self.class.consumer_name,
22
- payload: payload,
21
+ message_id: properties[:message_id],
23
22
  multiple: multiple,
24
23
  requeue: requeue,
25
- uuid: uuid,
26
24
  }
27
25
  self.class.session.channel.ack delivery_info.delivery_tag, multiple, requeue
28
26
  instrument("nack.consumer.amqp", instrumentation)
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  module Vx
2
4
  module Common
3
5
  module AMQP
@@ -10,6 +12,7 @@ module Vx
10
12
  options[:routing_key] = routing_key if routing_key && !options.key?(:routing_key)
11
13
  options[:headers] = headers if headers && !options.key?(:headers)
12
14
  options[:content_type] ||= content_type || config.content_type
15
+ options[:message_id] ||= SecureRandom.uuid
13
16
 
14
17
  x = declare_exchange
15
18
 
@@ -17,10 +20,10 @@ module Vx
17
20
  payload: message,
18
21
  exchange: x.name,
19
22
  consumer: consumer_name,
20
- consumer_id: consumer_id
23
+ consumer_id: consumer_id,
24
+ message_id: options[:message_id]
21
25
  }
22
26
 
23
- instrument("start_publishing.consumer.amqp", instrumentation)
24
27
  instrument("process_publishing.consumer.amqp", instrumentation) do
25
28
  m = serialize_message message, options[:content_type]
26
29
  x.publish m, options
@@ -13,17 +13,19 @@ module Vx
13
13
 
14
14
  def start
15
15
  rs = nil
16
- session.open
16
+ instrumentation = {
17
+ consumer_id: consumer_id,
18
+ consumer: consumer_name
19
+ }
20
+ session.open instrumentation
17
21
  session.with_channel do
18
22
  x = declare_exchange
19
23
  q = declare_queue
20
24
 
21
- instrumentation = {
25
+ instrumentation.merge!(
22
26
  exchange: x.name,
23
27
  queue: q.name,
24
- consumer_id: consumer_id,
25
- consumer: consumer_name
26
- }
28
+ )
27
29
  instrument("start.consumer.amqp", instrumentation)
28
30
 
29
31
  q.bind(x, bind_options)
@@ -62,12 +64,14 @@ module Vx
62
64
  consumer_id: consumer_id,
63
65
  consumer: consumer_name,
64
66
  payload: payload,
65
- uuid: uuid
67
+ message_id: properties[:message_id]
66
68
  }
67
69
 
68
- instrument("start_processing.consumer.amqp", instrumentation)
69
- instrument("process.consumer.amqp", instrumentation) do
70
- result = run_instance delivery_info, properties, payload, uuid
70
+ Instrument.with request_id: uuid do
71
+ instrument("start_processing.consumer.amqp", instrumentation)
72
+ instrument("process.consumer.amqp", instrumentation) do
73
+ result = run_instance delivery_info, properties, payload, uuid
74
+ end
71
75
  end
72
76
 
73
77
  break if result == :shutdown
@@ -81,8 +85,7 @@ module Vx
81
85
  new.tap do |inst|
82
86
  inst.properties = properties
83
87
  inst.delivery_info = delivery_info
84
- inst.uuid = uuid
85
- inst.payload = payload
88
+ inst.request_id = uuid
86
89
  end.perform payload
87
90
  end
88
91
 
@@ -3,8 +3,20 @@ module Vx
3
3
  module AMQP
4
4
  module Instrument
5
5
 
6
+ def self.with(new_params)
7
+ old_params = Thread.current["vx_common_amqp_instrument_with"]
8
+ begin
9
+ Thread.current["vx_common_amqp_instrument_with"] = new_params
10
+ yield if block_given?
11
+ ensure
12
+ Thread.current["vx_common_amqp_instrument_with"] = old_params
13
+ end
14
+ end
15
+
6
16
  def instrument(name, payload, &block)
7
- Common::AMQP.instrument name, payload, &block
17
+ append = Thread.current["vx_common_amqp_instrument_with"]
18
+ append ||= {}
19
+ Common::AMQP.instrument name, payload.merge(append), &block
8
20
  end
9
21
 
10
22
  end
@@ -44,16 +44,22 @@ module Vx
44
44
  end
45
45
  end
46
46
 
47
- def open
47
+ def open(options = {})
48
48
  return self if open?
49
49
 
50
50
  @@session_lock.synchronize do
51
51
  self.class.resume
52
52
 
53
- @conn ||= Bunny.new config.url, heartbeat: :server
53
+ @conn ||= Bunny.new(
54
+ nil, # from ENV['RABBITMQ_URL']
55
+ heartbeat: :server,
56
+ automatically_recover: false
57
+ )
54
58
 
55
59
  instrumentation = {
56
- info: conn_info
60
+ info: conn_info,
61
+ consumer: options[:consumer],
62
+ consumer_id: options[:consumer_id]
57
63
  }
58
64
 
59
65
  instrument("start_connecting.consumer.amqp", instrumentation)
@@ -135,7 +135,7 @@ module Vx
135
135
  new_task.attempt = attempt
136
136
  new_task.start_at = Time.now
137
137
  new_task.freeze
138
- instrument("spawn.consumer.ampq", task: new_task)
138
+ instrument("spawn_thread.consumer.ampq", task: new_task.inspect)
139
139
  new_task
140
140
  end
141
141
  end
@@ -147,14 +147,10 @@ module Vx
147
147
  task.thread.value
148
148
  nil
149
149
  rescue Exception => e
150
- STDERR.puts "#{e.inspect} in #{task.inspect}"
151
- STDERR.puts e.backtrace.map{|b| " #{b}" }.join("\n")
152
-
153
- instrument("exception.consumer.amqp", payload: {
154
- exception: e,
155
- task: task.inspect
156
- })
150
+ $stderr.puts "#{e.inspect} in #{task.inspect}"
151
+ $stderr.puts e.backtrace.map{|b| " #{b}" }.join("\n")
157
152
 
153
+ Common::AMQP.config.on_error.call(e, task: task)
158
154
  e
159
155
  end
160
156
  end
@@ -1,7 +1,7 @@
1
1
  module Vx
2
2
  module Common
3
3
  module AMQP
4
- VERSION = "0.3.2"
4
+ VERSION = "0.3.4"
5
5
  end
6
6
  end
7
7
  end
@@ -45,6 +45,7 @@ describe "Run in multithread environment", slow: true, jruby: true do
45
45
  before do
46
46
  $mtest_mutex = Mutex.new
47
47
  $mtest_collected = []
48
+ Vx::Common::AMQP.config.spawn_attempts = 5
48
49
  end
49
50
 
50
51
  after do
data/spec/spec_helper.rb CHANGED
@@ -2,13 +2,17 @@ require File.expand_path '../../lib/vx/common/amqp', __FILE__
2
2
 
3
3
  require 'rspec/autorun'
4
4
 
5
- ENV['VX_COMMON_AMQP_DEBUG'] = "1"
5
+ #ENV['VX_COMMON_AMQP_DEBUG'] = "1"
6
6
 
7
7
  Dir[File.expand_path("../..", __FILE__) + "/spec/support/**.rb"].each {|f| require f}
8
8
 
9
9
  RSpec.configure do |config|
10
10
  config.mock_with :rr
11
11
 
12
+ config.before(:each) do
13
+ Vx::Common::AMQP.config.reset!
14
+ end
15
+
12
16
  config.after(:suite) do
13
17
  Vx::Common::AMQP.close
14
18
  end
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '>= 1.9.3'
22
22
 
23
- spec.add_runtime_dependency "bunny", "~> 1.1.0"
23
+ spec.add_runtime_dependency "bunny", "~> 1.1.1"
24
24
  spec.add_runtime_dependency "vx-common-rack-builder", "~> 0.0.2"
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 1.3"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vx-common-amqp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Galinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-30 00:00:00.000000000 Z
11
+ date: 2014-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.0
19
+ version: 1.1.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.0
26
+ version: 1.1.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: vx-common-rack-builder
29
29
  requirement: !ruby/object:Gem::Requirement