2017-10-10 70 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