我有以下代码来接收来自SQS的消息:
ReceiveMessageRequest receiveMessageRequest = new
ReceiveMessageRequest();
receiveMessageRequest.setQueueUrl(queueUrl);
receiveMessageRequest.setMaxNumberOfMessages(sqsBatchSize);
ReceiveMessageResult messageResult = sqsClient.receiveMessage(receiveMessageRequest);
有什么方法可以传递queueName而不是在ReceiveMessageRequest对象中传递queueURL吗?
答案 0 :(得分:1)
奇怪的是,没有。
嗯,这实际上不是 奇怪。队列名称仅在每个AWS账户内的区域级别是唯一的(在一个账户或多个账户中不是全局唯一的),并且另一个账户可能会授予您访问其队列的权限,因此队列名称本身不足以提供信息以确定要访问的队列。还需要帐号和地区。 (在SQS成立之初,该区域最初不是考虑因素,因为只有一个区域。)
大概是由于这个原因,请求中包含了SQS查询API(SDK使用的Web服务)requires the Queue URL。这个值唯一地标识一个队列,因为帐户,区域和队列名称都嵌入其中。
ARN可以交替识别队列,这也很有意义,但是很可能早在十年前SQS首次发布时就尚未发明ARN。 SQS是有史以来第一个AWS服务,this blog post about it, from 2006包含的屏幕快照是无价的经典老式Amazon。屏幕顶部的活动标签很难阅读,但似乎显示“赚钱”。