mimi-messaging-sqs_sns 0.8.0 → 0.8.1

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
  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