3

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

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

GetQueueUrl当我可以使用以下内容(在 ruby​​ 中)构建队列时,使用它来检索队列的 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 

它可能不会的可能原因:

  • 亚马逊可能会更改其 url 格式。
  • 其他???
4

3 回答 3

4

我认为你不能保证 URL 会有这样的形式。官方文档将GetQueueUrl调用声明为获取队列 url 的官方方法。因此,虽然使用上述方法构建它可能是一个很好的猜测,但它也可能随时失败,因为亚马逊可以更改 URL 方案(例如,用于新队列)。

于 2013-07-09T05:58:51.487 回答
2

如果 Amazon 以破坏性方式更改队列 URL,它将不会立即生效并且会慢慢弃用,并且会在升级版本时生效(即当您升级 SDK 时)。

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

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

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

于 2013-07-15T15:27:50.363 回答
0

我相信出于安全目的,获取 URL 的最佳方法是通过该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
于 2014-10-19T01:55:58.810 回答