mimi-messaging-sqs_sns 0.4.3 → 0.5.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/mimi/messaging/sqs_sns.rb +1 -0
- data/lib/mimi/messaging/sqs_sns/adapter.rb +40 -28
- data/lib/mimi/messaging/sqs_sns/consumer.rb +4 -8
- data/lib/mimi/messaging/sqs_sns/reply_consumer.rb +8 -10
- data/lib/mimi/messaging/sqs_sns/temporary_queue_consumer.rb +29 -0
- data/lib/mimi/messaging/sqs_sns/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 297b98675dafdc02dc9cbc9256339b3ecb696875
|
4
|
+
data.tar.gz: db1e2efc5ac9f8b98b1de5fb5dff0c76ee21930c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9d87b2c28ed31a1836070e09adc8732d3becc46364b3d04836e031bb9ae424e02aad22519a1632a1c205900a10a8ba7e2650c1e80b9947b40fa8dea5cd95331
|
7
|
+
data.tar.gz: 0d64bb39d6858fddb0645561180695fc9c6bb4ae44cc2f79027e36f9bab4bc4ff5efa69814da79a3046a0ead1412897ec00c0a9902f9d0b8a85c08f124029ee8
|
@@ -219,6 +219,45 @@ module Mimi
|
|
219
219
|
end
|
220
220
|
end
|
221
221
|
|
222
|
+
# Creates a new queue
|
223
|
+
#
|
224
|
+
# @param queue_name [String] name of the topic to be created
|
225
|
+
# @return [String] a new queue URL
|
226
|
+
#
|
227
|
+
def create_queue(queue_name)
|
228
|
+
fqn = sqs_sns_converted_full_name(queue_name)
|
229
|
+
Mimi::Messaging.log "Creating a queue: #{fqn}"
|
230
|
+
result = sqs_client.create_queue(queue_name: fqn)
|
231
|
+
result.queue_url
|
232
|
+
rescue StandardError => e
|
233
|
+
raise Mimi::Messaging::ConnectionError, "Failed to create queue '#{queue_name}': #{e}"
|
234
|
+
end
|
235
|
+
|
236
|
+
|
237
|
+
# Finds a queue URL for a queue with given name.
|
238
|
+
#
|
239
|
+
# If an existing queue with this name is not found,
|
240
|
+
# the method will try to create a new one.
|
241
|
+
#
|
242
|
+
# @param queue_name [String]
|
243
|
+
# @return [String] a queue URL
|
244
|
+
#
|
245
|
+
def find_or_create_queue(queue_name)
|
246
|
+
queue_registry(queue_name) || create_queue(queue_name)
|
247
|
+
end
|
248
|
+
|
249
|
+
# Deletes a queue identified by the queue URL
|
250
|
+
#
|
251
|
+
# @param queue_url [String]
|
252
|
+
#
|
253
|
+
def delete_queue(queue_url)
|
254
|
+
Mimi::Messaging.log "Deleting a queue: #{queue_url}"
|
255
|
+
sqs_client.delete_queue(queue_url: queue_url)
|
256
|
+
rescue StandardError => e
|
257
|
+
raise Mimi::Messaging::ConnectionError,
|
258
|
+
"Failed to delete queue with url '#{queue_url}': #{e}"
|
259
|
+
end
|
260
|
+
|
222
261
|
private
|
223
262
|
|
224
263
|
# Returns configuration parameters for AWS SQS client
|
@@ -266,20 +305,6 @@ module Mimi
|
|
266
305
|
end
|
267
306
|
end
|
268
307
|
|
269
|
-
# Creates a new queue
|
270
|
-
#
|
271
|
-
# @param queue_name [String] name of the topic to be created
|
272
|
-
# @return [String] a new queue URL
|
273
|
-
#
|
274
|
-
def create_queue(queue_name)
|
275
|
-
fqn = sqs_sns_converted_full_name(queue_name)
|
276
|
-
Mimi::Messaging.log "Creating a queue: #{fqn}"
|
277
|
-
result = sqs_client.create_queue(queue_name: fqn)
|
278
|
-
result.queue_url
|
279
|
-
rescue StandardError => e
|
280
|
-
raise Mimi::Messaging::ConnectionError, "Failed to create queue '#{queue_name}': #{e}"
|
281
|
-
end
|
282
|
-
|
283
308
|
# Delivers a message to a queue with given URL.
|
284
309
|
#
|
285
310
|
# @param queue_url [String]
|
@@ -349,18 +374,6 @@ module Mimi
|
|
349
374
|
)
|
350
375
|
end
|
351
376
|
|
352
|
-
# Finds a queue URL for a queue with given name.
|
353
|
-
#
|
354
|
-
# If an existing queue with this name is not found,
|
355
|
-
# the method will try to create a new one.
|
356
|
-
#
|
357
|
-
# @param queue_name [String]
|
358
|
-
# @return [String] a queue URL
|
359
|
-
#
|
360
|
-
def find_or_create_queue(queue_name)
|
361
|
-
queue_registry(queue_name) || create_queue(queue_name)
|
362
|
-
end
|
363
|
-
|
364
377
|
# Returns the configured reply listener for this process
|
365
378
|
#
|
366
379
|
# @return [ReplyConsumer]
|
@@ -368,8 +381,7 @@ module Mimi
|
|
368
381
|
def reply_consumer
|
369
382
|
@reply_consumer ||= begin
|
370
383
|
reply_queue_name = options[:mq_reply_queue_prefix] + SecureRandom.hex(8)
|
371
|
-
|
372
|
-
Mimi::Messaging::SQS_SNS::ReplyConsumer.new(self, reply_queue_url)
|
384
|
+
Mimi::Messaging::SQS_SNS::ReplyConsumer.new(self, reply_queue_name)
|
373
385
|
end
|
374
386
|
end
|
375
387
|
|
@@ -4,20 +4,15 @@ module Mimi
|
|
4
4
|
module Messaging
|
5
5
|
module SQS_SNS
|
6
6
|
#
|
7
|
-
# Message
|
7
|
+
# Message consumer for SQS queues
|
8
8
|
#
|
9
9
|
class Consumer
|
10
10
|
def initialize(adapter, queue_url, &block)
|
11
|
-
@block = block
|
12
11
|
@stop_requested = false
|
13
12
|
Mimi::Messaging.log "Starting consumer for: #{queue_url}"
|
14
13
|
@consumer_thread = Thread.new do
|
15
14
|
while not @stop_requested do
|
16
|
-
|
17
|
-
next unless message
|
18
|
-
Mimi::Messaging.log "Read message from: #{queue_url}"
|
19
|
-
block.call(message)
|
20
|
-
ack_message(adapter, queue_url, message)
|
15
|
+
read_and_process_message(adapter, queue_url, block)
|
21
16
|
end
|
22
17
|
Mimi::Messaging.log "Stopping consumer for: #{queue_url}"
|
23
18
|
end
|
@@ -35,8 +30,9 @@ module Mimi
|
|
35
30
|
#
|
36
31
|
# @param adapter [Mimi::Messaging::SQS_SNS::Adapter]
|
37
32
|
# @param queue_url [String]
|
33
|
+
# @param block [Proc] a block to be invoked when a message is received
|
38
34
|
#
|
39
|
-
def read_and_process_message(adapter, queue_url)
|
35
|
+
def read_and_process_message(adapter, queue_url, block)
|
40
36
|
message = read_message(adapter, queue_url)
|
41
37
|
return unless message
|
42
38
|
Mimi::Messaging.log "Read message from: #{queue_url}"
|
@@ -8,25 +8,23 @@ module Mimi
|
|
8
8
|
# and passes them to registered Queues (see Ruby ::Queue class).
|
9
9
|
#
|
10
10
|
class ReplyConsumer
|
11
|
-
attr_reader :reply_queue_url
|
11
|
+
attr_reader :reply_queue_name, :reply_queue_url
|
12
12
|
|
13
|
-
def initialize(adapter,
|
13
|
+
def initialize(adapter, reply_queue_name)
|
14
14
|
@mutex = Mutex.new
|
15
15
|
@queues = {}
|
16
16
|
@adapter = adapter
|
17
|
-
@
|
18
|
-
@consumer =
|
17
|
+
@reply_queue_name = reply_queue_name
|
18
|
+
@consumer = TemporaryQueueConsumer.new(adapter, reply_queue_name) do |message|
|
19
19
|
dispatch_message(message)
|
20
20
|
end
|
21
|
+
@reply_queue_url = @consumer.queue_url
|
21
22
|
end
|
22
23
|
|
23
24
|
def stop
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
raise Mimi::Messaging::Error, "Failed to stop consumer: #{e}"
|
28
|
-
end
|
29
|
-
# TODO: adapter.sqs_client.delete_queue(reply_queue_url)
|
25
|
+
@consumer.stop
|
26
|
+
rescue StandardError => e
|
27
|
+
raise Mimi::Messaging::Error, "Failed to stop reply consumer: #{e}"
|
30
28
|
end
|
31
29
|
|
32
30
|
# Register a new request_id to listen for.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mimi
|
4
|
+
module Messaging
|
5
|
+
module SQS_SNS
|
6
|
+
#
|
7
|
+
# Temporary queue consumer creates a temporary queue
|
8
|
+
# and attaches to it. The queue will be deleted
|
9
|
+
# on consumer shutdown.
|
10
|
+
#
|
11
|
+
class TemporaryQueueConsumer
|
12
|
+
attr_reader :queue_url
|
13
|
+
|
14
|
+
def initialize(adapter, queue_name, &block)
|
15
|
+
@adapter = adapter
|
16
|
+
@queue_url = adapter.find_or_create_queue(queue_name)
|
17
|
+
@consumer = Consumer.new(adapter, @queue_url, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
def stop
|
21
|
+
@consumer.stop
|
22
|
+
@adapter.delete_queue(queue_url)
|
23
|
+
rescue StandardError => e
|
24
|
+
raise Mimi::Messaging::Error, "Failed to stop temporary queue consumer: #{e}"
|
25
|
+
end
|
26
|
+
end # class TemporaryQueueConsumer
|
27
|
+
end # module SQS_SNS
|
28
|
+
end # module Messaging
|
29
|
+
end # module Mimi
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mimi-messaging-sqs_sns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Kukushkin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mimi-messaging
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- lib/mimi/messaging/sqs_sns/adapter.rb
|
134
134
|
- lib/mimi/messaging/sqs_sns/consumer.rb
|
135
135
|
- lib/mimi/messaging/sqs_sns/reply_consumer.rb
|
136
|
+
- lib/mimi/messaging/sqs_sns/temporary_queue_consumer.rb
|
136
137
|
- lib/mimi/messaging/sqs_sns/version.rb
|
137
138
|
- mimi-messaging-sqs_sns.gemspec
|
138
139
|
homepage: https://github.com/kukushkin/mimi-messaging-sqs_sns
|