freddy 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/freddy.gemspec +1 -1
- data/lib/freddy.rb +1 -1
- data/lib/freddy/consumer.rb +8 -4
- data/spec/integration/concurrency_spec.rb +61 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d677aed926ebfba37c90931e9cf1945e68b9b25
|
4
|
+
data.tar.gz: cf670f4b31d6d15434edf9f53876cf447f6a4b5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71e4c1cfe3a93a877fd05f04962c2c63b14e9bf9d5b14bbef0657855e649d30aa90c152c224d059030932e98c5e7b80c7474cf8238eb6425965ed138f9d62837
|
7
|
+
data.tar.gz: 2f84c367f1b5d2bfb6108962343c92ef8dc160479bd79d14b1bdf166ef6f4fa9608a5a71e9299664a9b00b09cab1102f2e1b93c859d383544099ac2c27da1e8b
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -145,7 +145,7 @@ The underlying bunny implementation uses 1 responder thread by default. This mea
|
|
145
145
|
|
146
146
|
This is especially devious when using `deliver_with_response` in a responder because `deliver_with_response` creates a new anonymous responder which will not receive the response if the parent responder uses a sleep call.
|
147
147
|
|
148
|
-
To resolve this problem *freddy*
|
148
|
+
To resolve this problem *freddy* creates separate threads for processing. Read more from <http://rubybunny.info/articles/concurrency.html>.
|
149
149
|
|
150
150
|
## Credits
|
151
151
|
|
data/freddy.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "freddy"
|
7
|
-
spec.version = '0.3.
|
7
|
+
spec.version = '0.3.3'
|
8
8
|
spec.authors = ["Urmas Talimaa"]
|
9
9
|
spec.email = ["urmas.talimaa@gmail.com"]
|
10
10
|
spec.description = %q{Messaging API}
|
data/lib/freddy.rb
CHANGED
data/lib/freddy/consumer.rb
CHANGED
@@ -21,9 +21,11 @@ class Freddy
|
|
21
21
|
|
22
22
|
def consume_from_queue(queue, options = {}, &block)
|
23
23
|
consumer = queue.subscribe options do |delivery_info, properties, payload|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
Thread.new do
|
25
|
+
parsed_payload = parse_payload(payload)
|
26
|
+
log_receive_event(queue.name, parsed_payload)
|
27
|
+
block.call parsed_payload, Delivery.new(delivery_info, properties)
|
28
|
+
end
|
27
29
|
end
|
28
30
|
@logger.debug "Consuming messages on #{queue.name}"
|
29
31
|
ResponderHandler.new consumer, @channel
|
@@ -32,7 +34,9 @@ class Freddy
|
|
32
34
|
def tap_into(pattern, &block)
|
33
35
|
queue = @channel.queue("", exclusive: true).bind(@topic_exchange, routing_key: pattern)
|
34
36
|
consumer = queue.subscribe do |delivery_info, properties, payload|
|
35
|
-
|
37
|
+
Thread.new do
|
38
|
+
block.call parse_payload(payload), delivery_info.routing_key
|
39
|
+
end
|
36
40
|
end
|
37
41
|
@logger.debug "Tapping into messages that match #{pattern}"
|
38
42
|
ResponderHandler.new consumer, @channel
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Concurrency' do
|
4
|
+
let(:freddy) { Freddy.build(logger, config) }
|
5
|
+
|
6
|
+
it 'supports nested calls in #respond_to' do
|
7
|
+
freddy.respond_to 'Concurrency1' do |payload, msg_handler|
|
8
|
+
begin
|
9
|
+
result = freddy.deliver_with_response 'Concurrency2', msg: 'noop'
|
10
|
+
msg_handler.success(result)
|
11
|
+
rescue Freddy::ErrorResponse => e
|
12
|
+
msg_handler.error(e.response)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
freddy.respond_to 'Concurrency2' do |payload, msg_handler|
|
17
|
+
begin
|
18
|
+
result = freddy.deliver_with_response 'Concurrency3', msg: 'noop'
|
19
|
+
msg_handler.success(result)
|
20
|
+
rescue Freddy::ErrorResponse => e
|
21
|
+
msg_handler.error(e.response)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
freddy.respond_to 'Concurrency3' do |payload, msg_handler|
|
26
|
+
msg_handler.success({from: 'Concurrency3'})
|
27
|
+
end
|
28
|
+
|
29
|
+
result =
|
30
|
+
begin
|
31
|
+
freddy.deliver_with_response 'Concurrency1', msg: 'noop'
|
32
|
+
rescue Freddy::ErrorResponse => e
|
33
|
+
e.response
|
34
|
+
end
|
35
|
+
|
36
|
+
expect(result).to eq(from: 'Concurrency3')
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'supports nested calls in #tap_into' do
|
40
|
+
received1 = false
|
41
|
+
received2 = false
|
42
|
+
|
43
|
+
freddy.tap_into 'concurrency.*.queue1' do
|
44
|
+
result = freddy.deliver_with_response 'TapConcurrency', msg: 'noop'
|
45
|
+
expect(result).to eq(from: 'TapConcurrency')
|
46
|
+
received1 = true
|
47
|
+
end
|
48
|
+
|
49
|
+
freddy.respond_to 'TapConcurrency' do |payload, msg_handler|
|
50
|
+
msg_handler.success({from: 'TapConcurrency'})
|
51
|
+
received2 = true
|
52
|
+
end
|
53
|
+
|
54
|
+
freddy.deliver 'concurrency.q.queue1', msg: 'noop'
|
55
|
+
|
56
|
+
wait_for { received1 && received2 }
|
57
|
+
|
58
|
+
expect(received1).to be(true)
|
59
|
+
expect(received2).to be(true)
|
60
|
+
end
|
61
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Urmas Talimaa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- spec/freddy/message_handler_spec.rb
|
115
115
|
- spec/freddy/request_spec.rb
|
116
116
|
- spec/freddy/responder_handler_spec.rb
|
117
|
+
- spec/integration/concurrency_spec.rb
|
117
118
|
- spec/integration/logging_spec.rb
|
118
119
|
- spec/spec_helper.rb
|
119
120
|
homepage:
|
@@ -146,5 +147,6 @@ test_files:
|
|
146
147
|
- spec/freddy/message_handler_spec.rb
|
147
148
|
- spec/freddy/request_spec.rb
|
148
149
|
- spec/freddy/responder_handler_spec.rb
|
150
|
+
- spec/integration/concurrency_spec.rb
|
149
151
|
- spec/integration/logging_spec.rb
|
150
152
|
- spec/spec_helper.rb
|