如果是AmazonSQS,请使用SQS queueName而不是URL

时间:2019-05-07 21:31:02

标签: amazon-web-services amazon-sqs

我有以下代码来接收来自SQS的消息:

        ReceiveMessageRequest receiveMessageRequest = new
                ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(sqsBatchSize);

            ReceiveMessageResult messageResult = sqsClient.receiveMessage(receiveMessageRequest);

有什么方法可以传递queueName而不是在ReceiveMessageRequest对象中传递queueURL吗?

1 个答案:

答案 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。屏幕顶部的活动标签很难阅读,但似乎显示“赚钱”。