mimi-messaging-sqs_sns 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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