使用者自定義定時任務的php實現

農夫山泉發表於2023-12-08

需求:

一個類似滴答清單任務提醒的功能.使用者可以自定義 每天 每週星期幾,每月幾號 接收提醒,方式不限於 簡訊 電子郵件 公眾號推送.

例如,使用者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 協議》,轉載必須註明作者和本文連結

相關文章