使用AWS SQS时,是否有理由更喜欢使用GetQueueUrl从区域,帐户ID和名称构建队列URL?

时间:2013-07-08 23:57:43

标签: amazon-web-services amazon-sqs

我有一个使用单个SQS队列的应用程序。

为了灵活起见,我想使用队列名称,SQS区域和AWS账户ID(以及正常的AWS凭证等)来配置应用程序,而不是提供完整的队列URL。

当我可以使用以下内容(在ruby中)构建它时,使用GetQueueUrl检索队列的URL是否有意义:

region = ENV['SQS_REGION'] # 'us-west-2'
account_id = ENV['SQS_AWS_ACCOUNT_ID'] # '773083218405'
queue_name = ENV['SQS_QUEUE_NAME'] # 'test3'
queue_url = "https://sqs.#{region}.amazonaws.com/#{account_id}/#{queue_name}
# => https://sqs.us-west-2.amazonaws.com/773083218405/test3 

可能的原因:

  • 亚马逊可能会更改其网址格式。
  • 其他???

3 个答案:

答案 0 :(得分:2)

我认为您无法保证该网址会包含此类表单。官方文档说明GetQueueUrl调用是获取队列URL的官方方法。因此,使用上述方法构建它可能是一个非常好的猜测,它也可能随时失败,因为亚马逊可以更改URL方案(例如,对于新队列)。

答案 1 :(得分:0)

如果亚马逊以突破方式更改队列URL,则不会立即更改,并且会慢慢弃用,并且会在版本升级时生效(即升级SDK时)。

虽然文档并不能保证,但亚马逊知道这对于成千上万的客户来说将是一次巨大的变革。

此外,许多客户使用从控制台获得的硬编码队列URL,因此这些客户也不会获得更新的队列URL格式。

最后,无论哪种方式,你都会安全。如果你有很多队列,那么你最好自己格式化它们。如果你有少量的队列,那么无论如何都不应该有太大的不同。

答案 2 :(得分:0)

我认为出于安全考虑,获取网址的最佳方式是通过sqs.queue.named方法。您可以做的是按名称记住队列以避免多次调用,如下所示:

# https://github.com/phstc/shoryuken/blob/master/lib/shoryuken/client.rb
class Client
  @@queues = {}

  class << self
    def queues(queue)
      @@queues[queue.to_s] ||= sqs.queues.named(queue)
    end
  end
end