如何连接到SQS队列

时间:2017-06-30 16:15:43

标签: java amazon-web-services amazon-sqs

我在管理控制台中创建了几个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();
}

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

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

我做错了什么?

BTW我可以通过URL连接到从管理控制台创建的队列

如果您正在玩亚马逊(例如我)的示例,请注意 BasicAWSCredentials 仅包含 accessKey secretKey ,以及<不会从凭据文件中读取em> region 。

正在为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;
}

2 个答案:

答案 0 :(得分:2)

SQS队列位于特定区域。

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

答案 1 :(得分:2)

如果您没有将SDK配置为使用特定区域,无论是通过API,通过环境变量还是通过createQueue,您的API调用可能都是为了创建队列(us-east-1 )正在默认区域 return new Promise(resolve => { let xhr = new XMLHttpRequest(); xhr.open('get', url, true); xhr.setRequestHeader("Access-Control-Allow-Origin", '*'); xhr.setRequestHeader('Accept', 'application/octet-stream'); xhr.setRequestHeader('Authorization', 'Bearer ' + token); // xhr.overrideMimeType('text/xml; charset=iso-8859-1'); xhr.overrideMimeType('text/xml; charset=iso-8859-1'); xhr.responseType = "arraybuffer"; xhr.onreadystatechange= function () { if (xhr.readyState === 4) { if (xhr.status === 200) { console.log(JSON.stringify((xhr.response))); resolve(new Blob([xhr.response], { type: 'application/pdf' })); } else { //do something } } } xhr.send(); }); then use it like this: your-function.then( (blob :Blob) => { var downloadUrl = URL.createObjectURL(blob); var downloadLink = document.createElement('a'); downloadLink.href = downloadUrl; downloadLink.target = '_blank'; document.body.appendChild(downloadLink); downloadLink.click(); }); (弗吉尼亚州)中创建新队列。检查是否是这种情况。

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