高性能千萬級定時任務管理服務forsun laravel插件使用詳解

Forsun高性能高精度定時服務,輕鬆管理千萬級定時任務。php

定時服務項目地址:https://github.com/snower/forsunnode

laravel插件項目地址: https://github.com/snower/for...laravel

  • 輕鬆支持千萬級定時任務調度。
  • 定時任務觸發推送到Queue,輕鬆支持跨機器和共性能分佈式。
  • 支持任務到期觸發command、Job、Shell、Http和Event。
  • 支持驅動原生Laravel Schedule運行。
  • 支持建立延時任務和定時到期任務,和原生Laravel Schedule保持相同接口,輕鬆使用。

背景

在實際項目中,存在大量須要定時或是延時觸發的任務,好比電商中,延時須要檢查訂單是否支付成功,是否配送成功,定時給用戶推送提醒等等,常規作法是用 crontab 每分鐘掃碼數據看是否到達時間,繁瑣且擴展性伸縮性較差。git

使用 forsun 服務,能夠簡單的針對每個訂單建立一個定時任務,配合異步隊列,能夠輕鬆實現擴展性伸縮性,Apache Thrift 的編程接口也能夠很容易的和 celery、laravel 配合。 github

其餘場景下,好比失敗延時重試,使用 forsun 定時服務也能夠很簡單就能夠實現。編程

安裝

composer require "snower/forsun-laravel"

配置

  • 在 config/app.php 註冊 ServiceProvider 和 Facade
'providers' => [
    // ...
    Snower\LaravelForsun\ServiceProvider::class,
],
'aliases' => [
    // ...
    'Forsun' => Snower\LaravelForsun\Facade::class,
],
  • 建立配置文件
php artisan vendor:publish --provider="Snower\LaravelForsun\ServiceProvider"
  • 修改應用根目錄下的 config/forsun.php 中對應的參數便可。

使用

定義調度

  • Artisan 命令調度。
//不指定name是自動生成
Forsun::plan()->command('emails:send --force')->daily();

//指定name
Forsun::plan('email')->command(EmailsCommand::class, ['--force'])->daily();
  • 隊列任務調度
Forsun::plan()->job(new Heartbeat)->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();

注意:segmentfault

  • 每一個任務只能設置一次調度頻率。
  • 不支持任務輸出、任務鉤子及維護模式。
  • 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(); 每小時運行
->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

驅動原生Laravel Schedule運行

#註冊
php artisan forsun:schedule:register

#取消註冊
php artisan forsun:schedule:unregister

原文連接: https://blog.snower.me/2018/0...異步

相關文章
相關標籤/搜索