PushJob.php 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2022 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\index\controller;
  12. use think\Exception;
  13. use think\exception\ErrorException;
  14. use think\Queue;
  15. use think\Config;
  16. class PushJob
  17. {
  18. /**
  19. * 一个使用了队列的 action
  20. */
  21. public static function actionWithDoPinkJob(array $data, string $name = '')
  22. {
  23. try {
  24. // 1.当前任务将由哪个类来负责处理。
  25. // 当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
  26. $jobHandlerClassName = 'app\index\job\PullDoPink';
  27. // 2.当前任务归属的队列名称,如果为新队列,会自动创建
  28. $jobQueueName = Config::get('queue_name', '') ? Config::get('queue_name', '') : 'doPinkJobQueue';
  29. // 3.当前任务所需的业务数据 . 不能为 resource 类型,其他类型最终将转化为json形式的字符串
  30. // ( jobData 为对象时,存储其public属性的键值对 )
  31. if ($name) {
  32. $jobData = ['pinkInfo' => $data, 'time' => date('Y-m-d H:i:s'), 'doName' => $name];
  33. $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
  34. } else {
  35. $jobData = ['pinkInfo' => $data, 'time' => date('Y-m-d H:i:s')];
  36. if (!isset($data['pink_time']) || !$data['pink_time']) return true;
  37. $timewait = $data['pink_time'] + 300;
  38. //$jobData = [ 'pinkInfo' => 'hahah', 'time' => date('Y-m-d H:i:s'), 'b' => 21] ;
  39. //$timewait = 20;
  40. // 4.将该任务推送到消息队列,等待对应的消费者去执行
  41. $isPushed = Queue::later($timewait, $jobHandlerClassName, $jobData, $jobQueueName);
  42. //$isPushed = Queue::push($jobHandlerClassName , $jobData , $jobQueueName );
  43. // database 驱动时,返回值为 1|false ; redis 驱动时,返回值为 随机字符串|false
  44. }
  45. if ($isPushed !== false) {
  46. return 1;
  47. } else {
  48. return 1;
  49. }
  50. } catch (ErrorException $e) {
  51. echo $e->getMessage();
  52. }
  53. }
  54. }