2016-10-31 36 views
4

如何通过API和.Net SDK以编程方式列出AWS账户中的所有SQS队列?如何枚举AWS账户中的所有SQS队列

我已经在做一些与DynamoDb表相似的事情,这很简单 - 您可以在循环中使用ListTables对结果进行翻页,直到您将它们全部包含在内。

然而,等效的SQS Api端点ListQueues是不同的,并没有那么有用。它返回多达1000个队列,没有分页选项。

是的,在我的情况下可以有超过1000个队列。我有一个查询返回正好1000结果。这一切都在1个地区,所以它不同于this question

+0

你可以使用'QueueNamePrefix'参数来模拟的名字分页,特别是如果你知道你的队列名的一般格式。不是完美的解决方案,但可能会满足您的需求。 –

+0

是的,我们知道队列名称都以相同的前缀开头。这不是一种容易实现一般和高效的方法,而不是没有一些相当复杂的文本分析。 – Anthony

回答

4

您可以从支持分页的Cloudwatch中检索SQS队列名称。它只会返回被认为是活动的队列。

有源队列是described as

甲队列用于在队列多达六个小时内从 最后的活性(例如,任何API调用)视为活动通过CloudWatch的。

像这样的东西应该工作:

var client = new AmazonCloudWatchClient(RegionEndpoint.EUWest1); 
string nextToken = null; 
var results = Enumerable.Empty<string>(); 

do 
{ 
    var result = client.ListMetrics(new ListMetricsRequest() 
    { 
     MetricName = "ApproximateAgeOfOldestMessage", 
     NextToken = nextToken 
    }); 

    results = results.Concat(
     result 
     .Metrics 
     .SelectMany(x => x.Dimensions.Where(d => d.Name == "QueueName") 
     .Select(d => d.Value)) 
    ); 

    nextToken = result.NextToken; 

} while (nextToken != null);