tp5 QUEUE队列操作硬核干货

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


最后编辑于:2021/10/29作者: 牛逼PHP

相关推荐

  • 暂无相关推荐

发表评论