1

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

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

我使用了以下设置:-

配置/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)

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

4

1 回答 1

0

Ravindra,查看 shoryuken 的代码,您会收到错误消息,因为您没有创建名为 的 SQS 队列development_worker,对吗?

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

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

于 2017-08-09T12:42:31.410 回答