`validate_queues' 的 shoryuken 错误:指定的队列

shoryuken error to `validate_queues': The specified queue(s)

我正在使用 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]

initializers/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)

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

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

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

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