freddy 0.3.2 → 0.3.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/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
|