如何连接到 SQS 队列

How to connect to SQS queue

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

所有队列都有完全访问权限(允许 - 每个人 - 所有 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;
}

但是没有任何显示。

同时,如果我以编程方式创建队列:

public static String createQueue(String queueName, AmazonSQS sqs) {
  System.out.println("Creating a new SQS queue called MyQueue.\n");
  CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName);
  return sqs.createQueue(createQueueRequest).getQueueUrl();
}

已列出,我可以通过它发送和接收消息。

但是我在管理控制台中没有看到创建的队列!

我做错了什么?

顺便说一句,我可以连接到通过 URL

从管理控制台创建的队列

如果您正在玩 Amazon 的示例(像我一样)- 请记住 BasicAWSCredentials 仅包含 accessKeysecretKeyregion 不会从 credentials 文件中读取。

正在为 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 队列位于特定区域。

  1. 确认您的代码在哪个区域创建区域,然后
  2. 确保您在 AWS 管理控制台中查看同一区域。

如果您没有将 SDK 配置为使用特定区域,无论是通过 API、环境变量还是通过 $HOME/.aws/config,很可能您的 API 调用创建队列 (createQueue) 是在默认区域 us-east-1(弗吉尼亚州)中创建一个新队列。检查是否是这种情况。

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