实用!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 协议》,转载必须注明作者和本文链接
推荐文章: