sidekiq源码解析


image.png

client调用

###perform 放入 queue 队列

perform_at,perform_async(alias方法)

以执行时间为score放入有序集合schedule中 image.png

队列

queue:default 队列

Sidekiq::Manager 按设定的并发数(concurrency),调用Sidekiq::Process(创建线程)取出队列,消费队列,递归执行 并使用互斥量实现线程同步 image.png

image.png

image.png

Sidekiq.queues=%w( high,3 default,2 low,1 ) 
#["high", "high", "high", "default", "default", "low"] 

brpop按照指定顺序取出,这个方法取到一个queue后重新排序;因权重高的数量多高概率排前面 image.png

image.png

image.png

实际执行 image.png

retry schedule 重试和计划任务队列

使用lua脚本取出任务,取执行时间(分数)在当前时间前的 image.png

image.png

https://segmentfault.com/a/1190000007321951