freddy 2.5.1 → 2.7.0
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/.github/workflows/publish.yml +1 -2
- data/Gemfile.lock +6 -6
- data/lib/freddy/consumers/respond_to_consumer.rb +2 -2
- data/lib/freddy/consumers/tap_into_consumer.rb +8 -4
- data/lib/freddy/delivery.rb +4 -0
- data/lib/freddy/version.rb +1 -1
- data/lib/freddy.rb +21 -9
- data/spec/freddy/freddy_spec.rb +1 -1
- data/spec/freddy/responder_handler_spec.rb +1 -1
- data/spec/integration/concurrency_spec.rb +3 -3
- data/spec/integration/reply_spec.rb +1 -1
- data/spec/integration/tap_into_with_exchange_spec.rb +44 -0
- data/spec/integration/tap_into_with_group_spec.rb +3 -3
- data/spec/integration/tracing_spec.rb +5 -5
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: addf621163f5d1faf987bf6ab91d027a538631303543833e1aea8946d3bc0e0b
|
4
|
+
data.tar.gz: 22d6eddbd383a2d7b7b46a4e69b2f78b1a0ba6e8a803a1c8b13be7a8be9d3948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 569d91cfe03265013e808bd1847c023b5e307e0411b12ef8113e54e3c471953f21f7a0ed3603c81513cf4a4d628447347d1d582e808b14cdd7f58ef5c8d5023c
|
7
|
+
data.tar.gz: bdeb3e75486d8f026e30d1766db834f2d6f7bad2e788f8d74eaaa836e428d02f56101d1e67b8ec5697cbd04ed9b891e6b98933d5c483c17e200b64cf8b877afd
|
@@ -15,8 +15,7 @@ jobs:
|
|
15
15
|
|
16
16
|
|
17
17
|
- name: Release Gem
|
18
|
-
uses: discourse/publish-rubygems-action@
|
18
|
+
uses: discourse/publish-rubygems-action@ec5415e2cc3509a5cc8c4eef9499cf3fb05f8391
|
19
19
|
env:
|
20
|
-
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
21
20
|
RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
|
22
21
|
RELEASE_COMMAND: rake release
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
freddy (2.
|
4
|
+
freddy (2.7.0)
|
5
5
|
bunny (~> 2.11)
|
6
6
|
concurrent-ruby (~> 1.0)
|
7
7
|
oj (~> 3.6)
|
@@ -14,16 +14,16 @@ GEM
|
|
14
14
|
specs:
|
15
15
|
amq-protocol (2.3.2)
|
16
16
|
ast (2.4.2)
|
17
|
-
bunny (2.
|
17
|
+
bunny (2.22.0)
|
18
18
|
amq-protocol (~> 2.3, >= 2.3.1)
|
19
19
|
sorted_set (~> 1, >= 1.0.2)
|
20
20
|
coderay (1.1.3)
|
21
|
-
concurrent-ruby (1.
|
21
|
+
concurrent-ruby (1.2.2)
|
22
22
|
diff-lcs (1.4.4)
|
23
23
|
hamster (3.0.0)
|
24
24
|
concurrent-ruby (~> 1.0)
|
25
25
|
method_source (1.0.0)
|
26
|
-
oj (3.
|
26
|
+
oj (3.15.0)
|
27
27
|
opentelemetry-api (1.1.0)
|
28
28
|
opentelemetry-common (0.19.6)
|
29
29
|
opentelemetry-api (~> 1.0)
|
@@ -34,7 +34,7 @@ GEM
|
|
34
34
|
opentelemetry-common (~> 0.19.3)
|
35
35
|
opentelemetry-registry (~> 0.2)
|
36
36
|
opentelemetry-semantic_conventions
|
37
|
-
opentelemetry-semantic_conventions (1.
|
37
|
+
opentelemetry-semantic_conventions (1.10.0)
|
38
38
|
opentelemetry-api (~> 1.0)
|
39
39
|
parallel (1.22.1)
|
40
40
|
parser (3.1.2.0)
|
@@ -44,7 +44,7 @@ GEM
|
|
44
44
|
method_source (~> 1.0)
|
45
45
|
rainbow (3.1.1)
|
46
46
|
rake (13.0.6)
|
47
|
-
rbtree (0.4.
|
47
|
+
rbtree (0.4.6)
|
48
48
|
regexp_parser (2.5.0)
|
49
49
|
rexml (3.2.5)
|
50
50
|
rspec (3.10.0)
|
@@ -3,8 +3,8 @@
|
|
3
3
|
class Freddy
|
4
4
|
module Consumers
|
5
5
|
class RespondToConsumer
|
6
|
-
def self.consume(
|
7
|
-
new(
|
6
|
+
def self.consume(**attrs, &block)
|
7
|
+
new(**attrs).consume(&block)
|
8
8
|
end
|
9
9
|
|
10
10
|
def initialize(thread_pool:, destination:, channel:, handler_adapter_factory:)
|
@@ -3,8 +3,8 @@
|
|
3
3
|
class Freddy
|
4
4
|
module Consumers
|
5
5
|
class TapIntoConsumer
|
6
|
-
def self.consume(
|
7
|
-
new(
|
6
|
+
def self.consume(**attrs, &block)
|
7
|
+
new(**attrs).consume(&block)
|
8
8
|
end
|
9
9
|
|
10
10
|
def initialize(thread_pool:, patterns:, channel:, options:)
|
@@ -29,7 +29,7 @@ class Freddy
|
|
29
29
|
private
|
30
30
|
|
31
31
|
def create_queue
|
32
|
-
topic_exchange = @channel.topic(
|
32
|
+
topic_exchange = @channel.topic(exchange_name)
|
33
33
|
|
34
34
|
queue =
|
35
35
|
if group
|
@@ -48,7 +48,7 @@ class Freddy
|
|
48
48
|
def process_message(_queue, delivery)
|
49
49
|
@consume_thread_pool.post do
|
50
50
|
delivery.in_span do
|
51
|
-
yield delivery.payload, delivery.routing_key
|
51
|
+
yield delivery.payload, delivery.routing_key, delivery.timestamp
|
52
52
|
@channel.acknowledge(delivery.tag)
|
53
53
|
end
|
54
54
|
rescue StandardError
|
@@ -76,6 +76,10 @@ class Freddy
|
|
76
76
|
def on_exception
|
77
77
|
@options.fetch(:on_exception, :ack)
|
78
78
|
end
|
79
|
+
|
80
|
+
def exchange_name
|
81
|
+
@options.fetch(:exchange_name, Freddy::FREDDY_TOPIC_EXCHANGE_NAME)
|
82
|
+
end
|
79
83
|
end
|
80
84
|
end
|
81
85
|
end
|
data/lib/freddy/delivery.rb
CHANGED
data/lib/freddy/version.rb
CHANGED
data/lib/freddy.rb
CHANGED
@@ -85,10 +85,12 @@ class Freddy
|
|
85
85
|
handler_adapter_factory = MessageHandlerAdapters::Factory.new(producer)
|
86
86
|
|
87
87
|
Consumers::RespondToConsumer.consume(
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
88
|
+
**{
|
89
|
+
thread_pool: Concurrent::FixedThreadPool.new(@prefetch_buffer_size),
|
90
|
+
destination: destination,
|
91
|
+
channel: channel,
|
92
|
+
handler_adapter_factory: handler_adapter_factory
|
93
|
+
},
|
92
94
|
&callback
|
93
95
|
)
|
94
96
|
end
|
@@ -115,8 +117,16 @@ class Freddy
|
|
115
117
|
# `:ack` simply acknowledges the message and re-raises the exception. `:reject`
|
116
118
|
# rejects the message without requeueing it. `:requeue` rejects the message with
|
117
119
|
# `requeue` flag.
|
120
|
+
# @option options [String] :exchange_name
|
121
|
+
# Exchange to bind to. Default is `freddy-topic`.
|
118
122
|
#
|
119
|
-
# @yield [message] Yields received message to the block
|
123
|
+
# @yield [message] Yields received message to the block.
|
124
|
+
# @yieldparam [Object] payload
|
125
|
+
# Yields the received message's payload.
|
126
|
+
# @yieldparam [String] routing_key
|
127
|
+
# Yields the received message's routing key.
|
128
|
+
# @yieldparam [Time] timestamp
|
129
|
+
# Yields received message's timestamp.
|
120
130
|
#
|
121
131
|
# @return [#shutdown]
|
122
132
|
#
|
@@ -128,10 +138,12 @@ class Freddy
|
|
128
138
|
@logger.debug "Tapping into messages that match #{pattern_or_patterns}"
|
129
139
|
|
130
140
|
Consumers::TapIntoConsumer.consume(
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
141
|
+
**{
|
142
|
+
thread_pool: Concurrent::FixedThreadPool.new(@prefetch_buffer_size),
|
143
|
+
patterns: Array(pattern_or_patterns),
|
144
|
+
channel: @connection.create_channel(prefetch: @prefetch_buffer_size),
|
145
|
+
options: options
|
146
|
+
},
|
135
147
|
&callback
|
136
148
|
)
|
137
149
|
end
|
data/spec/freddy/freddy_spec.rb
CHANGED
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
require 'hamster/experimental/mutable_set'
|
3
3
|
|
4
4
|
describe 'Concurrency' do
|
5
|
-
let(:freddy1) { Freddy.build(logger, config) }
|
6
|
-
let(:freddy2) { Freddy.build(logger, config) }
|
7
|
-
let(:freddy3) { Freddy.build(logger, config) }
|
5
|
+
let(:freddy1) { Freddy.build(logger, **config) }
|
6
|
+
let(:freddy2) { Freddy.build(logger, **config) }
|
7
|
+
let(:freddy3) { Freddy.build(logger, **config) }
|
8
8
|
|
9
9
|
after { [freddy1, freddy2, freddy3].each(&:close) }
|
10
10
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Tapping into with exchange identifier' do
|
4
|
+
let(:freddy) { Freddy.build(logger, **config) }
|
5
|
+
|
6
|
+
let(:connection) { Freddy::Adapters.determine.connect(config) }
|
7
|
+
let(:topic) { 'test_topic_exchange' }
|
8
|
+
let(:channel) { connection.create_channel }
|
9
|
+
let(:message_payload) { { test: 'test' }.to_json }
|
10
|
+
let(:expected_payload) { { test: 'test' } }
|
11
|
+
let(:publish_timestamp) { Time.now.to_i }
|
12
|
+
|
13
|
+
after do
|
14
|
+
connection.close
|
15
|
+
freddy.close
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'receives message' do
|
19
|
+
freddy.tap_into('pattern.*', exchange_name: topic) do |payload, _routing_key, timestamp|
|
20
|
+
@received_payload = payload
|
21
|
+
@received_timestamp = timestamp
|
22
|
+
end
|
23
|
+
|
24
|
+
channel.topic(topic).publish(message_payload, { routing_key: 'pattern.random', timestamp: publish_timestamp })
|
25
|
+
|
26
|
+
wait_for { @received_payload }
|
27
|
+
wait_for { @received_timestamp }
|
28
|
+
|
29
|
+
expect(@received_payload).to eq(expected_payload)
|
30
|
+
expect(@received_timestamp.to_i).to eq(publish_timestamp)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'receives message with nil timestamp when timestamp is not published' do
|
34
|
+
received_timestamp = 0
|
35
|
+
freddy.tap_into('pattern.*', exchange_name: topic) do |_payload, _routing_key, timestamp|
|
36
|
+
received_timestamp = timestamp
|
37
|
+
end
|
38
|
+
|
39
|
+
channel.topic(topic).publish(message_payload, { routing_key: 'pattern.random' })
|
40
|
+
default_sleep
|
41
|
+
|
42
|
+
expect(received_timestamp).to eq(nil)
|
43
|
+
end
|
44
|
+
end
|
@@ -2,9 +2,9 @@ require 'spec_helper'
|
|
2
2
|
require 'hamster/experimental/mutable_set'
|
3
3
|
|
4
4
|
describe 'Tapping into with group identifier' do
|
5
|
-
let(:deliverer) { Freddy.build(logger, config) }
|
6
|
-
let(:responder1) { Freddy.build(logger, config) }
|
7
|
-
let(:responder2) { Freddy.build(logger, config) }
|
5
|
+
let(:deliverer) { Freddy.build(logger, **config) }
|
6
|
+
let(:responder1) { Freddy.build(logger, **config) }
|
7
|
+
let(:responder2) { Freddy.build(logger, **config) }
|
8
8
|
|
9
9
|
let(:destination) { random_destination }
|
10
10
|
|
@@ -8,8 +8,8 @@ describe 'Tracing' do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
context 'when receiving a traced request' do
|
11
|
-
let(:freddy) { Freddy.build(logger, config) }
|
12
|
-
let(:freddy2) { Freddy.build(logger, config) }
|
11
|
+
let(:freddy) { Freddy.build(logger, **config) }
|
12
|
+
let(:freddy2) { Freddy.build(logger, **config) }
|
13
13
|
|
14
14
|
let(:destination) { random_destination }
|
15
15
|
let(:destination2) { random_destination }
|
@@ -63,9 +63,9 @@ describe 'Tracing' do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
context 'when receiving a nested traced request' do
|
66
|
-
let(:freddy) { Freddy.build(logger, config) }
|
67
|
-
let(:freddy2) { Freddy.build(logger, config) }
|
68
|
-
let(:freddy3) { Freddy.build(logger, config) }
|
66
|
+
let(:freddy) { Freddy.build(logger, **config) }
|
67
|
+
let(:freddy2) { Freddy.build(logger, **config) }
|
68
|
+
let(:freddy3) { Freddy.build(logger, **config) }
|
69
69
|
|
70
70
|
let(:destination) { random_destination }
|
71
71
|
let(:destination2) { random_destination }
|
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: 2.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Glia TechMovers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-06-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- spec/freddy/sync_response_container_spec.rb
|
177
177
|
- spec/integration/concurrency_spec.rb
|
178
178
|
- spec/integration/reply_spec.rb
|
179
|
+
- spec/integration/tap_into_with_exchange_spec.rb
|
179
180
|
- spec/integration/tap_into_with_group_spec.rb
|
180
181
|
- spec/integration/tracing_spec.rb
|
181
182
|
- spec/spec_helper.rb
|