Java 如何连接到SQS队列

Java 如何连接到SQS队列,java,amazon-web-services,amazon-sqs,Java,Amazon Web Services,Amazon Sqs,我在管理控制台中创建了几个SQS队列 所有队列都具有完全访问权限Allow-Everyone-All SQS操作 我已经创建了必要的凭据,可以连接到AWS 现在我正在尝试连接到创建的队列: public static List<String> listQueues(AmazonSQS sqs) { System.out.println("Listing all queues in your account.\n"); ListQueuesResult queueList =

我在管理控制台中创建了几个SQS队列

所有队列都具有完全访问权限Allow-Everyone-All SQS操作

我已经创建了必要的凭据,可以连接到AWS

现在我正在尝试连接到创建的队列:

public static List<String> listQueues(AmazonSQS sqs) {
  System.out.println("Listing all queues in your account.\n");
  ListQueuesResult queueList = sqs.listQueues();
  List<String> queueUrls = queueList.getQueueUrls();
  for (String queueUrl : queueUrls) {
    System.out.println("  QueueUrl: " + queueUrl);
  }
  System.out.println();

  return queueUrls;
}
它已列出,我可以从中发送和接收消息

但我在管理控制台中看不到创建的队列

我做错了什么

顺便说一句,我可以通过URL连接到从管理控制台创建的队列

如果您像我一样使用来自Amazon的示例,请记住BasicAWSCredentials只包含accessKey和secretKey,并且不会从凭证文件中读取区域

正在为AmazonSQSClient手动设置区域:

public static AmazonSQS createSqsClient() {
    AWSCredentials credentials = null;
    try {
        credentials = new ProfileCredentialsProvider().getCredentials();
    } catch (Exception e) {
        throw new AmazonClientException(
                "Cannot load the credentials from the credential profiles file. " +
                        "Please make sure that your credentials file is at the correct " +
                        "location (~/.aws/credentials), and is in valid format.",
                e);
    }

    AmazonSQS sqs = new AmazonSQSClient(credentials);
    Region region = Region.getRegion(Regions.US_EAST_2);
    sqs.setRegion(region);
    return sqs;
}

SQS队列位于特定区域

确认代码在哪个区域中创建区域,然后 确保您在AWS管理控制台中查看的是同一区域。
如果未将SDK配置为使用特定区域(通过API、环境变量或$HOME/.aws/config),则创建队列createQueue的API调用很可能是在默认区域us-east-1 Virginia中创建新队列。看看情况是否如此


如果您有多个帐户,请确保您使用了正确帐户的凭据。

因为我有一个免费的测试帐户,所以所有队列都是在us-east-2区域创建的。我已经在凭证文件中设置了它:region=us-east-2,但它没有帮助,我只能通过URL连接到此队列。@sergpank因为我有一个免费的测试帐户,所以所有队列都是在us-east-2 region中创建的。。这是不真实的。AWS没有将免费层帐户限制为单个区域。@sergpank我100%相信,如果您在AWS管理控制台中更改区域,您将找到您的队列。最有可能发生在美国东弗吉尼亚地区。是的,你完全正确,我没有注意到这个地区在这个例子中是湿的。谢谢你的帮助!你对这个地区的看法绝对正确!我没有注意到,在这个例子中,我们设置了WEST。
public static AmazonSQS createSqsClient() {
    AWSCredentials credentials = null;
    try {
        credentials = new ProfileCredentialsProvider().getCredentials();
    } catch (Exception e) {
        throw new AmazonClientException(
                "Cannot load the credentials from the credential profiles file. " +
                        "Please make sure that your credentials file is at the correct " +
                        "location (~/.aws/credentials), and is in valid format.",
                e);
    }

    AmazonSQS sqs = new AmazonSQSClient(credentials);
    Region region = Region.getRegion(Regions.US_EAST_2);
    sqs.setRegion(region);
    return sqs;
}