<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Job計劃任務功能開發 計劃任務包括兩種應用模式: 精確延時任務 、輪詢計劃任務 ## **精確延時任務** 精確延時任務一般是在某個具體的時間點,觸發任務。比如有這樣的需求,拼團活動創建,30分鐘內,要不成團,要不關閉。整點秒殺活動在13:35:00這個時間正點開始。這樣的需求,使用精確延時任務可以實現相關功能。 ***** 插件開發中精確延時任務的開發步驟 1. 精確延時任務的使用簡單,您可以在任意需要調用精確延時的地方啟動任務計劃,調用方法如下 ``` OrderClose::dispatch([, secs:20) ; ``` 通過上面的方法調用,就啟動了一個20秒后,會自動執行回調的精確延時任務 OrderClose是繼承自BaseJob的一個子類,BaseJob是繼承自Dispatch的一個子類,dispatch是一個靜態方法,用于調用精確延時任務的方法。 dispatch的第一個參數是 action, 表示一個方法名,默認不填,就是 doJob方法回調,也可以傳入自己定義的回調函數方法名稱 ,第二個參數secs 表示延時的秒數,如果是更長時間,某年某月某日后的某個時間點,自己計算賦值 ``` class Dispatch { /** * 加入隊列 * @param $action * @param array $data * @param string|null $queue_name * @return mixed */ public static function dispatch($action, array $data = [], int $secs = 0, string $queue_name = null, bool $is_async = true) { $class = get_called_class();//調用主調類 if ($is_async) { $queue = Queue::instance()->job($class)->secs($secs); if (is_array($action)) { $queue->data(...$action); } else if (is_string($action)) { $queue->method($action)->data(...$data); } if ($queue_name) { $queue->setQueueName($queue_name); } return $queue->push(); } else { $class_name = '\\' . $class; $res = new $class_name(); if (is_array($action)) { return $res->doJob(...$action); } else { return $res->$action(...$data); } } } } ``` 2. 計劃任務的精確時間延時點到達后,系統自動回調,然后在OrderClose類中相應的doJob函數中,編寫具體的業務邏輯實現代碼 ``` /* * 隊列異步調用定時任務 */ class OrderClose extends BaseJob { public function doJob() { Log::write('訂單關閉計劃任務'.date('Y-m-d h:i:s')); return true; } } ``` ![](https://img.kancloud.cn/14/d6/14d60700907f9ae5dbba5c1d1b1f94b7_1407x780.png) <br> <br> <br> ## **輪詢計劃任務** 輪詢計劃任務是按照固定的時間間隔觸發,在每個觸發的時間間隔,開發者在對應的回調函數(異步函數)中,對相關的業務邏輯進行處理,通常時間間隔可以設置為1分鐘。例如有這樣的應用場景,檢測站點是否到期,程序處理自動關閉操作。又如訂單創建后,30分鐘內沒有人付款,訂單自動關閉。一般這樣的業務邏輯,對時間的要求不是非常精準的。就可以在輪詢中進行處理。 ***** 插件開發中輪訓計劃任務的開發步驟 1. 在插件的目錄`addon\hello_world\app\dict\schedule.php` 文件中, 編寫輪訓計劃任務的相關數據描述定義 ``` return [ [ 'key' => 'order_close', 'name' => '未支付訂單自動關閉', 'time' => [ 'type' => 'min', ], 'class' => '', 'function' => '' ] ]; ``` `'key' => 'order_close'` order_close 對應 OrderClose兩個單詞,目前在niucloud-admin框架內部系統加載的時候,如果沒有填寫class 參數,會自動尋找 `app\job\schedule`目錄下對應的文件名來裝載類 ` 'name' => '未支付訂單自動關閉'` 計劃任務的名稱 `'time' => [ 'type' => 'min', ]` 計劃任務的執行時間,一般寫min 表示每分鐘間隔會調用 class 下的 function 函數一次 ` 'class' => ''` 這個表示任務時間間隔時,回調的處理類,要帶命名空間,對于插件開發,這里必須填寫完整的類路徑 如 addon\hello_world\app\job\schedule\OrderClose ( 對于插件中開發計劃任務,目前框架沒有優化處理自動找尋類, ),注意!這里的schedule目錄不是固定的,可以定義任意路徑 ` 'function' => '' ` 計劃任務回調執行的函數,默認為空,則函數為 doJob 。 開發人員可以定義人員的函數名稱 ![](https://img.kancloud.cn/47/20/47209c434e71d3abe4673d3ce679370e_1258x800.png) <br> 2. 計劃任務時間觸發,自動回調,在相應的函數中,編寫具體的業務邏輯實現代碼 ``` /* * 隊列異步調用定時任務 */ class OrderClose extends BaseJob { public function doJob() { Log::write('訂單關閉計劃任務'.date('Y-m-d h:i:s')); return true; } } ``` ![](https://img.kancloud.cn/14/d6/14d60700907f9ae5dbba5c1d1b1f94b7_1407x780.png) <br>
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看