forsun高性能高精度定时服务,轻松管理千万级定时任务。定时服务项目地址:https://github.com/snower/forsunlaravel插件项目地址:https://github.com/snower/for...轻松支持千万级定时任务调度。定时任务被触发并推送到Queue,轻松支持跨机器和通用的性能分发。支持任务过期触发command、Job、Shell、Http、Event。支持驱动原生LaravelSchedule运行。支持创建延迟任务和定时到期任务,保持与原生LaravelSchedule相同的界面,简单易用。背景在实际项目中,有大量的任务需要定时或延时触发。比如在电子商务中,延误需要检查订单是否支付成功,是否发货成功,并定时向用户发送提醒。常规的方法是每次使用crontab分钟扫码数据,看到达时间是否繁琐,扩展性差。使用forsun服务,你可以简单的为每个订单创建一个定时任务。使用异步队列,您可以轻松实现可扩展性。ApacheThrift的编程接口也可以很方便地与celery和laravel配合使用。其他场景,比如失败延迟重试,使用forsun定时服务也可以轻松实现。安装并启动forsun服务,详见https://segmentfault.com/a/11...。Composer为sun-laravel安装。composerrequire"snower/forsun-laravel"配置在config/app.php中注册ServiceProvider和Facade'providers'=>[//...Snower\LaravelForsun\ServiceProvider::class,],'aliases'=>[//...'Forsun'=>Snower\LaravelForsun\Facade::class,],创建配置文件phpartisanvendor:publish--provider="Snower\LaravelForsun\ServiceProvider"修改根目录下的config/forsun.php应用程序对应的参数。使用定义的时间表Artisan命令时间表。//不指定name自动生成Forsun::plan()->command('emails:send--force')->daily();//指定nameForsun::plan('email')->command(EmailsCommand::class,['--force'])->daily();队列任务调度Forsun::plan()->job(newHeartbeat)->everyFiveMinutes();Shell命令调度Forsun::plan()->exec('node/home/forge/script.js')->daily();Event事件调度Forsun::plan()->fire('testevent',[])->everyMinute();Http事件调度Forsun::plan()->http('http://www.baidu.com')->everyMinute();注意:每个任务只能设置一次调度频率。不支持任务输出、任务挂钩和维护模式。Forsun::plan在没有指定任务名称时自动生成。每个任务名称必须是唯一的,相同任务名称的重复定义将被自动覆盖。删除计划$plan=Forsun::plan()->command('emails:send--force')->daily();$plan->remove();$plan=Forsun::plan()->command('emails:send--force')->daily();$plan_name=$plan->getName();Forsun::remove($plan_name);调度频率设置方法说明->hourly();HourlyRun->每小时(17);在每小时第17分钟执行一个任务->daily();每天午夜执行一个任务->dailyAt('13:00');每天13:00执行一个任务->每月();每月执行一个任务->monthlyOn(4,'15:00');每月第四天15:00执行一个任务->everyMinute();每分钟执行一个任务->everyFiveMinutes();每五分钟执行一个任务->everyTenMinutes();每十分钟执行一个任务->everyFifteenMinutes();每十五分钟执行一个任务->everyThirtyMinutes();每半小时执行一个任务->at(strtoetime("2018-03-0512:32:12"));在指定时间运行一次2018-03-0512:32:12->interval(10);从当前时间开始每10秒运行一次->later(5);从当前时间开始计算,5秒运行一次->delay(30);从当前时间开始计算,30秒后运行一次。复杂的时序控制建议生成多个定时任务或者在处理器上运行中间重新启动定时任务计划更容易,性能更高。调度器应该尝试使用Event或Job通过QueueWork以更高的性能运行。驱动原生LaravelSchedule运行#registerphpartisanforsun:schedule:register#unregisterphpartisanforsun:schedule:unregister
