image.png
client調(diào)用
perform
放入 queue 隊(duì)列
perform_at,perform_async(alias方法)
以執(zhí)行時(shí)間為score放入有序集合schedule中
image.png
隊(duì)列
queue:default 隊(duì)列
Sidekiq::Manager 按設(shè)定的并發(fā)數(shù)(concurrency),調(diào)用Sidekiq::Process(創(chuàng)建線程)取出隊(duì)列捞高,消費(fèi)隊(duì)列返顺,遞歸執(zhí)行
并使用互斥量實(shí)現(xiàn)線程同步
image.png
image.png
image.png
Sidekiq.queues=%w( high,3 default,2 low,1 )
#["high", "high", "high", "default", "default", "low"]
brpop按照指定順序取出闺属,這個(gè)方法取到一個(gè)queue后重新排序汪疮;因權(quán)重高的數(shù)量多高概率排前面
image.png
image.png
image.png
實(shí)際執(zhí)行
image.png
retry schedule 重試和計(jì)劃任務(wù)隊(duì)列
使用lua腳本取出任務(wù)告抄,取執(zhí)行時(shí)間(分?jǐn)?shù))在當(dāng)前時(shí)間前的
image.png
image.png