如何连接到 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 仅包含 accessKey 和 secretKey 和 region 不会从 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 队列位于特定区域。
- 确认您的代码在哪个区域创建区域,然后
- 确保您在 AWS 管理控制台中查看同一区域。
如果您没有将 SDK 配置为使用特定区域,无论是通过 API、环境变量还是通过 $HOME/.aws/config
,很可能您的 API 调用创建队列 (createQueue
) 是在默认区域 us-east-1
(弗吉尼亚州)中创建一个新队列。检查是否是这种情况。
如果您有多个帐户,请确保您使用的凭据是正确的帐户。
我在管理控制台创建了几个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 仅包含 accessKey 和 secretKey 和 region 不会从 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 队列位于特定区域。
- 确认您的代码在哪个区域创建区域,然后
- 确保您在 AWS 管理控制台中查看同一区域。
如果您没有将 SDK 配置为使用特定区域,无论是通过 API、环境变量还是通过 $HOME/.aws/config
,很可能您的 API 调用创建队列 (createQueue
) 是在默认区域 us-east-1
(弗吉尼亚州)中创建一个新队列。检查是否是这种情况。
如果您有多个帐户,请确保您使用的凭据是正确的帐户。