liebre 0.1.14 → 0.1.19
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/Gemfile.lock +1 -1
- data/lib/liebre/common/utils.rb +5 -1
- data/lib/liebre/publisher.rb +9 -6
- data/lib/liebre/runner.rb +8 -4
- data/lib/liebre/runner/consumers.rb +13 -3
- data/lib/liebre/runner/starter.rb +6 -2
- data/lib/liebre/runner/starter/consumer.rb +37 -8
- data/lib/liebre/runner/starter/rpc.rb +15 -7
- data/lib/liebre/version.rb +1 -1
- data/spec/liebre/publisher_spec.rb +1 -0
- data/spec/liebre/runner/consumers_spec.rb +2 -2
- data/spec/liebre/runner/starter/consumer_spec.rb +8 -2
- data/spec/liebre/runner/starter/rpc_spec.rb +8 -2
- data/spec/liebre/runner/starter_spec.rb +18 -7
- 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: 4f381b98ce6cd5cce5fbab983cc33835d3cb00b3
|
4
|
+
data.tar.gz: af785cc0a08bd0f0f50b837f3784377fdfb3e96c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5ca6a8a9998ce0304141a4ba9ea8a0fba34af5b3ab4f203bdf16479a47094ebfa8cdb31839f5e5896e90e5539d153a7676165590788bc7e7f37641f8ecc406f
|
7
|
+
data.tar.gz: f63a7728f1897337ab44ae4465c2614152795dd348226d76cc2a728ef51ea91003e3dbd4e7bd196ec7014358b3444c85e4cf0a4319c3a34890de58dce59a4bca
|
data/Gemfile.lock
CHANGED
data/lib/liebre/common/utils.rb
CHANGED
data/lib/liebre/publisher.rb
CHANGED
@@ -8,7 +8,7 @@ module Liebre
|
|
8
8
|
def enqueue message, options = {}
|
9
9
|
with_connection do
|
10
10
|
exchange = exchange_for default_channel
|
11
|
-
logger.debug "Liebre
|
11
|
+
logger.debug "Liebre# Publishing '#{message}' with '#{options}' to exchange: #{exchange.name}"
|
12
12
|
exchange.publish message, options
|
13
13
|
end
|
14
14
|
end
|
@@ -22,12 +22,12 @@ module Liebre
|
|
22
22
|
reply_queue.subscribe(:block => false) do |delivery_info, meta, payload|
|
23
23
|
if meta[:correlation_id] == correlation_id
|
24
24
|
result = payload
|
25
|
-
logger.debug "Liebre
|
25
|
+
logger.debug "Liebre# Received response '#{result}'"
|
26
26
|
channel.consumers[delivery_info.consumer_tag].cancel
|
27
27
|
end
|
28
28
|
end
|
29
29
|
exchange = exchange_for channel
|
30
|
-
logger.debug "Liebre
|
30
|
+
logger.debug "Liebre# Publishing '#{message}' with '#{options}' to exchange: #{exchange.name}"
|
31
31
|
exchange.publish message, options
|
32
32
|
begin
|
33
33
|
Timeout.timeout(Liebre.config.rpc_request_timeout) do
|
@@ -57,9 +57,12 @@ module Liebre
|
|
57
57
|
|
58
58
|
def with_rpc_channel
|
59
59
|
with_connection do
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
Common::Utils.mutex_sync do
|
61
|
+
channel = connection_manager.get(connection_name).create_channel
|
62
|
+
channel.prefetch 1
|
63
|
+
yield(channel)
|
64
|
+
channel.close
|
65
|
+
end
|
63
66
|
end
|
64
67
|
end
|
65
68
|
|
data/lib/liebre/runner.rb
CHANGED
@@ -28,26 +28,30 @@ module Liebre
|
|
28
28
|
|
29
29
|
def do_shutdown
|
30
30
|
Thread.start do
|
31
|
-
logger.info("Liebre
|
31
|
+
logger.info("Liebre# Closing AMQP connection...")
|
32
|
+
consumers.stop
|
32
33
|
connection_manager.stop
|
33
|
-
logger.info("Liebre
|
34
|
+
logger.info("Liebre# AMQP connection closed")
|
34
35
|
end.join
|
35
36
|
end
|
36
37
|
|
37
38
|
def start_consumers
|
38
|
-
consumers = Consumers.new(connection_manager)
|
39
39
|
consumers.start_all
|
40
40
|
end
|
41
41
|
|
42
42
|
def log_and_wait e
|
43
43
|
logger.warn(e)
|
44
44
|
sleep(retry_interval)
|
45
|
-
logger.warn("Liebre
|
45
|
+
logger.warn("Liebre# Retrying connection")
|
46
46
|
end
|
47
47
|
|
48
48
|
def logger
|
49
49
|
Liebre.logger
|
50
50
|
end
|
51
|
+
|
52
|
+
def consumers
|
53
|
+
@consumers ||= Consumers.new(connection_manager)
|
54
|
+
end
|
51
55
|
|
52
56
|
def connection_manager
|
53
57
|
@connection_manager ||= ConnectionManager.instance
|
@@ -4,6 +4,7 @@ module Liebre
|
|
4
4
|
|
5
5
|
def initialize connection_manager
|
6
6
|
@connection_manager = connection_manager
|
7
|
+
@threads = []
|
7
8
|
end
|
8
9
|
|
9
10
|
def consumer_names
|
@@ -11,7 +12,15 @@ module Liebre
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def start_all
|
14
|
-
consumer_names.each
|
15
|
+
consumer_names.each do |name|
|
16
|
+
start(name)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def stop
|
21
|
+
threads.each do |starter|
|
22
|
+
starter.stop
|
23
|
+
end
|
15
24
|
end
|
16
25
|
|
17
26
|
def start name
|
@@ -19,7 +28,8 @@ module Liebre
|
|
19
28
|
num_threads = params.fetch("num_threads", 1)
|
20
29
|
num_threads.times do
|
21
30
|
starter = Starter.new(connection_manager, params)
|
22
|
-
starter.
|
31
|
+
starter.start
|
32
|
+
threads << starter
|
23
33
|
end
|
24
34
|
end
|
25
35
|
|
@@ -29,7 +39,7 @@ module Liebre
|
|
29
39
|
Liebre.config.consumers
|
30
40
|
end
|
31
41
|
|
32
|
-
attr_reader :connection_manager
|
42
|
+
attr_reader :connection_manager, :threads
|
33
43
|
|
34
44
|
end
|
35
45
|
end
|
@@ -10,31 +10,60 @@ module Liebre
|
|
10
10
|
@config = config
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def start
|
14
14
|
initialize_error_queue
|
15
15
|
initialize_queue
|
16
16
|
end
|
17
|
+
|
18
|
+
def stop
|
19
|
+
if @consumer
|
20
|
+
@consumer.cancel
|
21
|
+
channel.close
|
22
|
+
end
|
23
|
+
end
|
17
24
|
|
18
25
|
private
|
19
26
|
|
20
27
|
def initialize_queue
|
21
|
-
queue.subscribe(:manual_ack => true) do |info, meta, payload|
|
28
|
+
@consumer = queue.subscribe(:manual_ack => true) do |info, meta, payload|
|
22
29
|
response = :reject
|
30
|
+
debug_string = ""
|
31
|
+
elapsed_time = nil
|
23
32
|
begin
|
24
|
-
|
33
|
+
debug_string = "Liebre# Received message for #{klass.name}(#{queue.name}): #{payload} - #{meta}"
|
34
|
+
start_at = Time.now
|
25
35
|
consumer = klass.new(payload, meta)
|
26
36
|
response = consumer.call
|
27
|
-
|
37
|
+
elapsed_time = (Time.now - start_at).to_f * 1000
|
38
|
+
rescue StandardError => e
|
28
39
|
response = :error
|
29
|
-
logger.error
|
30
|
-
|
31
|
-
|
40
|
+
logger.error error_string(e, payload, meta)
|
41
|
+
rescue Exception => e
|
42
|
+
response = :error
|
43
|
+
logger.error error_string(e, payload, meta)
|
44
|
+
handler.respond response, info
|
45
|
+
raise e
|
32
46
|
ensure
|
33
|
-
|
47
|
+
debug_string += "\nLiebre# Responding with #{response}"
|
48
|
+
log_result debug_string, elapsed_time
|
34
49
|
handler.respond response, info
|
35
50
|
end
|
36
51
|
end
|
37
52
|
end
|
53
|
+
|
54
|
+
def log_result debug_string, elapsed_time
|
55
|
+
time_string = "\nLiebre# Elapsed time #{elapsed_time} ms"
|
56
|
+
if logger.debug?
|
57
|
+
logger.debug debug_string + time_string
|
58
|
+
else
|
59
|
+
logger.info "Liebre# Received message for #{klass.name}(#{queue.name})" + time_string
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def error_string error, payload, meta
|
64
|
+
"Liebre# Error while processing #{klass.name}(#{queue.name}): #{payload} - #{meta}" +
|
65
|
+
error.inspect + error.backtrace.join("\n")
|
66
|
+
end
|
38
67
|
|
39
68
|
def initialize_error_queue
|
40
69
|
Resources.new(connection, error_config).queue
|
@@ -3,15 +3,23 @@ module Liebre
|
|
3
3
|
class Starter
|
4
4
|
class RPC < Consumer
|
5
5
|
|
6
|
-
def
|
7
|
-
queue.subscribe(:manual_ack => false) do |_info, meta, payload|
|
6
|
+
def start
|
7
|
+
@consumer = queue.subscribe(:manual_ack => false) do |_info, meta, payload|
|
8
8
|
begin
|
9
|
-
|
9
|
+
debug_string = "Liebre# Received message for #{klass.name}(#{queue.name}): #{payload} - #{meta}"
|
10
|
+
start_at = Time.now
|
10
11
|
consumer = klass.new(payload, meta, callback(meta))
|
11
12
|
consumer.call
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
elapsed_time = (Time.now - start_at).to_f * 1000
|
14
|
+
log_result debug_string, elapsed_time
|
15
|
+
rescue StandardError => e
|
16
|
+
response = :error
|
17
|
+
logger.error error_string(payload, meta)
|
18
|
+
rescue Exception => e
|
19
|
+
response = :error
|
20
|
+
logger.error error_string(payload, meta)
|
21
|
+
handler.respond response, info
|
22
|
+
raise e
|
15
23
|
end
|
16
24
|
end
|
17
25
|
end
|
@@ -26,7 +34,7 @@ module Liebre
|
|
26
34
|
}
|
27
35
|
|
28
36
|
lambda do |response|
|
29
|
-
logger.debug "Liebre
|
37
|
+
logger.debug "Liebre# Responding with #{response}"
|
30
38
|
exchange.publish(response, opts)
|
31
39
|
end
|
32
40
|
end
|
data/lib/liebre/version.rb
CHANGED
@@ -65,6 +65,7 @@ RSpec.describe Liebre::Publisher do
|
|
65
65
|
before do
|
66
66
|
expect(connection_manager).to receive(:get).with(:default).and_return connection
|
67
67
|
expect(connection).to receive(:create_channel).and_return channel
|
68
|
+
expect(channel).to receive(:prefetch).with 1
|
68
69
|
expect(channel).to receive(:queue).with(reply_queue_name, :exclusive => true, :auto_delete => true).
|
69
70
|
and_return reply_queue
|
70
71
|
expect(channel).to receive(:close)
|
@@ -49,8 +49,8 @@ RSpec.describe Liebre::Runner::Consumers do
|
|
49
49
|
expect(Liebre::Runner::Starter).to receive(:new).
|
50
50
|
with(conn, second_expected_config).and_return(second_starter)
|
51
51
|
|
52
|
-
expect(first_starter ).to receive(:
|
53
|
-
expect(second_starter).to receive(:
|
52
|
+
expect(first_starter ).to receive(:start).exactly(3).times
|
53
|
+
expect(second_starter).to receive(:start)
|
54
54
|
|
55
55
|
subject.start_all
|
56
56
|
end
|
@@ -74,9 +74,10 @@ RSpec.describe Liebre::Runner::Starter::Consumer do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
let(:exchange) { double 'exchange' }
|
77
|
-
let(:queue) { double 'queue' }
|
77
|
+
let(:queue) { double 'queue', :name => "queue" }
|
78
78
|
let(:error_queue) { double 'error_queue' }
|
79
79
|
let(:channel) { double 'channel' }
|
80
|
+
let(:consumer) { double 'consumer' }
|
80
81
|
let(:payload) { "the_payload" }
|
81
82
|
|
82
83
|
subject { described_class.new(connection, config) }
|
@@ -120,6 +121,7 @@ RSpec.describe Liebre::Runner::Starter::Consumer do
|
|
120
121
|
|
121
122
|
expect(queue).to receive :subscribe do |&block|
|
122
123
|
block.call(deliver_info, meta, payload)
|
124
|
+
consumer
|
123
125
|
end
|
124
126
|
|
125
127
|
expect(consumer_class).to receive :new do |given_payload, given_meta|
|
@@ -133,7 +135,11 @@ RSpec.describe Liebre::Runner::Starter::Consumer do
|
|
133
135
|
|
134
136
|
expect(handler).to receive(:respond).with ack, deliver_info
|
135
137
|
|
136
|
-
subject.
|
138
|
+
subject.start
|
139
|
+
|
140
|
+
expect(consumer).to receive(:cancel)
|
141
|
+
expect(channel).to receive(:close)
|
142
|
+
subject.stop
|
137
143
|
end
|
138
144
|
|
139
145
|
end
|
@@ -29,8 +29,9 @@ RSpec.describe Liebre::Runner::Starter::RPC do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
let(:exchange) { double 'exchange' }
|
32
|
-
let(:queue) { double 'queue' }
|
32
|
+
let(:queue) { double 'queue', :name => "queue" }
|
33
33
|
let(:channel) { double 'channel', :default_exchange => exchange }
|
34
|
+
let(:consumer) { double 'consumer' }
|
34
35
|
let(:payload) { "the_payload" }
|
35
36
|
let(:response) { "the_response" }
|
36
37
|
|
@@ -76,6 +77,7 @@ RSpec.describe Liebre::Runner::Starter::RPC do
|
|
76
77
|
|
77
78
|
expect(queue).to receive :subscribe do |&block|
|
78
79
|
block.call(deliver_info, meta, payload)
|
80
|
+
consumer
|
79
81
|
end
|
80
82
|
|
81
83
|
expect(rpc_class).to receive :new do |given_payload, given_meta, callback|
|
@@ -88,7 +90,11 @@ RSpec.describe Liebre::Runner::Starter::RPC do
|
|
88
90
|
|
89
91
|
expect(rpc_instance).to receive(:call)
|
90
92
|
|
91
|
-
subject.
|
93
|
+
subject.start
|
94
|
+
|
95
|
+
expect(consumer).to receive(:cancel)
|
96
|
+
expect(channel).to receive(:close)
|
97
|
+
subject.stop
|
92
98
|
end
|
93
99
|
|
94
100
|
end
|
@@ -3,7 +3,8 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe Liebre::Runner::Starter do
|
4
4
|
|
5
5
|
let(:connection_manager) { double 'connection_manager' }
|
6
|
-
let(:connection)
|
6
|
+
let(:connection) { double 'connection' }
|
7
|
+
let(:consumer) { double 'consumer' }
|
7
8
|
|
8
9
|
let(:rpc) { true }
|
9
10
|
|
@@ -20,14 +21,19 @@ RSpec.describe Liebre::Runner::Starter do
|
|
20
21
|
|
21
22
|
let(:rpc_instance) { double 'rpc_instance' }
|
22
23
|
|
23
|
-
describe '#
|
24
|
+
describe '#start and #stop' do
|
24
25
|
|
25
26
|
it 'calls the rpc_class with a callback' do
|
26
27
|
expect(connection_manager).to receive(:get).with(:rpc).and_return connection
|
27
28
|
expect(described_class::RPC).to receive(:new).with(connection, config).and_return rpc_instance
|
28
|
-
expect(rpc_instance).to receive(:
|
29
|
+
expect(rpc_instance).to receive(:start).and_return consumer
|
29
30
|
|
30
|
-
subject.
|
31
|
+
subject.start
|
32
|
+
|
33
|
+
expect(consumer).to receive(:stop)
|
34
|
+
|
35
|
+
subject.stop
|
36
|
+
|
31
37
|
end
|
32
38
|
end
|
33
39
|
end
|
@@ -44,14 +50,19 @@ RSpec.describe Liebre::Runner::Starter do
|
|
44
50
|
}
|
45
51
|
end
|
46
52
|
|
47
|
-
describe '#
|
53
|
+
describe '#start and #stop' do
|
48
54
|
|
49
55
|
it 'calls the rpc_class with a callback' do
|
50
56
|
expect(connection_manager).to receive(:get).with(:default).and_return connection
|
51
57
|
expect(described_class::Consumer).to receive(:new).with(connection, config).and_return consumer
|
52
|
-
expect(consumer).to receive(:
|
58
|
+
expect(consumer).to receive(:start).and_return consumer
|
53
59
|
|
54
|
-
subject.
|
60
|
+
subject.start
|
61
|
+
|
62
|
+
expect(consumer).to receive(:stop)
|
63
|
+
|
64
|
+
subject.stop
|
65
|
+
|
55
66
|
end
|
56
67
|
end
|
57
68
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: liebre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.19
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jcabotc
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-01-
|
12
|
+
date: 2017-01-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bunny
|