【问题标题】:shoryuken error to `validate_queues': The specified queue(s)`validate_queues' 的 shoryuken 错误:指定的队列
【发布时间】:2018-01-17 08:32:47
【问题描述】:

我正在使用 rails “Shoryuken” gem,但是当我启动 rails 服务器时,我在开发环境中的队列验证时遇到错误,错误如下:-

gems/shoryuken-2.0.11/lib/shoryuken/environment_loader.rb:172:in `validate_queues': 指定的队列 ["development_worker"] 不存在 (ArgumentError)

我使用了以下设置:-

config/shoryuken.yml

aws:
  access_key_id: <%= ENV["SQS_IAM"] %>
  secret_access_key: <%= ENV["SQS_IAM_SECRET"] %>
  region: <%= ENV["SQS_IAM_REGION"] %>
concurrency: 25  # The number of allocated threads to process messages. Default 25
delay: 0         # The delay in seconds to pause a queue when it's empty. Default 0
queues:
  - ["<%= Rails.env %>_worker", 1]

初始化程序/shoryuken.rb

def parse_config(config_file)
  if File.exist?(config_file)
    YAML.load(ERB.new(IO.read(config_file)).result)
  else
    raise ArgumentError, "Config file #{config_file} does not exist"
  end
end

config = parse_config([Dir.pwd, 'config/shoryuken.yml'].join('/')).deep_symbolize_keys
Shoryuken::EnvironmentLoader.load(config)

我希望队列应该是特定于环境的。

【问题讨论】:

    标签: ruby-on-rails amazon-web-services ruby-on-rails-5 ruby-2.3.1 shoryuken


    【解决方案1】:

    Ravindra,查看 shoryuken 的 code,您收到错误是因为您没有创建名为 development_worker 的 SQS 队列,是这样吗?

    您需要为每个开发人员创建一个队列,因为 shoryuken 将在每个开发人员的计算机中运行。如果不这样做,每台计算机的所有 shoryuken 进程都将轮询同一队列的消息。 假设有两个 shoryuken 进程,sh1sh2,分别对应 dev1 和 dev2 机器。 如果 dev1 向dev-queue 发送 SQS msg,sh2 进程可以轮询 dev1 发送的消息。

    如果您希望避免在 AWS 中创建队列,可以查看this

    【讨论】:

    • 是的,我没有在 AWS SQS 创建队列“development_worker”。我试图通过使用 bundle exec Shoryuken sqs create development_worker 创建一个队列,它运行良好,但是在开发环境中运行 rails 服务器后,它出现了同样的错误。你能帮我吗我不熟悉Shoryuken,我用过sidekiq。
    • 您输入aws sqs 并查看创建的队列了吗?
    • 在“aws sqs”创建队列后,它工作正常,但我们的团队不想在“aws sqs”为每个开发人员创建不同的 2 队列。
    • @RavindraYadav 我已经更新了关于您的问题的答案。如果您没有相同的 aws 密钥或开发人员对应的 IAM 用户,该错误仍然可能发生。
    • 如果您使用 Rails Active Job,在开发中您可以使用内联适配器,它不需要 Shoryuken 或 SQS 队列,那么您可以配置 Shoryuken 适配器仅用于生产。如果您想在开发中使用 Shoryuken,我建议为每个开发人员创建队列 @9​​87654329@ 可能是一个不错的前缀。 SQS 不按队列收费,而是按请求收费。如果您想在开发中使用 Shoryuken,请使用多个队列。
    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多