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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c519409be703d17780104c7128f1ac45356e6a28
4
- data.tar.gz: d79e3369b555015308c3e794bec2e6e5a7990c56
3
+ metadata.gz: 297b98675dafdc02dc9cbc9256339b3ecb696875
4
+ data.tar.gz: db1e2efc5ac9f8b98b1de5fb5dff0c76ee21930c
5
5
  SHA512:
6
- metadata.gz: 835a5d1103716fa79de1db5b4869650645ebfd472b8e80343741f5af0f666f12ab07bd16b35eb88b6c9a8d601364b2bcebba86f050e0b111fcec0a627ac631e9
7
- data.tar.gz: 6980d6feea3ed5c9e5af6a2a5735c05511b19dcc091e7ac0f62c37cfd7357689b4efdfaa7fbc443d266cfbed9746351d102db1c433d9e44cd30df5afa9861e56
6
+ metadata.gz: c9d87b2c28ed31a1836070e09adc8732d3becc46364b3d04836e031bb9ae424e02aad22519a1632a1c205900a10a8ba7e2650c1e80b9947b40fa8dea5cd95331
7
+ data.tar.gz: 0d64bb39d6858fddb0645561180695fc9c6bb4ae44cc2f79027e36f9bab4bc4ff5efa69814da79a3046a0ead1412897ec00c0a9902f9d0b8a85c08f124029ee8
@@ -12,4 +12,5 @@ end # module Mimi
12
12
 
13
13
  require_relative "sqs_sns/adapter"
14
14
  require_relative "sqs_sns/consumer"
15
+ require_relative "sqs_sns/temporary_queue_consumer"
15
16
  require_relative "sqs_sns/reply_consumer"
@@ -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
- reply_queue_url = create_queue(reply_queue_name)
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 processor for SQS queues
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
- message = read_message(adapter, queue_url)
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, reply_queue_url)
13
+ def initialize(adapter, reply_queue_name)
14
14
  @mutex = Mutex.new
15
15
  @queues = {}
16
16
  @adapter = adapter
17
- @reply_queue_url = reply_queue_url
18
- @consumer = Consumer.new(adapter, reply_queue_url) do |message|
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
- begin
25
- @consumer.stop
26
- rescue StandardError => e
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
@@ -3,7 +3,7 @@
3
3
  module Mimi
4
4
  module Messaging
5
5
  module SQS_SNS
6
- VERSION = "0.4.3"
6
+ VERSION = "0.5.0"
7
7
  end
8
8
  end
9
9
  end
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.3
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-10-21 00:00:00.000000000 Z
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