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
网友评论