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: 2024-09-28 17:23:05 UTC
README
- horizon + 分发工作
Jobman 流程
- 生成一个需要进入队列的 'hello' 工作,准备好该内容
- 在 'jobmans' 表中建立数据 type=hello, attribs={json...}
- job 可能因为失败而执行多次,jobmans 表只保留部分足迹
- 如果你已开启 worker 服务器,那么工作将进入 jobman 流程
Jobman 流程图
laravel 表
- 使用 laravel 提供的 "failed_jobs" 表,该程序会建立这些表
依赖
- redis
- laravel horizon 包
- laravel horizon 配置文件
- 数据库:laravel 表 "failed_jobs"
启用 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 (可选)
- 触发你的代码,参考 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