aws-sdk-sqs 1.63.0 → 1.70.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 +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
|