laravel 队列任务的执行

2018-03-15 07:25:34   php分享记录

  队列任务,laravel  

由于项目的需求,决定采用laravel的队列任务来实现

环境如下:laravel 5.1;php 7.1.3;运行环境window

准备工作:

  1. 修改queue中的队列驱动为database
    1. #修改.env文件
    2. QUEUE_DRIVER=database
  2. 由于我们决定使用mysql作为队列的存储工具,所以我们需要创建任务表
    1. php artisan queue:table
    2. php artisan migrate
  3. 创建任务类
    1. php artisan make:job SendReminderSms
  4. 基于任务的及时处理以及避免进程长时间后台执行,我们采用websoket的方式,有新客户加入时才推送任务进队列
    1. $staff = Staff::find($all_cache_need[0]);
    2. //推送任务
    3. $this->dispatch(new SendRemindSms($staff));
  5. 修改任务类

    1. ..............
    2. /**
    3. * 执行任务
    4. * Execute the job.
    5. *
    6. * @return void
    7. */
    8. public function handle()
    9. {
    10. $phone = $this->staff->phone;
    11. if(!empty($phone)){
    12. \sendSms($phone);
    13. //准备执行第二次尝试
    14. if($this->attempts()<2){
    15. $this->release(20);
    16. }
    17. }
    18. }
    19. ..............
  6. 运行队列监视器
    1. #该运行方式比queue:listen更加节省内存以及cpu,进程窗口不可关闭
    2. php artisan queue:work --daemon
  7. 总结:可惜windows平台的php cgi进程守护不好处理,可能会有队列进程死掉的问题,正在想办法处理;laravel框架真实博大精深,非常好用,tp我已经忘光了、、、、、