实用!Swoole + Redis 队列 订单处理系统

直接上主逻辑

配置

$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 4,
    'task_worker_num' => 8,
));

启动

$serv->on('workerStart', function($serv, $worker_id) {
    //处理订单
    $redis = new redis;
    $redis->connect('127.0.0.1', 6379);
    $serv->redis = $redis;
    if($worker_id == 0){
        swoole_timer_tick(500, function ($timer_id) use($serv,$worker_id) {
             $serv->task('queue');
         });
    }
});

$serv->start();

Task异步处理任务

简单逻辑示例,具体根据实际业务情况处理


$serv->on('Task', function (swoole_server $serv, $task_id, $from_id, $data) {
    $redis = $serv->redis;
    $orders = $redis->lrange('queue',0,-1);
    foreach ($orders as $i => $order){
        $info = json_decode($order, true);
        if(empty($info)){
            break;
        }
        *** ...订单处理逻辑... ***
        //处理完成,删除
        $redis->lTrim('queue', 1, -1);
   }
    $serv->finish($data);
});

其他


$serv->on('receive', function (swoole_server $serv, $fd, $reactor_id, $data) {
});
$serv->on('Finish', function (swoole_server $serv, $task_id, $data) {
});
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!