需求:
一個類似滴答清單任務提醒的功能.使用者可以自定義 每天 每週星期幾,每月幾號 接收提醒,方式不限於 簡訊 電子郵件 公眾號推送.
例如,使用者a 設定一個每天3點提醒的任務 使用者b設定一個每週三5點提醒的任務,使用者c設定一個每月3號提醒的任務.
一般我們可以用crontab表示式來現實,但是成千上萬的使用者,有上萬的定時任務怎麼樣用crontab實現呢? 而且php沒有好的定時任務系統.
我的解決辦法是用 一個或者幾個定時任務來實現.
使用者的定時任務可以用一個表來儲存.記錄 定時任務的型別, 是單次還是重複,型別是每天,每週,還是每年每月. 具體提醒的 小時和分鐘.
然後使用其他語言的定時任務系統,或者laravel自動的定時任務系統(分鐘級別就夠)來觸發.
xxl-job-admin(java) 或者 jiacrontab (go)
寫一個laravel自定義命令 用 以上的定時任務觸發 例如 php artisan MyCrontab.
用carbon包,可以得出,現在這一分鐘是 星期幾,幾號,小時,分鐘,月份.
carbon.nesbot.com/docs/
然後寫sql語句找出符合條件的任務出來.寫入laravel佇列來執行.
建議使用者的定時任務可以設定幾種狀態, 未執行,已入佇列,執行完佇列,把狀態設定回未執行.
還有單次執行的任務和週期性重複的任務分開表存,查詢的時候也分開查.最多幾個 定時任務,就可以把 每年 每月 每日的任務查詢出寫入佇列.
這個是其中一種實現方式.給大家參考一下.這種方式的缺點就是 要每分鐘查表,如果這一分鐘的使用者定時任務有幾百萬.可能就不夠時間寫入佇列.
本作品採用《CC 協議》,轉載必須註明作者和本文連結