2016-10-31 70 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);