【问题标题】:Rails jobs and SidekiqRails 工作和 Sidekiq
【发布时间】:2018-08-29 03:26:39
【问题描述】:

我刚刚在我的应用上安装了redis和sidekiq,

我有工作在被调用时更新用户表上的字段,

每周向所有用户发送一封电子邮件的工作。

现在,如果我使用 bundle exec sidekiq 启动 sidekiq,更新用户字段的作业将启动并完成,但电子邮件作业仍保留在排队部分。

但是,如果我使用从 Sidekiq github 页面获得的 bundle exec sidekiq -q workers -q mailers 启动它,则只有邮件作业完成,其他作业留在排队部分。

有一个命令可以同时运行吗?我昨天才开始学习sidekiq和redis,如果这是一个愚蠢的问题,请见谅,

我在 application.rb 中将 activejob.que_adaptar 设置为 sidekiq

这就是我为用户作业设置 sidekiq 工作人员的方式:

class DeactivateUser
 include Sidekiq::Worker

  def perform
   User.active.update_all(active: false)
  end

end

谢谢。

【问题讨论】:

  • 问题可能是您没有将“默认”列为要处理的队列。
  • 嗨@MikePerham,感谢您的回复,我是否还需要列出邮寄作业的“邮寄”队列?你的回答很奇怪,因为我几天前才看了你在 sidekiq 上的演讲!
  • 您需要列出要处理的队列。我只会将所有作业发送到默认值,为什么要添加额外的队列?

标签: ruby-on-rails sidekiq


【解决方案1】:

使用您的队列列表创建config/sidekiq.yml 并运行sidekiq -C config/sidekiq.yml

    #config/sidekiq.yml

    ---
    :concurrency: 5
    :queues:
      - default
      - mailers
      - orders

【讨论】:

    【解决方案2】:

    按照 Oskar 的配置,按照相同的方法让单个 sidekiq 进程处理多个队列。此外,您必须在工作文件中提及队列名称。这样sidekiq 进程将从该队列的redis 中获取作业。例如:(sidekiq_options queue: :mailers

    class WORKER_NAME
      include Sidekiq::Worker
      sidekiq_options queue: :<queue_name>
    
       def perform
         ... # your work
       end
    end
    

    如果你想启动进程只监听一个队列邮件并且并发10,请这样开始。

    bundle exec sidekiq -c 10 -C config/myapp_sidekiq.yml -q mailers -q queue1 -q queue2

    这将监听总共 3 个名为 mailersqueue1queue2 的队列。这就是你必须启动sidekiq的方式。如需更多文档,请refer to this

    【讨论】:

    • 您好,感谢您的回复!所以当运行这个命令时bundle exec sidekiq -c 10 -C config/myapp_sidekiq.yml -q mailers -q queue1 -q queue2 这将告诉sidekiq 在redis 上的“mailers”、“queue1”和“queue2”队列中寻找作业对吗?这个命令 -c 10 这是说一次运行多少个作业?如果我不太明白,再次感谢和抱歉
    • -c 10 是并发。要运行多少个线程。没有多少工作。虽相同,但意义不同。
    • 请接受某人的回答,以便其他人知道该解决方案是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多