APP任务模块功能借助php-resque实现业务解耦

先上设计图

说明:任务模块分一次性任务和每日任务,可能还包括男女用户任务区分

处理步骤:

一、同步任务数据库

    1.1、任务列表数据库

   1.2、完成任务数据库

二、搭建即时消息队列

一、composer require resque/php-resque

二、因为服务器redis设置了密码,所以要修改包文件

vendor/resque/php-resque/lib/Resque.php

手动修改redis连接方法

三、在项目增加  Worker.php   

3.1 增加内容

<?php

/**
 *在命令行执行  QUEUE=doTask  php app/jobs/Worker.php       QUEUE=doTask QUEUE=前面是参数
 * 后台执行  QUEUE=doTask nohup  php app/jobs/Worker.php &
 * QUEUE doTask:做任务
 */
@define("IN_APP", true);
@define("APP_DIR", "/www/wwwroot/seeklove_main");
require_once(APP_DIR."/configs/config.inc.php");
require_once ROOT_PATH.'/vendor/autoload.php';
require_once(ROOT_PATH."/configs/init.inc.php");
require_once(ROOT_PATH."/common/functions.php");
require_once(ROOT_PATH."app/jobs/jobs.php");

class Worker{
    /**
     * @router cli work
     */
    public function run(){

        require_once APP_DIR."/vendor/resque/php-resque/bin/resque";

    }
}

$worker = new Worker();
$worker->run();
说明:
require_once(ROOT_PATH."app/jobs/jobs.php");
 处理队列中的业务文件

3.2 在linux 命令窗口 执行 以下面命令,将消息队列常驻内存,这样有消息进来就可以立马消费掉

QUEUE=doTask nohup  php app/jobs/Worker.php &

3.3 jobs.php文件内容,是一个类

public function perform()

    {

        fwrite(STDOUT, 'Start job! -> ');
//        echo json_encode($this->args);
        $args = $this->args;
        if(!empty($args)){
            MyJobs::{$args['type']}($args['data']);
        }
        fwrite(STDOUT, 'Job ended!' . PHP_EOL);

    }

3.4 增加通用文件,doTask方法为我处理任务模块用的 

class MyJobs
{
    public function __construct(){
//        $redis = new RedisConn();
//        $this->redis = $redis->getConn();
//        Resque::setBackend($this->redis->getHost().":".$this->redis->getPort(),$this->redis->getDbNum(),$this->redis->getAuth(),$this->redis);
    }

    //做任务
    public static function doTask($data){
        $TaskM = new TaskModel();
        $TaskM->doTask($data['uid'],$data['sign']);
    }
}
说明:
askModel()是具体的业务逻辑处理

任务模块的业务逻辑包括:

1、判断任务完成状态

2、更新用户奖励

3、写入记录

4、更新任务完成状态

5、写完成的任务缓存

6、发送消息通知给用户

注意点:Resque.php下载下来是有问题的,需要修改,写入内存和常驻内存要熟悉命令。

修改了核心文件需要重启执行命令。

猜你喜欢

转载自blog.csdn.net/sinat_25884075/article/details/129137696