rabbitmq_client 0.0.1 → 0.0.2
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/.overcommit.yml +2 -0
- data/.reek.yml +2 -0
- data/README.md +1 -1
- data/lib/rabbitmq_client/publisher.rb +12 -18
- data/lib/rabbitmq_client/publisher_job.rb +40 -0
- data/lib/rabbitmq_client/version.rb +1 -1
- data/lib/rabbitmq_client.rb +1 -0
- data/rabbitmq_client.gemspec +3 -2
- data/spec/publisher_spec.rb +24 -0
- metadata +25 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1ef09ac95da0ede5b1635fc2c1317f972e41c72868badb5ec79c9b3848d1b7d
|
4
|
+
data.tar.gz: c2798f711e2995e47b9e46649b04c730a2e7541769b9526498c1087771f6c2e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df0e4e90fcf1ae255822730a5162209a69374a12f643e8ac9f0ea0d524f48ad797cdf3132e604bc816bf2a2590fdc77ece185c05a0b80e293501ed62e20312d
|
7
|
+
data.tar.gz: b5f09649b1a0c4937418bc19d61befe0b60bc74ddef757a684ffd0b14cf22901112b1602ab79badc886205365c7d9288e08a4e8ada68c18a12d7c4113ecfaf87
|
data/.overcommit.yml
CHANGED
data/.reek.yml
CHANGED
@@ -13,6 +13,8 @@ detectors:
|
|
13
13
|
- "RabbitmqClient::Plugin#callback_block"
|
14
14
|
UtilityFunction:
|
15
15
|
exclude:
|
16
|
+
- 'RabbitmqClient::PublisherJob#notify'
|
17
|
+
- 'RabbitmqClient::PublisherJob#handle_publish_event'
|
16
18
|
- 'RabbitmqClient::Publisher#notify'
|
17
19
|
- 'LogSubscriberBase#logger'
|
18
20
|
- 'RabbitmqClient::JsonLogSubscriber'
|
data/README.md
CHANGED
@@ -127,7 +127,7 @@ end
|
|
127
127
|
## <a name="plugins"></a> Plugins
|
128
128
|
RabbitmqClient plugins are classes that define a callbacks that can be executed before or after events that occuers during RabbitmqClient lifecycle.
|
129
129
|
Current supprted lifecycle events are:
|
130
|
-
- publish: occure when
|
130
|
+
- publish: occure when publishing a massage is triggered.
|
131
131
|
|
132
132
|
Here is an example where we define a plugin to add some headers to message options before publishing the message.
|
133
133
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '
|
3
|
+
require_relative 'publisher_job'
|
4
4
|
|
5
5
|
module RabbitmqClient
|
6
6
|
# Publisher class is responsible for publishing events to rabbitmq exhanges
|
@@ -17,14 +17,21 @@ module RabbitmqClient
|
|
17
17
|
def publish(data, options)
|
18
18
|
return nil unless @exchange_registry
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
if async
|
21
|
+
PublisherJob.perform_async(@exchange_registry,
|
22
|
+
@session_pool, data, options)
|
23
|
+
else
|
24
|
+
PublisherJob.new.perform(@exchange_registry,
|
25
|
+
@session_pool, data, options)
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
private
|
27
30
|
|
31
|
+
def async
|
32
|
+
@config.dig(:session_params, :async_publisher) || false
|
33
|
+
end
|
34
|
+
|
28
35
|
def overwritten_config_notification
|
29
36
|
return unless overwritten_config?
|
30
37
|
|
@@ -48,19 +55,6 @@ module RabbitmqClient
|
|
48
55
|
) || 0)
|
49
56
|
end
|
50
57
|
|
51
|
-
def handle_publish_event(data, options)
|
52
|
-
exchange = @exchange_registry.find(options.fetch(:exchange_name, nil))
|
53
|
-
@session_pool.with do |session|
|
54
|
-
session.start
|
55
|
-
channel = session.create_channel
|
56
|
-
channel.confirm_select
|
57
|
-
message = MessagePublisher.new(data, exchange, channel, options)
|
58
|
-
message.publish
|
59
|
-
message.wait_for_confirms
|
60
|
-
channel.close
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
58
|
def create_connection_pool
|
65
59
|
pool_size = @session_params.fetch(:session_pool, 1)
|
66
60
|
ConnectionPool.new(size: pool_size) do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'message_publisher'
|
4
|
+
require 'sucker_punch'
|
5
|
+
|
6
|
+
module RabbitmqClient
|
7
|
+
# Publisher class is responsible for publishing events to rabbitmq exhanges
|
8
|
+
class PublisherJob
|
9
|
+
include SuckerPunch::Job
|
10
|
+
|
11
|
+
def perform(registry, session_pool, data, options)
|
12
|
+
handle_publish_event(registry, session_pool, data, options)
|
13
|
+
rescue StandardError => e
|
14
|
+
notify('network_error', error: e, options: options)
|
15
|
+
raise
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def handle_publish_event(registry, session_pool, data, options)
|
21
|
+
exchange = registry.find(options.fetch(:exchange_name, nil))
|
22
|
+
session_pool.with do |session|
|
23
|
+
session.start
|
24
|
+
channel = session.create_channel
|
25
|
+
channel.confirm_select
|
26
|
+
message = MessagePublisher.new(data, exchange, channel, options)
|
27
|
+
message.publish
|
28
|
+
message.wait_for_confirms
|
29
|
+
channel.close
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def notify(event, payload = {})
|
34
|
+
ActiveSupport::Notifications.instrument(
|
35
|
+
"#{event}.rabbitmq_client",
|
36
|
+
payload
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/rabbitmq_client.rb
CHANGED
data/rabbitmq_client.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
19
19
|
spec.metadata['homepage_uri'] = spec.homepage
|
20
20
|
|
21
|
-
spec.add_runtime_dependency 'activesupport', '
|
22
|
-
spec.add_runtime_dependency 'bunny', '
|
21
|
+
spec.add_runtime_dependency 'activesupport', '> 5.0.0'
|
22
|
+
spec.add_runtime_dependency 'bunny', '>= 2.7.4'
|
23
23
|
spec.add_runtime_dependency 'connection_pool', '~> 2.2.2'
|
24
|
+
spec.add_runtime_dependency 'sucker_punch', '~> 2.0'
|
24
25
|
|
25
26
|
spec.add_development_dependency 'bundler', '~> 1.17.2'
|
26
27
|
spec.add_development_dependency 'byebug', '~> 11.0.1'
|
data/spec/publisher_spec.rb
CHANGED
@@ -126,6 +126,30 @@ describe RabbitmqClient::Publisher do
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
context 'when async is enabled' do
|
130
|
+
let(:exchange_registry) { RabbitmqClient::ExchangeRegistry.new }
|
131
|
+
let(:publisher) do
|
132
|
+
described_class.new(exchange_registry: exchange_registry,
|
133
|
+
session_params: { async_publisher: true })
|
134
|
+
end
|
135
|
+
let(:type) { 'test' }
|
136
|
+
let(:options) { {} }
|
137
|
+
|
138
|
+
before do
|
139
|
+
exchange_registry.add(exchange_name, type, options)
|
140
|
+
allow(RabbitmqClient::PublisherJob).to receive(:perform_async)
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'defines exchange' do
|
144
|
+
publisher.publish('message',
|
145
|
+
message_id: 'abc',
|
146
|
+
exchange_name: exchange_name)
|
147
|
+
expect(
|
148
|
+
RabbitmqClient::PublisherJob
|
149
|
+
).to have_received(:perform_async)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
129
153
|
context 'when error raised' do
|
130
154
|
let(:error) { StandardError.new('network_error') }
|
131
155
|
let(:exchange_registry) { double('exchange_registry') }
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rabbitmq_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Al-waleed shihadeh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 5.0.0
|
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:
|
26
|
+
version: 5.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bunny
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.
|
33
|
+
version: 2.7.4
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.
|
40
|
+
version: 2.7.4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: connection_pool
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 2.2.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sucker_punch
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -257,6 +271,7 @@ files:
|
|
257
271
|
- lib/rabbitmq_client/plain_log_subscriber.rb
|
258
272
|
- lib/rabbitmq_client/plugin.rb
|
259
273
|
- lib/rabbitmq_client/publisher.rb
|
274
|
+
- lib/rabbitmq_client/publisher_job.rb
|
260
275
|
- lib/rabbitmq_client/tags_filter.rb
|
261
276
|
- lib/rabbitmq_client/text_formatter.rb
|
262
277
|
- lib/rabbitmq_client/version.rb
|