<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ##3.6.1 擴展類庫:新型計劃任務 此擴展類型用于后臺計劃任務的調度,主要功能點有: + 1、提供了Redis/文件/數據庫三種MQ隊列 + 2、提供了本地和遠程兩種調度方式 + 3、以接口的形式實現計劃任務 + 4、提供統一的crontab調度 更多內容,請查看:[[1.31] 新型計劃任務:以接口形式實現的計劃任務](/wikis/%5B1.31%5D-%E6%96%B0%E5%9E%8B%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%EF%BC%9A%E4%BB%A5%E6%8E%A5%E5%8F%A3%E5%BD%A2%E5%BC%8F%E5%AE%9E%E7%8E%B0%E7%9A%84%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1.html) ##3.6.2 安裝 ###(1)內置擴展包 此安裝略,已內置于PhalApi框架中。 > 溫馨提示: > PhalApi需要PhaApi 1.2.0及以上版本。 ###(2)配置 我們需要在 **./Config/app.php** 配置文件中追加以下配置: ```javascript /** * 計劃任務配置 */ 'Task' => array( //MQ隊列設置,可根據使用需要配置 'mq' => array( 'file' => array( 'path' => API_ROOT . '/Runtime', 'prefix' => 'phalapi_task', ), 'redis' => array( 'host' => '127.0.0.1', 'port' => 6379, 'prefix' => 'phalapi_task', 'auth' => '', ), ), //Runner設置,如果使用遠程調度方式,請加此配置 'runner' => array( 'remote' => array( 'host' => 'http://library.phalapi.net/demo/', 'timeoutMS' => 3000, ), ), ), ``` 以上內容看情況需要而配置。 ###(3)數據庫表 當需要使用數據庫MQ列隊時,還需要將以下數據庫的配置追加到 **./Config/dbs.php** 中: ```javascript 'tables' => array( //請將以下配置拷貝到 ./Config/dbs.php 文件對應的位置中,未配置的表將使用默認路由 //10張表,可根據需要,自行調整表前綴、主鍵名和路由 'task_mq' => array( 'prefix' => 'phalapi_', 'key' => 'id', 'map' => array( array('db' => 'db_demo'), array('start' => 0, 'end' => 9, 'db' => 'db_demo'), ), ), ) ``` 同時,需要將 ./Data/phalapi_task_mq.sql 文件的SQL建表語句導入到你的數據庫。你也可以將利用腳本來生成。 ##3.6.3 入門使用 ###(1)加入MQ隊列 首先,我們需要在入口文件進行對Task的初始化: ```javascript DI()->loader->addDirs('Library'); $mq = new Task_MQ_Redis(); //可以選擇你需要的MQ DI()->taskLite = new Task_Lite($mq); ``` 然后,這樣即可添加一個新的計劃任務到MQ: ```javascript DI()->taskLite->add('Task.DoSth', array('id' => 1)); ``` ###(2)計劃任務的啟動 在啟動計劃任務前,我們需要編寫簡單的腳本,一如這樣: ```javascript #!/usr/bin/env php <?php require_once '/path/to/Public/init.php'; DI()->loader->addDirs('Demo'); if ($argc < 2) { echo "Usage: $argv[0] <service> \n\n"; exit(1); } $service = trim($argv[1]); $mq = new Task_MQ_Redis(); $runner = new Task_Runner_Local($mq); $rs = $runnter->go($service); echo "\nDone:\n", json_encode($rs), "\n\n"; ``` 然后使用nohup或者crontab啟動即可。 ###(3)續篇 - 統一的crontab計劃任務 上面第二點的啟動是通用、自定義、也是自由的啟動方式。 這里再提供一種具體的、統一的啟動方式,即使用crontab的方式。 首先,創建以下表(或見./Library/Task/Data/phalapi_task_progress.sql文件): ```javascript CREATE TABLE `phalapi_task_progress` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `title` varchar(200) DEFAULT '' COMMENT '任務標題', `trigger_class` varchar(50) DEFAULT '' COMMENT '觸發器類名', `fire_params` varchar(255) DEFAULT '' COMMENT '需要傳遞的參數,格式自定', `interval_time` int(11) DEFAULT '0' COMMENT '執行間隔,單位:秒', `enable` tinyint(1) DEFAULT '1' COMMENT '是否啟動,1啟動,0禁止', `result` varchar(255) DEFAULT '' COMMENT '運行的結果,以json格式保存', `state` tinyint(1) DEFAULT '0' COMMENT '進程狀態,0空閑,1運行中,-1異常退出', `last_fire_time` int(11) DEFAULT '0' COMMENT '上一次運行時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 接著,添加crontab計劃任務: ```javascript $ crontab -e */1 * * * * /usr/bin/php /path/to/PhalApi/Library/Task/crontab.php >> /tmp/phalapi_task_crontab.log 2>&1 ``` 然后,實現你的計劃任務服務接口: ```javascript <?php class Api_Task_Demo extends PhalApi_Api { public function doSth() { // ... } } ``` 最后,配置計劃任務: ```javascript INSERT INTO `phalapi_task_progress`(title, trigger_class, fire_params, interval_time) VALUES('你的任務名字', 'Task_Progress_Trigger_Common', 'Task_Demo.DoSth&Task_MQ_File&Task_Runner_Local', '300'); ``` 注意,在配置時,需要指明MQ和Runner的類型。 ##3.6.4 更多說明 ###(1)依賴的資源服務 名稱|類|沒有時是否自動創建 ---|---|--- curl|PhalApi_CUrl|是 request|PhalApi_Request|強制每次初始化,用于本地調度時 response|PhalApi_Response_Json|強制每次初始化,用于本地調度時 ###(2)MQ ####Redis MQ隊列 Redis MQ隊列需要的配置為: ```javascript 'Task' => array( //MQ隊列設置,可根據使用需要配置 'mq' => array( 'redis' => array( 'host' => '127.0.0.1', 'port' => 6379, 'prefix' => 'phalapi_task', 'auth' => '', ), ), ), ``` 其中: 選項|是否必須|默認值|說明 ---|---|---|--- host|否|127.0.0.1|redis的HOST port|否|6379|redis的端口 prefix|否|phalapi_task|key的前綴 auth|否||redis的驗證,不為空時執行驗證 可以這樣創建Redis MQ隊列: ```javascript //方法一:使用app.Task.mq.redis配置 $mq = new Task_MQ_Redis(); //方法二:外部依賴注入 $redisCache = new PhalApi_Cache_Redis(array('host' => '127.0.0.1')); $mq = new Task_MQ_Redis($redisCache); ``` ####文件MQ隊列 文件MQ需要的配置為: ```javascript 'Task' => array( //MQ隊列設置,可根據使用需要配置 'mq' => array( 'file' => array( 'path' => API_ROOT . '/Runtime', 'prefix' => 'phalapi_task', ), ), ), ``` 其中: 選項|是否必須|默認值|說明 ---|---|---|--- path|否|API_ROOT/Runtime|緩存的文件目錄 prefix|否|phalapi_task|key的前綴 可以這樣創建文件MQ隊列: ```javascript //方法一:使用app.Task.mq.file配置 $mq = new Task_MQ_File(); //方法二:外部依賴注入 $fileCache = new PhalApi_Cache_File(array('path' => '/tmp/cache')); $mq = new Task_MQ_File($fileCache); ``` ####數據庫MQ隊列 數據庫MQ隊列需要的配置為: ```javascript 'tables' => array( //請將以下配置拷貝到 ./Config/dbs.php 文件對應的位置中,未配置的表將使用默認路由 //10張表,可根據需要,自行調整表前綴、主鍵名和路由 'task_mq' => array( 'prefix' => 'phalapi_', 'key' => 'id', 'map' => array( array('db' => 'db_demo'), array('start' => 0, 'end' => 9, 'db' => 'db_demo'), ), ), ) ``` 可以這樣創建數據庫MQ隊列: ```javascript $mq = new Task_MQ_DB(); ``` ####數組MQ隊列 數組MQ隊列是將MQ存放在PHP的數組里面,用于單元測試或者是一次性、臨時性的計劃任務調度。 可以這樣創建數據庫MQ隊列: ```javascript $mq = new Task_MQ_Array(); ``` ###(3)本地和遠程調度 ####本地調度的創建 ```javascript $runner = new Task_Runner_Local($mq, 10); //10表示每批次彈出10個進行處理 ``` 需要注意的是,每次執行一個計劃任務,都會重新初始化必要的DI資源服務。 且此調度方式不能用于接口請求時的同步調用。 ####遠程調度的創建 首先需要以下配置: ```javascript /** * 計劃任務配置 */ 'Task' => array( //Runner設置,如果使用遠程調度方式,請加此配置 'runner' => array( 'remote' => array( 'host' => 'http://library.phalapi.net/demo/', 'timeoutMS' => 3000, ), ), ), ``` 其中: 選項|是否必須|默認值|說明 ---|---|---|--- host|是||接口域名鏈接 timeoutMS|否|3000|接口超時時間,單位毫秒 可以這樣創建: ```javascript //使用默認的連接器 - HTTP + POST的方式 $runner = new Task_Runner_Remote($mq, 10); //10表示每批次彈出10個進行處理 //或者,指定連接器 $connector = new Task_Runner_Remote_Connector_Impl(); $runner = new Task_Runner_Remote($mq, 10, $connector); //10表示每批次彈出10個進行處理 ```
                  <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>

                              哎呀哎呀视频在线观看