mimi-messaging-sqs_sns 0.8.0 → 0.8.1

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
  SHA256:
3
- metadata.gz: cf7944b9a3e10f154f738d66544cfa63611b17a742b156460969f70821ad86bb
4
- data.tar.gz: f26e3e3623208170de192174c9c0fdb2ef5e26fa8cca831e73065eb86e21b0b5
3
+ metadata.gz: d8ca2b61a4f7cc802b628397b74d45a19f81dd50cf7d285bfc813922e17e7327
4
+ data.tar.gz: fea7216f18b7707cedefaac1090349791c01f35b76f0a3019531039e28e8a39e
5
5
  SHA512:
6
- metadata.gz: 37bbb87ba16df4886a5e525ca13732b3712021c5269418d8d8c90e1af125cbaa7e32aa5757a96293569a1717cc4c00542aaf20d12f3fc7514477cd3d708cd615
7
- data.tar.gz: 9d53cc0479c47af711f0e89203f9ef1ced767115743fb2fa685ea559ebb0b891226a248219ff2103ec95207b678814c1c0b983f82a22eda8e741feac01a2d4dc
6
+ metadata.gz: c4734aef7603919fe1485b1403fe63cfe3751b25ca0c753336b1567b524817ad68d9a0255fb14a993f365d58963b3a5a894bb02b338eac19d2af01303455510b
7
+ data.tar.gz: 017f5eb8d84cb0b10196c6a76fee01b5c1f3909c3b3eca2883e729992b02370f9be9827639858cbcb7e68beb02c35e4ac6cc9b5f40726b9e8faaccf5c8ee7eb6
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## UNRELEASED
4
4
 
5
+ ## v0.8.1
6
+
7
+ * [#5](https://github.com/kukushkin/mimi-messaging-sqs_sns/pull/5)
8
+ * Refactored worker pool based message processing and error handling
9
+
5
10
  ## v0.8.0
6
11
 
7
12
  * [#3](https://github.com/kukushkin/mimi-messaging-sqs_sns/pull/3)
data/TODO.md CHANGED
@@ -3,7 +3,7 @@
3
3
  List of missing features planned for future releases.
4
4
 
5
5
  * [X] Log error and recover if the reply cannot be sent
6
- * [ ] Threadsafe TimeoutQueue
7
- * [ ] Multithreaded consumers
6
+ * [X] Threadsafe TimeoutQueue
7
+ * [X] Multithreaded consumers
8
8
  * [ ] Subscribe to topic without a queue (Temporary queues)
9
9
 
@@ -186,14 +186,7 @@ module Mimi
186
186
  opts = opts.dup
187
187
  queue_url = find_or_create_queue(queue_name)
188
188
  @consumers << Consumer.new(self, queue_url) do |m|
189
- worker_pool.post do
190
- process_request_message(processor, m)
191
- end
192
- rescue Concurrent::RejectedExecutionError
193
- # the backlog is overflown, put the message back
194
- Mimi::Messaging.log "Worker pool backlog is full, nack-ing the message " \
195
- "(workers:#{worker_pool.length}, backlog:#{worker_pool.queue_length})"
196
- raise Mimi::Messaging::NACK # exception raised in Consumer thread
189
+ process_request_message(processor, m)
197
190
  end
198
191
  end
199
192
 
@@ -210,14 +203,7 @@ module Mimi
210
203
  queue_url = find_or_create_queue(queue_name)
211
204
  subscribe_topic_queue(topic_arn, queue_url)
212
205
  @consumers << Consumer.new(self, queue_url) do |m|
213
- worker_pool.post do
214
- process_event_message(processor, m)
215
- end
216
- rescue Concurrent::RejectedExecutionError
217
- # the backlog is overflown, put the message back
218
- Mimi::Messaging.log "Worker pool backlog is full, nack-ing the message " \
219
- "(workers:#{worker_pool.length}, backlog:#{worker_pool.queue_length})"
220
- raise Mimi::Messaging::NACK # exception raised in Consumer thread
206
+ process_event_message(processor, m)
221
207
  end
222
208
  end
223
209
 
@@ -48,14 +48,17 @@ module Mimi
48
48
  return unless message
49
49
 
50
50
  Mimi::Messaging.log "Read message from: #{queue_url}"
51
- block.call(message)
52
- ack_message(adapter, queue_url, message)
53
- rescue Mimi::Messaging::NACK
54
- Mimi::Messaging.log "NACK-ing message from: #{queue_url}"
51
+ adapter.worker_pool.post do
52
+ process_message(adapter, queue_url, message, block)
53
+ end
54
+ rescue Concurrent::RejectedExecutionError
55
+ # the backlog is overflown, put the message back
56
+ Mimi::Messaging.log "Worker pool backlog is full, nack-ing the message " \
57
+ "(workers:#{adapter.worker_pool.length}, backlog:#{adapter.worker_pool.queue_length})"
55
58
  nack_message(adapter, queue_url, message)
56
59
  rescue StandardError => e
57
60
  Mimi::Messaging.logger&.error(
58
- "#{self.class}: failed to read and process message from: #{queue_url}," \
61
+ "#{self.class}: failed to read or process message from: #{queue_url}," \
59
62
  " error: (#{e.class}) #{e}"
60
63
  )
61
64
  end
@@ -73,6 +76,20 @@ module Mimi
73
76
  raise Mimi::Messaging::ConnectionError, "Unexpected number of messages read"
74
77
  end
75
78
 
79
+ def process_message(adapter, queue_url, message, block)
80
+ block.call(message)
81
+ ack_message(adapter, queue_url, message)
82
+ rescue Mimi::Messaging::NACK
83
+ Mimi::Messaging.log "NACK-ing message from: #{queue_url}"
84
+ nack_message(adapter, queue_url, message)
85
+ rescue StandardError => e
86
+ Mimi::Messaging.logger&.error(
87
+ "#{self.class}: failed to process message from: #{queue_url}," \
88
+ " error: (#{e.class}) #{e}"
89
+ )
90
+ # NOTE: message is neither ACKed or NACKed
91
+ end
92
+
76
93
  # ACK-ing the message indicates successfull processing of it
77
94
  # and removes the message from the queue
78
95
  #
@@ -3,7 +3,7 @@
3
3
  module Mimi
4
4
  module Messaging
5
5
  module SQS_SNS
6
- VERSION = "0.8.0"
6
+ VERSION = "0.8.1"
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.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kukushkin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-16 00:00:00.000000000 Z
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mimi-messaging