ydin / jobman
0.1.0
2019-09-03 01:32 UTC
Requires
- php: >=7.1.0
- laravel/horizon: 3.3.2
This package is auto-updated.
Last update: 2025-05-28 18:49:01 UTC
README
- horizon + dispatch jobs
Jobman flow
- 產生一個需要進入 queue 的 'hello' 工作, 準備好該內容
- 建立資料 type=hello, attribs={json...} 到 'jobmans' table
- job 可能會因為失敗而執行多次, jobmans table 只會留下一部份的足跡
- 如果你有開啟 worker server, 那麼工作就會進入 jobman flow
Jobman flow picture
laravel table
- 用到 laravel 提供的 "failed_jobs" table, 該程式會建立這些 tables
dependency
- redis
- laravel horizon package
- laravel horizon config file
- database: laravel table "failed_jobs"
enable horizon
# 參數 --environment=local 的使用情況非常不穩定, 不使用 at laravel 5.8.26
php artisan horizon
google-chrome http://127.0.0.1:8000/horizon/dashboard
查看現在的情況
php artisan horizon:status
php artisan horizon:list
修正程式後, 重試失敗的 job
php artisan horizon:terminate # 修正程式後, 要重新啟動
php artisan horizon # 如果有建立並且啟用 supervisor, 消失時會自動啟動
php artisan queue:retry 5 # "failed_jobs" table "id" field
php artisan queue:retry all
如何建立一個新的 job
- 參考程式 src/Jobs/HelloWorldJob.php
- 建立程式 job 在任意的路徑
- 新增設定 config/jobman.php
- 新增設定 config/horizon.php
- 重新執行 php artisan horizon
- 重新啟動 supervisor (option)
- trigger your code, 參考 src/Console/Commands/TryHelloCommand.php
jobmans 部份的欄位說明
- attribs
- 傳遞 job 需要的訊息
- 有些 job 需要返還值, 也可以回存在這裡
- logs
- 希望在 job 裡面留下操作的記錄
- 這些記錄是發生問題才需要查看
- 所以不希望留在 laravel.log
- 可以記在這裡
- error_message
- 保留最後一次的 $exception->getMessage()
- exception
- 保留最後一次的 Exception
- failed_at
- 如果曾經失敗過, 在成功之後, 還是會保留該值
- completed_at
- 完成任務, 但不代表結果是正確的, 有些結果不是只有一種
- completed_code
- 通常是 null
- 如果結果不是只有一種, 可以存在這裡
- 例如
- 將資料加到資料庫, 但是該資料已存在, 但是這兩種情況都符合 job 之目的
- success
- already-exists
- 非同步的方式刪除一個 blog, 如果不存在, 就結束工作
- success
- blog-not-found
- 將資料加到資料庫, 但是該資料已存在, 但是這兩種情況都符合 job 之目的
應做未做的部份
-
超過 6 個月的資料可以刪除
- SELECT * FROM
jobmans
WHERE created_at < DATE_SUB(NOW(), INTERVAL 180 DAY);
- SELECT * FROM
-
未加入 queue 的 Jobman
- Jobman push() 的時候如果沒有開啟 redis
- 那麼這些 jobmans 將永遠不會被執行到
- 建立一個 console command 將這些 jobman 丟到 redis
- 該功能一方面也可以再次執行 jobman