spectre-rabbitmq 1.0.3 → 2.0.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/lib/spectre/rabbitmq.rb +76 -74
- metadata +27 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb8f90ed30256eef897dff211ff9099b85f8c8dd54edbdb604971e9d8ce2cad8
|
4
|
+
data.tar.gz: 6d3842ddeb977dd9b606c905e62e2dfec42de213fdd69d233ec5bdfc7f1ba31e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81c74dacf90d7dd9599e4cc4746a0df61b0be48370b396922a912facad97cfa39d54e59ab0c6c8d596f21b282169078dcb31386ebf88727c92a7ba3fa8da272b
|
7
|
+
data.tar.gz: 7989f93e257e70507c02d895a6427ce452aed6cf01cdb27744b73105ad5ffccd212d35a4543f8d9d2bcfe00e880c16f02e31a4d3be3a8430b5e61ac81cfd8c09
|
data/lib/spectre/rabbitmq.rb
CHANGED
@@ -1,18 +1,21 @@
|
|
1
|
-
require '
|
2
|
-
require 'spectre/logging'
|
1
|
+
require 'logger'
|
3
2
|
require 'ostruct'
|
4
3
|
require 'bunny'
|
5
4
|
|
6
|
-
|
7
5
|
module Spectre
|
8
6
|
module RabbitMQ
|
9
|
-
|
7
|
+
PROGNAME = 'spectre/rabbitmq'
|
8
|
+
|
9
|
+
class ActionParamsBase
|
10
|
+
include Spectre::Delegate if defined? Spectre::Delegate
|
11
|
+
|
10
12
|
attr_reader :config
|
11
13
|
|
12
14
|
def initialize config, logger
|
13
15
|
@logger = logger
|
14
|
-
@config = config
|
16
|
+
@config = Marshal.load(Marshal.dump(config))
|
15
17
|
@config['routing_keys'] = []
|
18
|
+
@config['log_payload'] = true
|
16
19
|
end
|
17
20
|
|
18
21
|
def exchange name, type: 'topic', durable: false, auto_delete: false
|
@@ -25,7 +28,7 @@ module Spectre
|
|
25
28
|
end
|
26
29
|
|
27
30
|
def topic name, durable: false, auto_delete: false
|
28
|
-
exchange(name, type: 'topic', durable
|
31
|
+
exchange(name, type: 'topic', durable:, auto_delete:)
|
29
32
|
end
|
30
33
|
|
31
34
|
def routing_keys *names
|
@@ -37,13 +40,13 @@ module Spectre
|
|
37
40
|
end
|
38
41
|
|
39
42
|
def no_log!
|
40
|
-
@config['
|
43
|
+
@config['log_payload'] = false
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
47
|
class ConsumeActionParams < ActionParamsBase
|
45
48
|
def initialize config, logger
|
46
|
-
super
|
49
|
+
super
|
47
50
|
|
48
51
|
@config['queue'] = {
|
49
52
|
'name' => nil,
|
@@ -54,7 +57,7 @@ module Spectre
|
|
54
57
|
@config['messages'] = 1
|
55
58
|
end
|
56
59
|
|
57
|
-
def queue name,
|
60
|
+
def queue name = '', exclusive: false, durable: false, auto_delete: false
|
58
61
|
@config['queue'] = {
|
59
62
|
'name' => name,
|
60
63
|
'durable' => durable,
|
@@ -85,11 +88,13 @@ module Spectre
|
|
85
88
|
@config['reply_to'] = receiver
|
86
89
|
end
|
87
90
|
|
88
|
-
alias
|
91
|
+
alias body payload
|
89
92
|
end
|
90
93
|
|
91
|
-
class RabbitMQAction
|
92
|
-
|
94
|
+
class RabbitMQAction
|
95
|
+
include Spectre::Delegate if defined? Spectre::Delegate
|
96
|
+
|
97
|
+
attr_reader :conn, :threads, :messages
|
93
98
|
|
94
99
|
def initialize config, logger
|
95
100
|
@logger = logger
|
@@ -133,11 +138,11 @@ module Spectre
|
|
133
138
|
@config['virtual_host'] = vhost
|
134
139
|
end
|
135
140
|
|
136
|
-
def consume
|
141
|
+
def consume(&)
|
137
142
|
params = ConsumeActionParams.new(@config, @logger)
|
138
|
-
params.instance_eval(&
|
143
|
+
params.instance_eval(&)
|
139
144
|
|
140
|
-
connect
|
145
|
+
connect
|
141
146
|
|
142
147
|
channel = @conn.create_channel
|
143
148
|
|
@@ -147,40 +152,45 @@ module Spectre
|
|
147
152
|
params.config['queue']['name'],
|
148
153
|
durable: params.config['queue']['durable'],
|
149
154
|
auto_delete: params.config['queue']['auto_delete'],
|
150
|
-
exclusive: params.config['queue']['exclusive']
|
155
|
+
exclusive: params.config['queue']['exclusive']
|
151
156
|
)
|
152
157
|
|
153
|
-
@logger.
|
158
|
+
@logger.log(Logger::Severity::INFO,
|
159
|
+
"declare queue name=#{queue.name} " \
|
160
|
+
"durable=#{params.config['queue']['durable']} " \
|
161
|
+
"exclusive=#{params.config['queue']['exclusive']} " \
|
162
|
+
"auto_delete=#{params.config['queue']['auto_delete']}",
|
163
|
+
PROGNAME)
|
154
164
|
|
155
165
|
params.config['routing_keys'].each do |routing_key|
|
156
|
-
queue.bind(exchange, routing_key:
|
157
|
-
|
166
|
+
queue.bind(exchange, routing_key:)
|
167
|
+
|
168
|
+
@logger.log(
|
169
|
+
Logger::Severity::INFO,
|
170
|
+
"bind exchange=#{exchange.name} queue=#{queue.name} routing_key=#{routing_key}",
|
171
|
+
PROGNAME
|
172
|
+
)
|
158
173
|
end
|
159
174
|
|
160
175
|
consumer_thread = Thread.new do
|
161
|
-
|
162
|
-
|
163
|
-
queue.subscribe do |_delivery_info, properties, payload|
|
176
|
+
queue.subscribe(block: true) do |delivery_info, properties, payload|
|
164
177
|
message = OpenStruct.new
|
165
178
|
message.payload = payload
|
166
179
|
message.correlation_id = properties[:correlation_id]
|
167
180
|
message.reply_to = properties[:reply_to]
|
168
181
|
message.freeze
|
169
182
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
while @messages.count < params.config['messages']
|
174
|
-
message = message_queue.pop
|
183
|
+
log_msg = "get queue=#{queue.name}" \
|
184
|
+
"\ncorrelation_id: #{message.correlation_id}" \
|
185
|
+
"\nreply_to: #{message.reply_to}"
|
175
186
|
|
176
|
-
|
187
|
+
log_msg = "\n#{message.payload}" if params.config['log_payload']
|
177
188
|
|
178
|
-
|
179
|
-
payload_message = '[...]'
|
180
|
-
end
|
189
|
+
@logger.log(Logger::Severity::INFO, log_msg, PROGNAME)
|
181
190
|
|
182
|
-
@logger.info("get queue=#{queue.name}\ncorrelation_id: #{message.correlation_id}\nreply_to: #{message.reply_to}\n#{payload_message}")
|
183
191
|
@messages << message
|
192
|
+
|
193
|
+
delivery_info.consumer.cancel if @messages.count >= (params.config['messages'] || 1)
|
184
194
|
end
|
185
195
|
end
|
186
196
|
|
@@ -192,36 +202,35 @@ module Spectre
|
|
192
202
|
end
|
193
203
|
end
|
194
204
|
|
195
|
-
def publish
|
205
|
+
def publish(&)
|
196
206
|
params = PublishActionParams.new(@config, @logger)
|
197
|
-
params.instance_eval(&
|
207
|
+
params.instance_eval(&)
|
198
208
|
|
199
|
-
connect
|
209
|
+
connect
|
200
210
|
|
201
211
|
channel = @conn.create_channel
|
202
212
|
|
203
213
|
exchange = declare_exchange(channel, params)
|
204
214
|
|
205
|
-
routing_key = params.config['routing_keys']
|
215
|
+
routing_key = params.config['routing_keys']&.first
|
206
216
|
|
207
217
|
exchange.publish(
|
208
218
|
params.config['payload'],
|
209
|
-
routing_key
|
219
|
+
routing_key:,
|
210
220
|
correlation_id: params.config['correlation_id'],
|
211
221
|
reply_to: params.config['reply_to']
|
212
222
|
)
|
213
223
|
|
214
|
-
|
224
|
+
log_msg = "publish exchange=#{params.config['exchange']['name']} " \
|
225
|
+
"routing_key=#{routing_key}"
|
215
226
|
|
216
|
-
|
217
|
-
payload_message = '[...]'
|
218
|
-
end
|
227
|
+
log_msg += "\n#{params.config['payload']}" if params.config['log_payload']
|
219
228
|
|
220
|
-
@logger.
|
229
|
+
@logger.log(Logger::Severity::INFO, log_msg, PROGNAME)
|
221
230
|
end
|
222
231
|
|
223
232
|
def await!
|
224
|
-
@threads.each
|
233
|
+
@threads.each(&:join)
|
225
234
|
end
|
226
235
|
|
227
236
|
private
|
@@ -229,10 +238,10 @@ module Spectre
|
|
229
238
|
def connect
|
230
239
|
return unless @conn.nil?
|
231
240
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
241
|
+
@logger.log(Logger::Severity::INFO,
|
242
|
+
"connect #{@config['username']}:*****@#{@config['host']}/#{@config['virtual_host']} " \
|
243
|
+
"ssl=#{@config['ssl']}",
|
244
|
+
PROGNAME)
|
236
245
|
|
237
246
|
@conn = Bunny.new(
|
238
247
|
host: @config['host'],
|
@@ -252,47 +261,40 @@ module Spectre
|
|
252
261
|
params.config['exchange']['type'].to_s,
|
253
262
|
params.config['exchange']['name'],
|
254
263
|
durable: params.config['exchange']['durable'],
|
255
|
-
auto_delete: params.config['exchange']['auto_delete']
|
264
|
+
auto_delete: params.config['exchange']['auto_delete']
|
256
265
|
)
|
257
266
|
|
258
|
-
@logger.
|
267
|
+
@logger.log(Logger::Severity::INFO,
|
268
|
+
"declare exchange name=#{exchange.name} type=#{exchange.type} " \
|
269
|
+
"durable=#{params.config['exchange']['durable']} " \
|
270
|
+
"auto_delete=#{params.config['exchange']['auto_delete']}",
|
271
|
+
PROGNAME)
|
259
272
|
|
260
273
|
exchange
|
261
274
|
end
|
262
275
|
end
|
263
276
|
|
264
|
-
class
|
265
|
-
|
277
|
+
class Client
|
278
|
+
include Spectre::Delegate if defined? Spectre::Delegate
|
266
279
|
|
267
|
-
def
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
config = {
|
272
|
-
'host' => name,
|
273
|
-
}
|
274
|
-
end
|
280
|
+
def initialize config, logger
|
281
|
+
@config = config['rabbitmq'] || {}
|
282
|
+
@logger = logger
|
283
|
+
end
|
275
284
|
|
276
|
-
|
277
|
-
|
285
|
+
def rabbitmq(name, &)
|
286
|
+
config = @config[name] || {'host' => name }
|
287
|
+
|
288
|
+
action = RabbitMQAction.new(config, @logger)
|
289
|
+
action.instance_eval(&) if block_given?
|
278
290
|
|
279
291
|
# Wait for all consumer threads to be finished
|
280
|
-
action.threads.each
|
292
|
+
action.threads.each(&:join)
|
281
293
|
|
282
294
|
action.conn.close
|
283
295
|
end
|
284
296
|
end
|
285
|
-
|
286
|
-
Spectre.register do |config|
|
287
|
-
@@logger = Spectre::Logging::ModuleLogger.new(config, 'spectre/rabbitmq')
|
288
|
-
|
289
|
-
if config.key? 'rabbitmq'
|
290
|
-
config['rabbitmq'].each do |name, cfg|
|
291
|
-
@@config[name] = cfg
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
|
296
|
-
Spectre.delegate :rabbitmq, to: self
|
297
297
|
end
|
298
|
+
|
299
|
+
Engine.register(RabbitMQ::Client, :rabbitmq) if defined? Engine
|
298
300
|
end
|
metadata
CHANGED
@@ -1,43 +1,56 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spectre-rabbitmq
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Neubauer
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-03-21 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
13
|
+
name: bunny
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: '0'
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
25
|
+
version: '0'
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
27
|
+
name: logger
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
|
-
- - "
|
30
|
+
- - ">="
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
32
|
+
version: '0'
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
|
-
- - "
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: ostruct
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
type: :runtime
|
48
|
+
prerelease: false
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
39
52
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
53
|
+
version: '0'
|
41
54
|
description: Adds RabbitMQ functionality to the spectre framework
|
42
55
|
email:
|
43
56
|
- christian.neubauer@ionos.com
|
@@ -48,12 +61,11 @@ files:
|
|
48
61
|
- lib/spectre/rabbitmq.rb
|
49
62
|
homepage: https://github.com/ionos-spectre/spectre-rabbitmq
|
50
63
|
licenses:
|
51
|
-
-
|
64
|
+
- GPL-3.0-or-later
|
52
65
|
metadata:
|
53
66
|
homepage_uri: https://github.com/ionos-spectre/spectre-rabbitmq
|
54
67
|
source_code_uri: https://github.com/ionos-spectre/spectre-rabbitmq
|
55
68
|
changelog_uri: https://github.com/ionos-spectre/spectre-rabbitmq/blob/master/CHANGELOG.md
|
56
|
-
post_install_message:
|
57
69
|
rdoc_options: []
|
58
70
|
require_paths:
|
59
71
|
- lib
|
@@ -61,15 +73,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
73
|
requirements:
|
62
74
|
- - ">="
|
63
75
|
- !ruby/object:Gem::Version
|
64
|
-
version: 3.
|
76
|
+
version: '3.4'
|
65
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
78
|
requirements:
|
67
79
|
- - ">="
|
68
80
|
- !ruby/object:Gem::Version
|
69
81
|
version: '0'
|
70
82
|
requirements: []
|
71
|
-
rubygems_version: 3.
|
72
|
-
signing_key:
|
83
|
+
rubygems_version: 3.6.6
|
73
84
|
specification_version: 4
|
74
85
|
summary: RabbitMQ module for spectre
|
75
86
|
test_files: []
|