我有以下代码来接收来自SQS的消息:
ReceiveMessageRequest receiveMessageRequest = new
ReceiveMessageRequest();
receiveMessageRequest.setQueueUrl(queueUrl);
receiveMessageRequest.setMaxNumberOfMessages(sqsBatchSize);
ReceiveMessageResult messageResult = sqsClient.receiveMessage(receiveMessageRequest);
有什么方法可以在 ReceiveMessageRequest 对象中传递queueName而不是传递queueURL吗?
奇怪的是,没有。
嗯,这实际上并不那奇怪。队列名称仅在每个 AWS 账户内的区域级别是唯一的(在一个账户或多个账户之间不是全局唯一的),并且另一个账户可能会授予您访问其队列的权限,因此队列名称本身并不足以提供足够的信息以确定您要访问哪个队列。还需要账号和地区。 (在 SQS 早期,该区域最初并未考虑在内,因为只有一个区域。)
大概出于这个原因,SQS 查询 API(SDK 使用的 Web 服务)要求在请求中包含队列 URL。它是唯一标识队列的值,因为帐户、区域和队列名称都嵌入其中。
队列也可以由 ARN 来识别,这也是有道理的,但十多年前 SQS 首次推出时,ARN 可能还没有被发明。 SQS 是有史以来第一个 AWS 服务,这篇关于它的博客文章,从 2006 年开始 包含一个无价的经典老派 Amazon 屏幕截图。屏幕顶部的活动选项卡很难阅读,但似乎写着“赚钱”。
fwiw,至少从 2.14 开始,您可以在该 api 中使用队列名称而不是 url。不知道这个是什么时候引入的,api文档根本没有提到它