我刚刚在我的应用上安装了redis和sidekiq,
我有一个工作是在调用时更新users表上的字段,
每周向所有用户发送一封电子邮件的工作。
现在,如果我使用bundle exec sidekiq
启动sidekiq更新用户字段的作业将关闭并完成,但电子邮件作业将保留在已排队的部分中。
但是,如果我使用bundle exec sidekiq -q workers -q mailers
启动它,我从Sidekiq github页面获得的只是邮件作业完成,其他人留在排队部分。
是否有命令可以同时运行?我昨天才开始了解sidekiq和redis,如果这是一个愚蠢的问题,那就很抱歉,
我在application.rb。
中将activejob.que_adaptar
设置为sidekiq
这就是我的sidekiq工作人员如何设置用户工作:
class DeactivateUser
include Sidekiq::Worker
def perform
User.active.update_all(active: false)
end
end
感谢。
答案 0 :(得分:1)
使用您的队列列表创建config/sidekiq.yml
并运行sidekiq -C config/sidekiq.yml
。
#config/sidekiq.yml
---
:concurrency: 5
:queues:
- default
- mailers
- orders
答案 1 :(得分:1)
正如Oskar配置的那样,按照相同的方法让单个sidekiq进程处理多个队列。此外,您还必须在worker文件中提及队列名称。这样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个名为mailers
,queue1
,queue2
的队列。这就是你必须启动sidekiq的方法。有关更多文档,请refer to this。