aws-sdk-sqs 1.39.0 → 1.86.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.
@@ -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, messages)
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 { |msg|
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.call(stats) if 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, messages)
396
- if config.idle_timeout
397
- since = stats.last_message_received_at || stats.polling_started_at
398
- idle_time = Time.now - since
399
- throw :stop_polling if idle_time > config.idle_timeout
400
- end
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
- :idle_timeout,
456
- :skip_delete,
457
- :before_request,
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
- :wait_time_seconds,
463
- :max_number_of_messages,
464
- :visibility_timeout,
465
- :attribute_names,
466
- :message_attribute_names,
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)
@@ -498,6 +529,12 @@ module Aws
498
529
  raise ArgumentError, "invalid option #{opt_name.inspect}"
499
530
  end
500
531
  end
532
+
533
+ max_number_of_messages = @request_params[:max_number_of_messages]
534
+ unless max_number_of_messages.is_a?(Integer) && max_number_of_messages.positive?
535
+ raise ArgumentError, ':max_number_of_messages must be a positive integer'
536
+ end
537
+
501
538
  @request_params.freeze
502
539
  freeze
503
540
  end
@@ -516,7 +553,6 @@ module Aws
516
553
  PARAM_OPTIONS.each { |key| hash[key] = @request_params[key] }
517
554
  hash
518
555
  end
519
-
520
556
  end
521
557
  end
522
558
  end
@@ -76,63 +76,101 @@ module Aws::SQS
76
76
  # * `MessageRetentionPeriod` – The length of time, in seconds, for which
77
77
  # Amazon SQS retains a message. Valid values: An integer from 60
78
78
  # seconds (1 minute) to 1,209,600 seconds (14 days). Default: 345,600
79
- # (4 days).
80
- #
81
- # * `Policy` The queue's policy. A valid AWS policy. For more
82
- # information about policy structure, see [Overview of AWS IAM
83
- # Policies][1] in the *Amazon IAM User Guide*.
79
+ # (4 days). When you change a queue's attributes, the change can take
80
+ # up to 60 seconds for most of the attributes to propagate throughout
81
+ # the Amazon SQS system. Changes made to the `MessageRetentionPeriod`
82
+ # attribute can take up to 15 minutes and will impact existing
83
+ # messages in the queue potentially causing them to be expired and
84
+ # deleted if the `MessageRetentionPeriod` is reduced below the age of
85
+ # existing messages.
86
+ #
87
+ # * `Policy` – The queue's policy. A valid Amazon Web Services policy.
88
+ # For more information about policy structure, see [Overview of Amazon
89
+ # Web Services IAM Policies][1] in the *IAM User Guide*.
84
90
  #
85
91
  # * `ReceiveMessageWaitTimeSeconds` – The length of time, in seconds,
86
92
  # for which a ` ReceiveMessage ` action waits for a message to arrive.
87
93
  # Valid values: An integer from 0 to 20 (seconds). Default: 0.
88
94
  #
95
+ # * `VisibilityTimeout` – The visibility timeout for the queue, in
96
+ # seconds. Valid values: An integer from 0 to 43,200 (12 hours).
97
+ # Default: 30. For more information about the visibility timeout, see
98
+ # [Visibility Timeout][2] in the *Amazon SQS Developer Guide*.
99
+ #
100
+ # The following attributes apply only to [dead-letter queues:][3]
101
+ #
89
102
  # * `RedrivePolicy` – The string that includes the parameters for the
90
103
  # dead-letter queue functionality of the source queue as a JSON
91
- # object. For more information about the redrive policy and
92
- # dead-letter queues, see [Using Amazon SQS Dead-Letter Queues][2] in
93
- # the *Amazon Simple Queue Service Developer Guide*.
104
+ # object. The parameters are as follows:
94
105
  #
95
106
  # * `deadLetterTargetArn` – The Amazon Resource Name (ARN) of the
96
107
  # dead-letter queue to which Amazon SQS moves messages after the
97
108
  # value of `maxReceiveCount` is exceeded.
98
109
  #
99
110
  # * `maxReceiveCount` – The number of times a message is delivered to
100
- # the source queue before being moved to the dead-letter queue. When
101
- # the `ReceiveCount` for a message exceeds the `maxReceiveCount` for
102
- # a queue, Amazon SQS moves the message to the dead-letter-queue.
103
- #
104
- # <note markdown="1"> The dead-letter queue of a FIFO queue must also be a FIFO queue.
105
- # Similarly, the dead-letter queue of a standard queue must also be a
106
- # standard queue.
111
+ # the source queue before being moved to the dead-letter queue.
112
+ # Default: 10. When the `ReceiveCount` for a message exceeds the
113
+ # `maxReceiveCount` for a queue, Amazon SQS moves the message to the
114
+ # dead-letter-queue.
115
+ #
116
+ # * `RedriveAllowPolicy` The string that includes the parameters for
117
+ # the permissions for the dead-letter queue redrive permission and
118
+ # which source queues can specify dead-letter queues as a JSON object.
119
+ # The parameters are as follows:
120
+ #
121
+ # * `redrivePermission` – The permission type that defines which
122
+ # source queues can specify the current queue as the dead-letter
123
+ # queue. Valid values are:
124
+ #
125
+ # * `allowAll` – (Default) Any source queues in this Amazon Web
126
+ # Services account in the same Region can specify this queue as
127
+ # the dead-letter queue.
128
+ #
129
+ # * `denyAll` – No source queues can specify this queue as the
130
+ # dead-letter queue.
131
+ #
132
+ # * `byQueue` – Only queues specified by the `sourceQueueArns`
133
+ # parameter can specify this queue as the dead-letter queue.
134
+ #
135
+ # * `sourceQueueArns` – The Amazon Resource Names (ARN)s of the source
136
+ # queues that can specify this queue as the dead-letter queue and
137
+ # redrive messages. You can specify this parameter only when the
138
+ # `redrivePermission` parameter is set to `byQueue`. You can specify
139
+ # up to 10 source queue ARNs. To allow more than 10 source queues to
140
+ # specify dead-letter queues, set the `redrivePermission` parameter
141
+ # to `allowAll`.
142
+ #
143
+ # <note markdown="1"> The dead-letter queue of a FIFO queue must also be a FIFO queue.
144
+ # Similarly, the dead-letter queue of a standard queue must also be a
145
+ # standard queue.
107
146
  #
108
- # </note>
109
- #
110
- # * `VisibilityTimeout` – The visibility timeout for the queue, in
111
- # seconds. Valid values: An integer from 0 to 43,200 (12 hours).
112
- # Default: 30. For more information about the visibility timeout, see
113
- # [Visibility Timeout][3] in the *Amazon Simple Queue Service
114
- # Developer Guide*.
147
+ # </note>
115
148
  #
116
- # The following attributes apply only to [server-side-encryption][4]\:
149
+ # The following attributes apply only to [server-side-encryption][4]:
117
150
  #
118
- # * `KmsMasterKeyId` – The ID of an AWS-managed customer master key
119
- # (CMK) for Amazon SQS or a custom CMK. For more information, see [Key
120
- # Terms][5]. While the alias of the AWS-managed CMK for Amazon SQS is
121
- # always `alias/aws/sqs`, the alias of a custom CMK can, for example,
122
- # be `alias/MyAlias `. For more examples, see [KeyId][6] in the *AWS
123
- # Key Management Service API Reference*.
151
+ # * `KmsMasterKeyId` – The ID of an Amazon Web Services managed customer
152
+ # master key (CMK) for Amazon SQS or a custom CMK. For more
153
+ # information, see [Key Terms][5]. While the alias of the Amazon Web
154
+ # Services managed CMK for Amazon SQS is always `alias/aws/sqs`, the
155
+ # alias of a custom CMK can, for example, be `alias/MyAlias `. For
156
+ # more examples, see [KeyId][6] in the *Key Management Service API
157
+ # Reference*.
124
158
  #
125
159
  # * `KmsDataKeyReusePeriodSeconds` – The length of time, in seconds, for
126
160
  # which Amazon SQS can reuse a [data key][7] to encrypt or decrypt
127
- # messages before calling AWS KMS again. An integer representing
128
- # seconds, between 60 seconds (1 minute) and 86,400 seconds (24
129
- # hours). Default: 300 (5 minutes). A shorter time period provides
130
- # better security but results in more calls to KMS which might incur
131
- # charges after Free Tier. For more information, see [How Does the
132
- # Data Key Reuse Period Work?][8].
161
+ # messages before calling KMS again. An integer representing seconds,
162
+ # between 60 seconds (1 minute) and 86,400 seconds (24 hours).
163
+ # Default: 300 (5 minutes). A shorter time period provides better
164
+ # security but results in more calls to KMS which might incur charges
165
+ # after Free Tier. For more information, see [How Does the Data Key
166
+ # Reuse Period Work?][8]
167
+ #
168
+ # * `SqsManagedSseEnabled` – Enables server-side queue encryption using
169
+ # SQS owned encryption keys. Only one server-side encryption option is
170
+ # supported per queue (for example, [SSE-KMS][9] or [SSE-SQS][10]).
133
171
  #
134
172
  # The following attributes apply only to [FIFO (first-in-first-out)
135
- # queues][9]\:
173
+ # queues][11]:
136
174
  #
137
175
  # * `FifoQueue` – Designates a queue as FIFO. Valid values are `true`
138
176
  # and `false`. If you don't specify the `FifoQueue` attribute, Amazon
@@ -141,13 +179,13 @@ module Aws::SQS
141
179
  # When you set this attribute, you must also provide the
142
180
  # `MessageGroupId` for your messages explicitly.
143
181
  #
144
- # For more information, see [FIFO queue logic][10] in the *Amazon
145
- # Simple Queue Service Developer Guide*.
182
+ # For more information, see [FIFO queue logic][12] in the *Amazon SQS
183
+ # Developer Guide*.
146
184
  #
147
185
  # * `ContentBasedDeduplication` – Enables content-based deduplication.
148
186
  # Valid values are `true` and `false`. For more information, see
149
- # [Exactly-once processing][11] in the *Amazon Simple Queue Service
150
- # Developer Guide*. Note the following:
187
+ # [Exactly-once processing][13] in the *Amazon SQS Developer Guide*.
188
+ # Note the following:
151
189
  #
152
190
  # * Every message must have a unique `MessageDeduplicationId`.
153
191
  #
@@ -178,7 +216,7 @@ module Aws::SQS
178
216
  # duplicates and only one copy of the message is delivered.
179
217
  #
180
218
  # The following attributes apply only to [high throughput for FIFO
181
- # queues][12]\:
219
+ # queues][14]:
182
220
  #
183
221
  # * `DeduplicationScope` – Specifies whether message deduplication
184
222
  # occurs at the message group or queue level. Valid values are
@@ -201,27 +239,29 @@ module Aws::SQS
201
239
  # deduplication occurs as specified.
202
240
  #
203
241
  # For information on throughput quotas, see [Quotas related to
204
- # messages][13] in the *Amazon Simple Queue Service Developer Guide*.
242
+ # messages][15] in the *Amazon SQS Developer Guide*.
205
243
  #
206
244
  #
207
245
  #
208
246
  # [1]: https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html
209
- # [2]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html
210
- # [3]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html
247
+ # [2]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html
248
+ # [3]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html
211
249
  # [4]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html
212
250
  # [5]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-sse-key-terms
213
251
  # [6]: https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html#API_DescribeKey_RequestParameters
214
252
  # [7]: https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys
215
253
  # [8]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-server-side-encryption.html#sqs-how-does-the-data-key-reuse-period-work
216
- # [9]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html
217
- # [10]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html
218
- # [11]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html
219
- # [12]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html
220
- # [13]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html
254
+ # [9]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sse-existing-queue.html
255
+ # [10]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-sqs-sse-queue.html
256
+ # [11]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html
257
+ # [12]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-understanding-logic.html
258
+ # [13]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues-exactly-once-processing.html
259
+ # [14]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html
260
+ # [15]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/quotas-messages.html
221
261
  # @option options [Hash<String,String>] :tags
222
262
  # Add cost allocation tags to the specified Amazon SQS queue. For an
223
- # overview, see [Tagging Your Amazon SQS Queues][1] in the *Amazon
224
- # Simple Queue Service Developer Guide*.
263
+ # overview, see [Tagging Your Amazon SQS Queues][1] in the *Amazon SQS
264
+ # Developer Guide*.
225
265
  #
226
266
  # When you use queue tags, keep the following guidelines in mind:
227
267
  #
@@ -235,15 +275,15 @@ module Aws::SQS
235
275
  # * A new tag with a key identical to that of an existing tag overwrites
236
276
  # the existing tag.
237
277
  #
238
- # For a full list of tag restrictions, see [Limits Related to Queues][2]
239
- # in the *Amazon Simple Queue Service Developer Guide*.
278
+ # For a full list of tag restrictions, see [Quotas related to queues][2]
279
+ # in the *Amazon SQS Developer Guide*.
240
280
  #
241
281
  # <note markdown="1"> To be able to tag a queue on creation, you must have the
242
282
  # `sqs:CreateQueue` and `sqs:TagQueue` permissions.
243
283
  #
244
284
  # Cross-account permissions don't apply to this action. For more
245
- # information, see [Grant cross-account permissions to a role and a user
246
- # name][3] in the *Amazon Simple Queue Service Developer Guide*.
285
+ # information, see [Grant cross-account permissions to a role and a
286
+ # username][3] in the *Amazon SQS Developer Guide*.
247
287
  #
248
288
  # </note>
249
289
  #
@@ -254,7 +294,9 @@ module Aws::SQS
254
294
  # [3]: https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-customer-managed-policy-examples.html#grant-cross-account-permissions-to-role-and-user-name
255
295
  # @return [Queue]
256
296
  def create_queue(options = {})
257
- resp = @client.create_queue(options)
297
+ resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
298
+ @client.create_queue(options)
299
+ end
258
300
  Queue.new(
259
301
  url: resp.data.queue_url,
260
302
  client: @client
@@ -275,10 +317,13 @@ module Aws::SQS
275
317
  #
276
318
  # Queue URLs and names are case-sensitive.
277
319
  # @option options [String] :queue_owner_aws_account_id
278
- # The AWS account ID of the account that created the queue.
320
+ # The Amazon Web Services account ID of the account that created the
321
+ # queue.
279
322
  # @return [Queue]
280
323
  def get_queue_by_name(options = {})
281
- resp = @client.get_queue_url(options)
324
+ resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
325
+ @client.get_queue_url(options)
326
+ end
282
327
  Queue.new(
283
328
  url: resp.data.queue_url,
284
329
  client: @client
@@ -310,7 +355,9 @@ module Aws::SQS
310
355
  # @return [Queue::Collection]
311
356
  def queues(options = {})
312
357
  batches = Enumerator.new do |y|
313
- resp = @client.list_queues(options)
358
+ resp = Aws::Plugins::UserAgent.metric('RESOURCE_MODEL') do
359
+ @client.list_queues(options)
360
+ end
314
361
  resp.each_page do |page|
315
362
  batch = []
316
363
  page.data.queue_urls.each do |q|