vx-consumer 0.1.2 → 0.1.3
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/.travis.yml +2 -3
- data/README.md +1 -0
- data/lib/vx/consumer/ack.rb +2 -0
- data/lib/vx/consumer/publish.rb +6 -2
- data/lib/vx/consumer/session.rb +22 -4
- data/lib/vx/consumer/subscribe.rb +2 -6
- data/lib/vx/consumer/subscriber.rb +2 -1
- data/lib/vx/consumer/version.rb +1 -1
- data/spec/lib/consumer_spec.rb +13 -5
- data/spec/support/test_consumers.rb +5 -2
- data/vx-consumer.gemspec +2 -2
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4ba824b3b9047df1c4d5fe74e531bdc1f884535
|
4
|
+
data.tar.gz: f31036250c862fb2975c7ff2bb52cf8674812351
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6b60d2dd3c3bdc6aeeced8807b354aff3d0815e35d87b1d2f0cd76d895981dc0c532f80343dc854f26ecfcff825980bcecce03b2acc1db1ff9545daa4a1049b
|
7
|
+
data.tar.gz: bde55043df8b5d64668643cfedaeeb8caacb48bbbabf5d2f9ace3c47bc5f2b1d7aef062f03b9314b4ab079f18e79871a25ee894962c4137f871e3d038abbce26
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
data/lib/vx/consumer/ack.rb
CHANGED
@@ -7,6 +7,7 @@ module Vx
|
|
7
7
|
consumer: self.class.params.consumer_name,
|
8
8
|
properties: properties,
|
9
9
|
multiple: multiple,
|
10
|
+
channel: _channel.id
|
10
11
|
}
|
11
12
|
if _channel.open?
|
12
13
|
_channel.ack delivery_info.delivery_tag, multiple
|
@@ -24,6 +25,7 @@ module Vx
|
|
24
25
|
properties: properties,
|
25
26
|
multiple: multiple,
|
26
27
|
requeue: requeue,
|
28
|
+
channel: channel.id
|
27
29
|
}
|
28
30
|
if _channel.open?
|
29
31
|
_channel.ack delivery_info.delivery_tag, multiple, requeue
|
data/lib/vx/consumer/publish.rb
CHANGED
@@ -24,8 +24,8 @@ module Vx
|
|
24
24
|
}
|
25
25
|
|
26
26
|
with_middlewares :pub, instrumentation do
|
27
|
-
|
28
|
-
|
27
|
+
with_channel do |ch|
|
28
|
+
instrument("process_publishing", instrumentation.merge(channel: ch.id)) do
|
29
29
|
encoded = encode_payload(payload, options[:content_type])
|
30
30
|
x = session.declare_exchange ch, name, params.exchange_options
|
31
31
|
x.publish encoded, options
|
@@ -36,6 +36,10 @@ module Vx
|
|
36
36
|
|
37
37
|
private
|
38
38
|
|
39
|
+
def with_channel
|
40
|
+
yield session.pub_channel
|
41
|
+
end
|
42
|
+
|
39
43
|
def encode_payload(payload, content_type)
|
40
44
|
Serializer.pack(content_type, payload)
|
41
45
|
end
|
data/lib/vx/consumer/session.rb
CHANGED
@@ -40,9 +40,9 @@ module Vx
|
|
40
40
|
def close
|
41
41
|
if open?
|
42
42
|
@@session_lock.synchronize do
|
43
|
-
instrument("
|
43
|
+
instrument("closing_connection", info: conn_info)
|
44
44
|
|
45
|
-
instrument("
|
45
|
+
instrument("close_connection", info: conn_info) do
|
46
46
|
begin
|
47
47
|
conn.close
|
48
48
|
while conn.status != :closed
|
@@ -98,10 +98,23 @@ module Vx
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
-
def
|
101
|
+
def pub_channel
|
102
102
|
assert_connection_is_open
|
103
103
|
|
104
|
-
|
104
|
+
key = :vx_consumer_session_pub_channel
|
105
|
+
ch = Thread.current[key]
|
106
|
+
|
107
|
+
if ch and ch.closed?
|
108
|
+
ch = nil
|
109
|
+
end
|
110
|
+
|
111
|
+
unless ch
|
112
|
+
ch = conn.create_channel
|
113
|
+
assign_error_handlers_to_channel(ch)
|
114
|
+
ch
|
115
|
+
end
|
116
|
+
|
117
|
+
ch
|
105
118
|
end
|
106
119
|
|
107
120
|
def declare_exchange(ch, name, options = nil)
|
@@ -118,6 +131,11 @@ module Vx
|
|
118
131
|
ch.queue name, options
|
119
132
|
end
|
120
133
|
|
134
|
+
def assign_error_handlers_to_channel(ch)
|
135
|
+
ch.on_uncaught_exception {|e, c| ::Vx::Consumer.exception_handler(e, consumer: c) }
|
136
|
+
ch.on_error {|e, c| ::Vx::Consumer.exception_handler(e, consumer: c) }
|
137
|
+
end
|
138
|
+
|
121
139
|
private
|
122
140
|
|
123
141
|
def assert_connection_is_open
|
@@ -27,6 +27,7 @@ module Vx
|
|
27
27
|
consumer: params.consumer_name,
|
28
28
|
payload: payload,
|
29
29
|
properties: properties,
|
30
|
+
channel: channel.id
|
30
31
|
}
|
31
32
|
|
32
33
|
with_middlewares :sub, instrumentation do
|
@@ -60,7 +61,7 @@ module Vx
|
|
60
61
|
session.open
|
61
62
|
|
62
63
|
ch = session.conn.create_channel
|
63
|
-
assign_error_handlers_to_channel(ch)
|
64
|
+
session.assign_error_handlers_to_channel(ch)
|
64
65
|
ch.prefetch configuration.prefetch
|
65
66
|
|
66
67
|
x = session.declare_exchange ch, params.exchange_name, params.exchange_options
|
@@ -80,11 +81,6 @@ module Vx
|
|
80
81
|
[ch, q]
|
81
82
|
end
|
82
83
|
|
83
|
-
def assign_error_handlers_to_channel(ch)
|
84
|
-
ch.on_uncaught_exception {|e, c| Consumer.exception_handler(e, consumer: c) }
|
85
|
-
ch.on_error {|e, c| Consumer.exception_handler(e, consumer: c) }
|
86
|
-
end
|
87
|
-
|
88
84
|
end
|
89
85
|
end
|
90
86
|
end
|
@@ -32,11 +32,12 @@ module Vx
|
|
32
32
|
def call(*args)
|
33
33
|
in_progress do
|
34
34
|
@on_delivery.call(*args) if @on_delivery
|
35
|
+
sleep 0
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
38
39
|
def cancel
|
39
|
-
instrument('cancel_consumer', consumer: vx_consumer_name)
|
40
|
+
instrument('cancel_consumer', consumer: vx_consumer_name, channel: channel.id)
|
40
41
|
super
|
41
42
|
channel.close unless channel.closed?
|
42
43
|
end
|
data/lib/vx/consumer/version.rb
CHANGED
data/spec/lib/consumer_spec.rb
CHANGED
@@ -4,6 +4,10 @@ require 'spec_helper'
|
|
4
4
|
|
5
5
|
describe Vx::Consumer do
|
6
6
|
|
7
|
+
before do
|
8
|
+
Bob.timeout = 0.1
|
9
|
+
end
|
10
|
+
|
7
11
|
context "test consumer declaration" do
|
8
12
|
context "alice" do
|
9
13
|
subject { Alice.params }
|
@@ -22,7 +26,7 @@ describe Vx::Consumer do
|
|
22
26
|
its(:exchange_name) { should eq 'bob_exch' }
|
23
27
|
its(:exchange_options) { should eq(durable: false, auto_delete: true, type: :topic) }
|
24
28
|
its(:queue_name) { should eq 'bob_queue' }
|
25
|
-
its(:queue_options) { should eq(
|
29
|
+
its(:queue_options) { should eq(durable: false, auto_delete: true) }
|
26
30
|
its(:ack) { should be_true }
|
27
31
|
its(:routing_key) { should be_nil }
|
28
32
|
its(:content_type) { should eq 'application/json' }
|
@@ -60,7 +64,7 @@ describe Vx::Consumer do
|
|
60
64
|
|
61
65
|
Timeout.timeout(10) do
|
62
66
|
loop do
|
63
|
-
break if Bob._collected.size
|
67
|
+
break if Bob._collected.size >= 90
|
64
68
|
sleep 0.1
|
65
69
|
end
|
66
70
|
end
|
@@ -107,20 +111,23 @@ describe Vx::Consumer do
|
|
107
111
|
end
|
108
112
|
|
109
113
|
it "should work with graceful shutdown" do
|
114
|
+
Bob.timeout = 1
|
115
|
+
|
110
116
|
consumer = Bob.subscribe
|
111
117
|
10.times do |n|
|
112
118
|
Bob.publish a: n
|
113
119
|
end
|
114
120
|
|
115
|
-
sleep 0.
|
116
|
-
Timeout.timeout(
|
121
|
+
sleep 0.1
|
122
|
+
Timeout.timeout(5) do
|
117
123
|
consumer.graceful_shutdown
|
118
124
|
end
|
119
125
|
|
120
|
-
expect(Bob._collected).
|
126
|
+
expect(Bob._collected).to_not be_empty
|
121
127
|
end
|
122
128
|
|
123
129
|
it "running? should be true when consumer process task" do
|
130
|
+
Bob.timeout = 1
|
124
131
|
consumer = Bob.subscribe
|
125
132
|
|
126
133
|
expect(consumer.running?).to be_false
|
@@ -136,6 +143,7 @@ describe Vx::Consumer do
|
|
136
143
|
consumer.cancel
|
137
144
|
end
|
138
145
|
|
146
|
+
sleep 0.1
|
139
147
|
expect(consumer.running?).to be_false
|
140
148
|
end
|
141
149
|
|
@@ -14,13 +14,16 @@ class Bob
|
|
14
14
|
include Vx::Consumer
|
15
15
|
|
16
16
|
exchange 'bob_exch', durable: false, auto_delete: true
|
17
|
-
queue 'bob_queue',
|
17
|
+
queue 'bob_queue', durable: false, auto_delete: true
|
18
18
|
ack
|
19
19
|
|
20
20
|
@@m = Mutex.new
|
21
21
|
@@collected = []
|
22
22
|
|
23
23
|
class << self
|
24
|
+
|
25
|
+
attr_accessor :timeout
|
26
|
+
|
24
27
|
def _collected
|
25
28
|
@@collected
|
26
29
|
end
|
@@ -40,7 +43,7 @@ class Bob
|
|
40
43
|
|
41
44
|
def perform(payload)
|
42
45
|
self.class._save payload
|
43
|
-
sleep
|
46
|
+
sleep self.class.timeout
|
44
47
|
ack
|
45
48
|
end
|
46
49
|
end
|
data/vx-consumer.gemspec
CHANGED
@@ -18,10 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency 'bunny', '= 1.
|
21
|
+
spec.add_runtime_dependency 'bunny', '= 1.2.2'
|
22
22
|
spec.add_runtime_dependency 'vx-common-rack-builder', '>= 0.0.2'
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.5"
|
25
25
|
spec.add_development_dependency "rake"
|
26
|
-
spec.add_development_dependency "rspec"
|
26
|
+
spec.add_development_dependency "rspec", '2.14.1'
|
27
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vx-consumer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
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-
|
11
|
+
date: 2014-06-17 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.
|
19
|
+
version: 1.2.2
|
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.
|
26
|
+
version: 1.2.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: vx-common-rack-builder
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - '
|
73
|
+
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 2.14.1
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - '
|
80
|
+
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.14.1
|
83
83
|
description: ' description '
|
84
84
|
email:
|
85
85
|
- dima.exe@gmail.com
|
@@ -134,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
134
|
version: '0'
|
135
135
|
requirements: []
|
136
136
|
rubyforge_project:
|
137
|
-
rubygems_version: 2.
|
137
|
+
rubygems_version: 2.2.2
|
138
138
|
signing_key:
|
139
139
|
specification_version: 4
|
140
140
|
summary: summary
|