Forsun高性能高精度定時服務,輕鬆管理千萬級定時任務。php
定時服務項目地址:https://github.com/snower/forsunnode
laravel插件項目地址: https://github.com/snower/for...laravel
在實際項目中,存在大量須要定時或是延時觸發的任務,好比電商中,延時須要檢查訂單是否支付成功,是否配送成功,定時給用戶推送提醒等等,常規作法是用 crontab 每分鐘掃碼數據看是否到達時間,繁瑣且擴展性伸縮性較差。git
使用 forsun 服務,能夠簡單的針對每個訂單建立一個定時任務,配合異步隊列,能夠輕鬆實現擴展性伸縮性,Apache Thrift 的編程接口也能夠很容易的和 celery、laravel 配合。 github
其餘場景下,好比失敗延時重試,使用 forsun 定時服務也能夠很簡單就能夠實現。編程
composer require "snower/forsun-laravel"
'providers' => [ // ... Snower\LaravelForsun\ServiceProvider::class, ], 'aliases' => [ // ... 'Forsun' => Snower\LaravelForsun\Facade::class, ],
php artisan vendor:publish --provider="Snower\LaravelForsun\ServiceProvider"
//不指定name是自動生成 Forsun::plan()->command('emails:send --force')->daily(); //指定name Forsun::plan('email')->command(EmailsCommand::class, ['--force'])->daily();
Forsun::plan()->job(new Heartbeat)->everyFiveMinutes();
Forsun::plan()->exec('node /home/forge/script.js')->daily();
Forsun::plan()->fire('testevent', [])->everyMinute();
Forsun::plan()->http('http://www.baidu.com')->everyMinute();
注意:segmentfault
$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(); | 每小時運行 |
->hourlyAt(17); | 每小時的第 17 分鐘執行一次任務 |
->daily(); | 天天午夜執行一次任務 |
->dailyAt('13:00'); | 天天的 13:00 執行一次任務 |
->monthly(); | 每個月執行一次任務 |
->monthlyOn(4, '15:00'); | 在每一個月的第四天的 15:00 執行一次任務 |
->everyMinute(); | 每分鐘執行一次任務 |
->everyFiveMinutes(); | 每五分鐘執行一次任務 |
->everyTenMinutes(); | 每十分鐘執行一次任務 |
->everyFifteenMinutes(); | 每十五分鐘執行一次任務 |
->everyThirtyMinutes(); | 每半小時執行一次任務 |
->at(strtoetime("2018-03-05 12:32:12")); | 在指定時間2018-03-05 12:32:12運行一次 |
->interval(10); | 從當前時間開始計算每10秒運行一次 |
->later(5); | 從當前時間開始計算稍後5秒運行一次 |
->delay(30); | 從當前時間開始計算稍後30秒運行一次 |
須要複雜定時控制建議生成多個定時任務或是在處理器中再次發起定時任務計劃更簡便同時也性能更高。app
調度器應該儘量使用Event或是Job經過Queue Work能夠更高性能運行。composer
#註冊 php artisan forsun:schedule:register #取消註冊 php artisan forsun:schedule:unregister
原文連接: https://blog.snower.me/2018/0...異步