demoJob.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace app\admin\job;
  3. use think\facade\Log;
  4. use think\queue\Job;
  5. class demoJob
  6. {
  7. /**
  8. * fire是消息队列默认调用的方法
  9. * @param Job $job 当前的任务对象
  10. * @param array|mixed $data 发布任务时自定义的数据
  11. */
  12. public function fire(Job $job, $data)
  13. {
  14. //通过这个方法可以检查这个任务已经重试了几次了
  15. //if ($job->attempts() > 3) {}
  16. //有效消息到达消费者时可能已经不再需要执行了
  17. /* if(!$this->checkJob($data)){
  18. $job->delete();
  19. return;
  20. }*/
  21. //执行业务处理
  22. if($this->doJob($data)){
  23. $job->delete();//任务执行成功后删除
  24. }/*else{
  25. //检查任务重试次数
  26. if($job->attempts() > 3){
  27. Log::channel('test')->record('234:'.$data);
  28. $job->delete();
  29. }
  30. }*/
  31. // 也可以重新发布这个任务
  32. //$job->release($delay); //$delay为延迟时间
  33. }
  34. /**
  35. * 根据消息中的数据进行实际的业务处理
  36. */
  37. private function doJob($data)
  38. {
  39. // 实际业务流程处理
  40. try {
  41. $data['status'] = rand(999);
  42. Log::channel('test')->record(json_decode($data));
  43. }catch (\Exception $exception){
  44. Log::channel('test')->record('345'.$exception->getMessage());
  45. }
  46. return true;
  47. }
  48. //任务失败执行的方法
  49. public function failed($data)
  50. {
  51. // ...任务达到最大重试次数后,失败了
  52. }
  53. }