tp5 QUEUE队列操作硬核干货
创建队列文件代码 <?php namespace app\common\logic; use think\Queue; /** * */ class Jobc { protected $noNeedLogin = ['*']; protected $noNeedRight = ['*']; /** * @param array $data * @param string $name jishou cashcache scoretomoney tuihuo payorder * @return bool */ public static function create($data = [], $name = 'cashcache') { // // 1.当前任务将由哪个类来负责处理。 $jobHandlerClassName = 'app\common\logic\\' . trim(ucfirst($name), '0123456789'); // 2.当前任务归属的队列名称,如果为新队列,会自动创建 $jobQueueName = $name; // 3.当前任务所需的业务数据 // 4.将该任务推送到消息队列,等待对应的消费者去执行 $isPushed = Queue::push($jobHandlerClassName, $data, $jobQueueName); // database 驱动时,返回值为 1|false ; redis 驱动时,返回值为 随机字符串|false if ($isPushed !== false) { return true; } else { return false; } } } ?> 执行文件代码 <?php namespace app\common\logic; use addons\epay\library\Service; use app\api\controller\Order; use app\api\controller\Tools; use think\Db; use think\Queue; use think\queue\Job; use Yansongda\Pay\Pay; /** * 支付订单 */ class Payorder { /** * fire方法是消息队列默认调用的方法 * @param Job $job 当前的任务对象 * @param array|mixed $data 发布任务时自定义的数据 */ public function fire(Job $job, $data) { \app\common\model\Order::execPayOrder($data['order_sn'], $data['pay_type'], $data['zuser_id']); $job->delete(); } } ?> 调用创建队列代码: $data = [ 'order_sn' => $post['order_sn'], 'pay_type' => $post['pay_type'], 'zuser_id' => $uid, ]; Jobc::create($data, 'payorder'); 守护进程代码: php think queue:listen --queue payorder
发表评论