将 SQS 与 Ruby on Rails 结合使用的最佳实践

Vij*_* mv 6 ruby-on-rails amazon-sqs consumer ruby-on-rails-5

我需要通过我的 Rails 应用程序使用 SQS 事件。我写了一个 Sidekiq 作业,它执行如下长轮询:

class SqsConsumerWorker
  include Sidekiq::Worker
  
  def perform
    ...
    poller = Aws::SQS::QueuePoller.new(<queue_url>, client: <sqs_instance>)
    poller.poll(wait_time_seconds: 20, max_number_of_messages: 10, visibility_timeout: 180) do |messages|
      messages.each do |message|
        puts message.inspect
      end
    end  
  end
end 
Run Code Online (Sandbox Code Playgroud)

第一个问题是何时开始这项工作。目前,我已将调用移至 Rails 初始值设定项,并在其中重写了 Sidekiqconfig.on(:startup)块来调用此作业。这将帮助我在每次部署时开始工作。(我还在这个初始化程序中编写了一些逻辑来检查工作人员的数量是否超过某个限制等。)

我想了解是否有更好的方法来解决这个问题?我见过将这些东西抽象出来的宝石升龙轩。但我需要对消费者有更多的控制,并考虑拥有自己的实现。我还需要了解如何通过这种方法扩大和缩小消费者数量。