2017-10-10 109 views
0

我有一個配置文件配置我的AWS CLI工具在我的主目錄與我的區域設置爲eu-west-1並能成功地列出隊列:AWS CLI和Java SDK返回不正確的網址,SQS隊列

➜ ~ aws sqs list-queues 
{ 
    "QueueUrls": [ 
     "https://eu-west-1.queue.amazonaws.com/9*********42/second" 
    ] 
} 

我有下面的方法:

void sendMessage(String msg) { 
    AmazonSQS sqs = AmazonSQSClientBuilder.standard() 
      .withRegion(Regions.EU_WEST_1) 
      .build(); 

    CreateQueueRequest createQueueRequest = new CreateQueueRequest("second"); 
    String myQueueURL = sqs.createQueue(createQueueRequest).getQueueUrl(); 

    System.out.println("A list of queues..."); 

    for (String qURL : sqs.listQueues().getQueueUrls()) { 
     System.out.println("Found queue: " + qURL); 
    } 

    System.out.println("Sending msg '" + msg + "' to Q: " + myQueueURL); 
    sqs.sendMessage(new SendMessageRequest(myQueueURL, msg)); 
    sqs.sendMessage(new SendMessageRequest("https://sqs.eu-west-1.amazonaws.com/2*********73/second", msg + " with URL")); 
} 

從運行這種方法的輸出是:

A list of queues... 
Found queue: https://sqs.eu-west-1.amazonaws.com/9*********42/second 
Sending msg 'test message' to Q: https://sqs.eu-west-1.queue.amazonaws.com/9*********42/second 

我從AWS CLI和SDK獲得的URL包含數字9 ... 42,但這不是我在AWS控制檯中看到的。在控制檯中,URL包含數字2 ... 73。

當我添加了來自控制檯的URL到我的方法手動(如上所示)我可以成功地發送一個消息到隊列中,但是當我嘗試使用由list-queues操作給出的網址,則sqs.sendMessage()操作默默地失敗。

這些網址可能會有所不同嗎?

我還應該補充說,還有兩個其他隊列(「first」和「first.fifo」),我現在已經刪除並且不再顯示在控制檯中,但是當我使用list-queues時,這兩個隊列仍然列出。對於所有這些隊列,控制檯URL始終包含相同的2 ... 73編號,而我從CLI和SDK獲得的URL始終包含相同的9 ... 42編號。

我的問題是 - 這個數字是什麼,爲什麼它會不同?

回答

2

幾乎在我發佈問題後,我找到了答案。這個號碼是the AWS account number,我使用了一個來自不同帳戶的訪問密鑰/密鑰組合。

隊列沒有消失的原因是我無意中通過向他們發送消息來創建它們。

我的sqs.sendMessage()電話沒有默默失敗,消息出現在另一個帳戶的隊列中。

+1

感謝您發佈解決方案。我們大多數人在管理多個AWS賬戶時犯了這個錯誤。 –

+0

刪除這個問題並隱藏我的恥辱肯定是很有誘惑力的,但我認爲這是停止深夜工作的另一個原因! – Mike