aws-sdk-sqs 1.63.0 → 1.70.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +35 -0
- data/VERSION +1 -1
- data/lib/aws-sdk-sqs/client.rb +13 -3
- data/lib/aws-sdk-sqs/client_api.rb +247 -57
- data/lib/aws-sdk-sqs/endpoint_provider.rb +2 -2
- data/lib/aws-sdk-sqs/errors.rb +251 -0
- data/lib/aws-sdk-sqs/plugins/endpoints.rb +4 -2
- data/lib/aws-sdk-sqs/queue_poller.rb +65 -35
- data/lib/aws-sdk-sqs/types.rb +287 -15
- data/lib/aws-sdk-sqs.rb +1 -1
- data/sig/client.rbs +363 -0
- data/sig/errors.rbs +98 -0
- data/sig/message.rbs +73 -0
- data/sig/queue.rbs +163 -0
- data/sig/resource.rbs +105 -0
- data/sig/types.rbs +471 -0
- data/sig/waiters.rbs +13 -0
- metadata +16 -9
@@ -32,8 +32,8 @@ module Aws::SQS
|
|
32
32
|
raise ArgumentError, "FIPS and DualStack are enabled, but this partition does not support one or both"
|
33
33
|
end
|
34
34
|
if Aws::Endpoints::Matchers.boolean_equals?(use_fips, true)
|
35
|
-
if Aws::Endpoints::Matchers.boolean_equals?(
|
36
|
-
if Aws::Endpoints::Matchers.string_equals?(
|
35
|
+
if Aws::Endpoints::Matchers.boolean_equals?(Aws::Endpoints::Matchers.attr(partition_result, "supportsFIPS"), true)
|
36
|
+
if Aws::Endpoints::Matchers.string_equals?(Aws::Endpoints::Matchers.attr(partition_result, "name"), "aws-us-gov")
|
37
37
|
return Aws::Endpoints::Endpoint.new(url: "https://sqs.#{region}.amazonaws.com", headers: {}, properties: {})
|
38
38
|
end
|
39
39
|
return Aws::Endpoints::Endpoint.new(url: "https://sqs-fips.#{region}.#{partition_result['dnsSuffix']}", headers: {}, properties: {})
|
data/lib/aws-sdk-sqs/errors.rb
CHANGED
@@ -30,10 +30,20 @@ module Aws::SQS
|
|
30
30
|
# * {BatchEntryIdsNotDistinct}
|
31
31
|
# * {BatchRequestTooLong}
|
32
32
|
# * {EmptyBatchRequest}
|
33
|
+
# * {InvalidAddress}
|
33
34
|
# * {InvalidAttributeName}
|
35
|
+
# * {InvalidAttributeValue}
|
34
36
|
# * {InvalidBatchEntryId}
|
35
37
|
# * {InvalidIdFormat}
|
36
38
|
# * {InvalidMessageContents}
|
39
|
+
# * {InvalidSecurity}
|
40
|
+
# * {KmsAccessDenied}
|
41
|
+
# * {KmsDisabled}
|
42
|
+
# * {KmsInvalidKeyUsage}
|
43
|
+
# * {KmsInvalidState}
|
44
|
+
# * {KmsNotFound}
|
45
|
+
# * {KmsOptInRequired}
|
46
|
+
# * {KmsThrottled}
|
37
47
|
# * {MessageNotInflight}
|
38
48
|
# * {OverLimit}
|
39
49
|
# * {PurgeQueueInProgress}
|
@@ -41,6 +51,7 @@ module Aws::SQS
|
|
41
51
|
# * {QueueDoesNotExist}
|
42
52
|
# * {QueueNameExists}
|
43
53
|
# * {ReceiptHandleIsInvalid}
|
54
|
+
# * {RequestThrottled}
|
44
55
|
# * {ResourceNotFoundException}
|
45
56
|
# * {TooManyEntriesInBatchRequest}
|
46
57
|
# * {UnsupportedOperation}
|
@@ -59,6 +70,11 @@ module Aws::SQS
|
|
59
70
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
60
71
|
super(context, message, data)
|
61
72
|
end
|
73
|
+
|
74
|
+
# @return [String]
|
75
|
+
def message
|
76
|
+
@message || @data[:message]
|
77
|
+
end
|
62
78
|
end
|
63
79
|
|
64
80
|
class BatchRequestTooLong < ServiceError
|
@@ -69,6 +85,11 @@ module Aws::SQS
|
|
69
85
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
70
86
|
super(context, message, data)
|
71
87
|
end
|
88
|
+
|
89
|
+
# @return [String]
|
90
|
+
def message
|
91
|
+
@message || @data[:message]
|
92
|
+
end
|
72
93
|
end
|
73
94
|
|
74
95
|
class EmptyBatchRequest < ServiceError
|
@@ -79,6 +100,26 @@ module Aws::SQS
|
|
79
100
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
80
101
|
super(context, message, data)
|
81
102
|
end
|
103
|
+
|
104
|
+
# @return [String]
|
105
|
+
def message
|
106
|
+
@message || @data[:message]
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
class InvalidAddress < ServiceError
|
111
|
+
|
112
|
+
# @param [Seahorse::Client::RequestContext] context
|
113
|
+
# @param [String] message
|
114
|
+
# @param [Aws::SQS::Types::InvalidAddress] data
|
115
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
116
|
+
super(context, message, data)
|
117
|
+
end
|
118
|
+
|
119
|
+
# @return [String]
|
120
|
+
def message
|
121
|
+
@message || @data[:message]
|
122
|
+
end
|
82
123
|
end
|
83
124
|
|
84
125
|
class InvalidAttributeName < ServiceError
|
@@ -89,6 +130,26 @@ module Aws::SQS
|
|
89
130
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
90
131
|
super(context, message, data)
|
91
132
|
end
|
133
|
+
|
134
|
+
# @return [String]
|
135
|
+
def message
|
136
|
+
@message || @data[:message]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
class InvalidAttributeValue < ServiceError
|
141
|
+
|
142
|
+
# @param [Seahorse::Client::RequestContext] context
|
143
|
+
# @param [String] message
|
144
|
+
# @param [Aws::SQS::Types::InvalidAttributeValue] data
|
145
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
146
|
+
super(context, message, data)
|
147
|
+
end
|
148
|
+
|
149
|
+
# @return [String]
|
150
|
+
def message
|
151
|
+
@message || @data[:message]
|
152
|
+
end
|
92
153
|
end
|
93
154
|
|
94
155
|
class InvalidBatchEntryId < ServiceError
|
@@ -99,6 +160,11 @@ module Aws::SQS
|
|
99
160
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
100
161
|
super(context, message, data)
|
101
162
|
end
|
163
|
+
|
164
|
+
# @return [String]
|
165
|
+
def message
|
166
|
+
@message || @data[:message]
|
167
|
+
end
|
102
168
|
end
|
103
169
|
|
104
170
|
class InvalidIdFormat < ServiceError
|
@@ -119,6 +185,131 @@ module Aws::SQS
|
|
119
185
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
120
186
|
super(context, message, data)
|
121
187
|
end
|
188
|
+
|
189
|
+
# @return [String]
|
190
|
+
def message
|
191
|
+
@message || @data[:message]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
class InvalidSecurity < ServiceError
|
196
|
+
|
197
|
+
# @param [Seahorse::Client::RequestContext] context
|
198
|
+
# @param [String] message
|
199
|
+
# @param [Aws::SQS::Types::InvalidSecurity] data
|
200
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
201
|
+
super(context, message, data)
|
202
|
+
end
|
203
|
+
|
204
|
+
# @return [String]
|
205
|
+
def message
|
206
|
+
@message || @data[:message]
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
class KmsAccessDenied < ServiceError
|
211
|
+
|
212
|
+
# @param [Seahorse::Client::RequestContext] context
|
213
|
+
# @param [String] message
|
214
|
+
# @param [Aws::SQS::Types::KmsAccessDenied] data
|
215
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
216
|
+
super(context, message, data)
|
217
|
+
end
|
218
|
+
|
219
|
+
# @return [String]
|
220
|
+
def message
|
221
|
+
@message || @data[:message]
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
class KmsDisabled < ServiceError
|
226
|
+
|
227
|
+
# @param [Seahorse::Client::RequestContext] context
|
228
|
+
# @param [String] message
|
229
|
+
# @param [Aws::SQS::Types::KmsDisabled] data
|
230
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
231
|
+
super(context, message, data)
|
232
|
+
end
|
233
|
+
|
234
|
+
# @return [String]
|
235
|
+
def message
|
236
|
+
@message || @data[:message]
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
class KmsInvalidKeyUsage < ServiceError
|
241
|
+
|
242
|
+
# @param [Seahorse::Client::RequestContext] context
|
243
|
+
# @param [String] message
|
244
|
+
# @param [Aws::SQS::Types::KmsInvalidKeyUsage] data
|
245
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
246
|
+
super(context, message, data)
|
247
|
+
end
|
248
|
+
|
249
|
+
# @return [String]
|
250
|
+
def message
|
251
|
+
@message || @data[:message]
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
class KmsInvalidState < ServiceError
|
256
|
+
|
257
|
+
# @param [Seahorse::Client::RequestContext] context
|
258
|
+
# @param [String] message
|
259
|
+
# @param [Aws::SQS::Types::KmsInvalidState] data
|
260
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
261
|
+
super(context, message, data)
|
262
|
+
end
|
263
|
+
|
264
|
+
# @return [String]
|
265
|
+
def message
|
266
|
+
@message || @data[:message]
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
class KmsNotFound < ServiceError
|
271
|
+
|
272
|
+
# @param [Seahorse::Client::RequestContext] context
|
273
|
+
# @param [String] message
|
274
|
+
# @param [Aws::SQS::Types::KmsNotFound] data
|
275
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
276
|
+
super(context, message, data)
|
277
|
+
end
|
278
|
+
|
279
|
+
# @return [String]
|
280
|
+
def message
|
281
|
+
@message || @data[:message]
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
285
|
+
class KmsOptInRequired < ServiceError
|
286
|
+
|
287
|
+
# @param [Seahorse::Client::RequestContext] context
|
288
|
+
# @param [String] message
|
289
|
+
# @param [Aws::SQS::Types::KmsOptInRequired] data
|
290
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
291
|
+
super(context, message, data)
|
292
|
+
end
|
293
|
+
|
294
|
+
# @return [String]
|
295
|
+
def message
|
296
|
+
@message || @data[:message]
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
class KmsThrottled < ServiceError
|
301
|
+
|
302
|
+
# @param [Seahorse::Client::RequestContext] context
|
303
|
+
# @param [String] message
|
304
|
+
# @param [Aws::SQS::Types::KmsThrottled] data
|
305
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
306
|
+
super(context, message, data)
|
307
|
+
end
|
308
|
+
|
309
|
+
# @return [String]
|
310
|
+
def message
|
311
|
+
@message || @data[:message]
|
312
|
+
end
|
122
313
|
end
|
123
314
|
|
124
315
|
class MessageNotInflight < ServiceError
|
@@ -139,6 +330,11 @@ module Aws::SQS
|
|
139
330
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
140
331
|
super(context, message, data)
|
141
332
|
end
|
333
|
+
|
334
|
+
# @return [String]
|
335
|
+
def message
|
336
|
+
@message || @data[:message]
|
337
|
+
end
|
142
338
|
end
|
143
339
|
|
144
340
|
class PurgeQueueInProgress < ServiceError
|
@@ -149,6 +345,11 @@ module Aws::SQS
|
|
149
345
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
150
346
|
super(context, message, data)
|
151
347
|
end
|
348
|
+
|
349
|
+
# @return [String]
|
350
|
+
def message
|
351
|
+
@message || @data[:message]
|
352
|
+
end
|
152
353
|
end
|
153
354
|
|
154
355
|
class QueueDeletedRecently < ServiceError
|
@@ -159,6 +360,11 @@ module Aws::SQS
|
|
159
360
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
160
361
|
super(context, message, data)
|
161
362
|
end
|
363
|
+
|
364
|
+
# @return [String]
|
365
|
+
def message
|
366
|
+
@message || @data[:message]
|
367
|
+
end
|
162
368
|
end
|
163
369
|
|
164
370
|
class QueueDoesNotExist < ServiceError
|
@@ -169,6 +375,11 @@ module Aws::SQS
|
|
169
375
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
170
376
|
super(context, message, data)
|
171
377
|
end
|
378
|
+
|
379
|
+
# @return [String]
|
380
|
+
def message
|
381
|
+
@message || @data[:message]
|
382
|
+
end
|
172
383
|
end
|
173
384
|
|
174
385
|
class QueueNameExists < ServiceError
|
@@ -179,6 +390,11 @@ module Aws::SQS
|
|
179
390
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
180
391
|
super(context, message, data)
|
181
392
|
end
|
393
|
+
|
394
|
+
# @return [String]
|
395
|
+
def message
|
396
|
+
@message || @data[:message]
|
397
|
+
end
|
182
398
|
end
|
183
399
|
|
184
400
|
class ReceiptHandleIsInvalid < ServiceError
|
@@ -189,6 +405,26 @@ module Aws::SQS
|
|
189
405
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
190
406
|
super(context, message, data)
|
191
407
|
end
|
408
|
+
|
409
|
+
# @return [String]
|
410
|
+
def message
|
411
|
+
@message || @data[:message]
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
class RequestThrottled < ServiceError
|
416
|
+
|
417
|
+
# @param [Seahorse::Client::RequestContext] context
|
418
|
+
# @param [String] message
|
419
|
+
# @param [Aws::SQS::Types::RequestThrottled] data
|
420
|
+
def initialize(context, message, data = Aws::EmptyStructure.new)
|
421
|
+
super(context, message, data)
|
422
|
+
end
|
423
|
+
|
424
|
+
# @return [String]
|
425
|
+
def message
|
426
|
+
@message || @data[:message]
|
427
|
+
end
|
192
428
|
end
|
193
429
|
|
194
430
|
class ResourceNotFoundException < ServiceError
|
@@ -199,6 +435,11 @@ module Aws::SQS
|
|
199
435
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
200
436
|
super(context, message, data)
|
201
437
|
end
|
438
|
+
|
439
|
+
# @return [String]
|
440
|
+
def message
|
441
|
+
@message || @data[:message]
|
442
|
+
end
|
202
443
|
end
|
203
444
|
|
204
445
|
class TooManyEntriesInBatchRequest < ServiceError
|
@@ -209,6 +450,11 @@ module Aws::SQS
|
|
209
450
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
210
451
|
super(context, message, data)
|
211
452
|
end
|
453
|
+
|
454
|
+
# @return [String]
|
455
|
+
def message
|
456
|
+
@message || @data[:message]
|
457
|
+
end
|
212
458
|
end
|
213
459
|
|
214
460
|
class UnsupportedOperation < ServiceError
|
@@ -219,6 +465,11 @@ module Aws::SQS
|
|
219
465
|
def initialize(context, message, data = Aws::EmptyStructure.new)
|
220
466
|
super(context, message, data)
|
221
467
|
end
|
468
|
+
|
469
|
+
# @return [String]
|
470
|
+
def message
|
471
|
+
@message || @data[:message]
|
472
|
+
end
|
222
473
|
end
|
223
474
|
|
224
475
|
end
|
@@ -14,6 +14,7 @@ module Aws::SQS
|
|
14
14
|
option(
|
15
15
|
:endpoint_provider,
|
16
16
|
doc_type: 'Aws::SQS::EndpointProvider',
|
17
|
+
rbs_type: 'untyped',
|
17
18
|
docstring: 'The endpoint provider used to resolve endpoints. Any '\
|
18
19
|
'object that responds to `#resolve_endpoint(parameters)` '\
|
19
20
|
'where `parameters` is a Struct similar to '\
|
@@ -25,16 +26,17 @@ module Aws::SQS
|
|
25
26
|
# @api private
|
26
27
|
class Handler < Seahorse::Client::Handler
|
27
28
|
def call(context)
|
28
|
-
# If endpoint was discovered, do not resolve or apply the endpoint.
|
29
29
|
unless context[:discovered_endpoint]
|
30
30
|
params = parameters_for_operation(context)
|
31
31
|
endpoint = context.config.endpoint_provider.resolve_endpoint(params)
|
32
32
|
|
33
33
|
context.http_request.endpoint = endpoint.url
|
34
34
|
apply_endpoint_headers(context, endpoint.headers)
|
35
|
+
|
36
|
+
context[:endpoint_params] = params
|
37
|
+
context[:endpoint_properties] = endpoint.properties
|
35
38
|
end
|
36
39
|
|
37
|
-
context[:endpoint_params] = params
|
38
40
|
context[:auth_scheme] =
|
39
41
|
Aws::Endpoints.resolve_auth_scheme(context, endpoint)
|
40
42
|
|
@@ -4,7 +4,6 @@ require 'set'
|
|
4
4
|
|
5
5
|
module Aws
|
6
6
|
module SQS
|
7
|
-
|
8
7
|
# A utility class for long polling messages in a loop. **Messages are
|
9
8
|
# automatically deleted from the queue at the end of the given block.**
|
10
9
|
#
|
@@ -181,6 +180,16 @@ module Aws
|
|
181
180
|
# end
|
182
181
|
# ```
|
183
182
|
#
|
183
|
+
# * Configure an {#after_empty_receive} callback.
|
184
|
+
#
|
185
|
+
# ```
|
186
|
+
# poller.after_empty_receive do |stats|
|
187
|
+
# logger.info("requests: #{stats.request_count}")
|
188
|
+
# logger.info("messages: #{stats.received_message_count}")
|
189
|
+
# logger.info("last-timestamp: #{stats.last_message_received_at}")
|
190
|
+
# end
|
191
|
+
# ```
|
192
|
+
#
|
184
193
|
# * Accept a 2nd argument in the poll block, for example:
|
185
194
|
#
|
186
195
|
# ```
|
@@ -203,7 +212,6 @@ module Aws
|
|
203
212
|
# ```
|
204
213
|
#
|
205
214
|
class QueuePoller
|
206
|
-
|
207
215
|
# @param [String] queue_url
|
208
216
|
# @option options [Client] :client
|
209
217
|
# @option (see #poll)
|
@@ -258,6 +266,21 @@ module Aws
|
|
258
266
|
@default_config = @default_config.with(before_request: block) if block_given?
|
259
267
|
end
|
260
268
|
|
269
|
+
# Registers a callback that is invoked when the poll requests returns with no messages.
|
270
|
+
# This callback is invoked after the idle timeout is checked.
|
271
|
+
#
|
272
|
+
# poller.after_empty_receive do |stats|
|
273
|
+
# # Handle empty receive
|
274
|
+
# end
|
275
|
+
#
|
276
|
+
# @yieldparam [PollerStats] stats An object that tracks a few
|
277
|
+
# client-side statistics about the queue polling.
|
278
|
+
#
|
279
|
+
# @return [void]
|
280
|
+
def after_empty_receive(&block)
|
281
|
+
@default_config = @default_config.with(after_empty_receive: block) if block_given?
|
282
|
+
end
|
283
|
+
|
261
284
|
# Polls the queue, yielded a message, or an array of messages.
|
262
285
|
# Messages are automatically deleted from the queue at the
|
263
286
|
# end of the given block. See the class documentation on
|
@@ -333,7 +356,8 @@ module Aws
|
|
333
356
|
loop do
|
334
357
|
messages = get_messages(config, stats)
|
335
358
|
if messages.empty?
|
336
|
-
check_idle_timeout(config, stats
|
359
|
+
check_idle_timeout(config, stats)
|
360
|
+
config.after_empty_receive&.call(stats)
|
337
361
|
else
|
338
362
|
process_messages(config, stats, messages, &block)
|
339
363
|
end
|
@@ -348,21 +372,21 @@ module Aws
|
|
348
372
|
# `#receipt_handle`.
|
349
373
|
# @param [Integer] seconds
|
350
374
|
def change_message_visibility_timeout(message, seconds)
|
351
|
-
@client.change_message_visibility(
|
375
|
+
@client.change_message_visibility(
|
352
376
|
queue_url: @queue_url,
|
353
377
|
receipt_handle: message.receipt_handle,
|
354
|
-
visibility_timeout: seconds
|
355
|
-
|
378
|
+
visibility_timeout: seconds
|
379
|
+
)
|
356
380
|
end
|
357
381
|
|
358
382
|
# @note This method should be called from inside a {#poll} block.
|
359
383
|
# @param [#receipt_handle] message An object that responds to
|
360
384
|
# `#receipt_handle`.
|
361
385
|
def delete_message(message)
|
362
|
-
@client.delete_message(
|
386
|
+
@client.delete_message(
|
363
387
|
queue_url: @queue_url,
|
364
|
-
receipt_handle: message.receipt_handle
|
365
|
-
|
388
|
+
receipt_handle: message.receipt_handle
|
389
|
+
)
|
366
390
|
end
|
367
391
|
|
368
392
|
# @note This method should be called from inside a {#poll} block.
|
@@ -372,16 +396,16 @@ module Aws
|
|
372
396
|
def delete_messages(messages)
|
373
397
|
@client.delete_message_batch(
|
374
398
|
queue_url: @queue_url,
|
375
|
-
entries: messages.map
|
399
|
+
entries: messages.map do |msg|
|
376
400
|
{ id: msg.message_id, receipt_handle: msg.receipt_handle }
|
377
|
-
|
401
|
+
end
|
378
402
|
)
|
379
403
|
end
|
380
404
|
|
381
405
|
private
|
382
406
|
|
383
407
|
def get_messages(config, stats)
|
384
|
-
config.before_request
|
408
|
+
config.before_request&.call(stats)
|
385
409
|
messages = send_request(config).messages
|
386
410
|
stats.request_count += 1
|
387
411
|
messages
|
@@ -392,17 +416,22 @@ module Aws
|
|
392
416
|
@client.receive_message(params)
|
393
417
|
end
|
394
418
|
|
395
|
-
def check_idle_timeout(config, stats
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
419
|
+
def check_idle_timeout(config, stats)
|
420
|
+
return unless config.idle_timeout
|
421
|
+
|
422
|
+
since = stats.last_message_received_at || stats.polling_started_at
|
423
|
+
idle_time = Time.now - since
|
424
|
+
throw :stop_polling if idle_time > config.idle_timeout
|
401
425
|
end
|
402
426
|
|
403
427
|
def process_messages(config, stats, messages, &block)
|
404
428
|
stats.received_message_count += messages.count
|
405
429
|
stats.last_message_received_at = Time.now
|
430
|
+
|
431
|
+
# duplicated messages will have a different receipt handle
|
432
|
+
# so we need to provide the most recent receipt to
|
433
|
+
# delete a batch - thus, filtering below by message_id
|
434
|
+
messages = messages.reverse.uniq(&:message_id).reverse!
|
406
435
|
catch(:skip_delete) do
|
407
436
|
yield_messages(config, messages, stats, &block)
|
408
437
|
delete_messages(messages) unless config.skip_delete
|
@@ -421,7 +450,6 @@ module Aws
|
|
421
450
|
|
422
451
|
# Statistics tracked client-side by the {QueuePoller}.
|
423
452
|
class PollerStats
|
424
|
-
|
425
453
|
def initialize
|
426
454
|
@request_count = 0
|
427
455
|
@received_message_count = 0
|
@@ -444,27 +472,26 @@ module Aws
|
|
444
472
|
|
445
473
|
# @return [Time,nil]
|
446
474
|
attr_accessor :polling_stopped_at
|
447
|
-
|
448
475
|
end
|
449
476
|
|
450
477
|
# A read-only set of configuration used by the QueuePoller.
|
451
478
|
class PollerConfig
|
452
|
-
|
453
479
|
# @api private
|
454
|
-
CONFIG_OPTIONS = Set.new
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
480
|
+
CONFIG_OPTIONS = Set.new %i[
|
481
|
+
idle_timeout
|
482
|
+
skip_delete
|
483
|
+
before_request
|
484
|
+
after_empty_receive
|
485
|
+
]
|
459
486
|
|
460
487
|
# @api private
|
461
|
-
PARAM_OPTIONS = Set.new
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
]
|
488
|
+
PARAM_OPTIONS = Set.new %i[
|
489
|
+
wait_time_seconds
|
490
|
+
max_number_of_messages
|
491
|
+
visibility_timeout
|
492
|
+
attribute_names
|
493
|
+
message_attribute_names
|
494
|
+
]
|
468
495
|
|
469
496
|
# @return [Integer,nil]
|
470
497
|
attr_reader :idle_timeout
|
@@ -475,6 +502,9 @@ module Aws
|
|
475
502
|
# @return [Proc,nil]
|
476
503
|
attr_reader :before_request
|
477
504
|
|
505
|
+
# @return [Proc,nil]
|
506
|
+
attr_reader :after_empty_receive
|
507
|
+
|
478
508
|
# @return [Hash]
|
479
509
|
attr_reader :request_params
|
480
510
|
|
@@ -482,12 +512,13 @@ module Aws
|
|
482
512
|
@idle_timeout = nil
|
483
513
|
@skip_delete = false
|
484
514
|
@before_request = nil
|
515
|
+
@after_empty_receive = nil
|
485
516
|
@request_params = {
|
486
517
|
wait_time_seconds: 20,
|
487
518
|
max_number_of_messages: 1,
|
488
519
|
visibility_timeout: nil,
|
489
520
|
attribute_names: ['All'],
|
490
|
-
message_attribute_names: ['All']
|
521
|
+
message_attribute_names: ['All']
|
491
522
|
}
|
492
523
|
options.each do |opt_name, value|
|
493
524
|
if CONFIG_OPTIONS.include?(opt_name)
|
@@ -522,7 +553,6 @@ module Aws
|
|
522
553
|
PARAM_OPTIONS.each { |key| hash[key] = @request_params[key] }
|
523
554
|
hash
|
524
555
|
end
|
525
|
-
|
526
556
|
end
|
527
557
|
end
|
528
558
|
end
|