<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          swoole-jobs基于 swoole 的 job 調(diào)度組件

          聯(lián)合創(chuàng)作 · 2023-09-23 08:00

          swoole-jobs

          • 基于swoole類似gearman的分布式任務(wù)處理系統(tǒng)
          • 高性能/動態(tài)多woker進程消費隊列,加速后端耗時服
          • 無需像gearman一個worker配置一條crontab,swoole-jobs負(fù)責(zé)管理所有worker狀態(tài)
          • 獨立的swoole http api 入隊列,api不依賴php-fpm

          1. 說明

          • web中較慢的邏輯,比如統(tǒng)計/email/短信/圖片處理等;
          • 支持redis/rabbitmq/zeromq等任何一種做隊列消息存儲;
          • 比yii/laravel等框架自帶隊列更穩(wěn)定更快[消費進程可動態(tài)變化]
          • 自帶yii2/phalcon/yaf/ThinkPHP5集成示例,其他框架可參考src/Action代碼,
          • yii2完整示例
          • ThinkPHP5完整示例

          2. 架構(gòu)圖

          架構(gòu)圖

          3. 特性

          • 基于swoole的job調(diào)度組件;類似gearman的分布式任務(wù)處理系統(tǒng);
          • redis/rabbitmq/zeromq等任何一種做隊列消息存儲(目前只實現(xiàn)redis/rabbitmq);
          • 利用swoole的process實現(xiàn)多進程管理,進程個數(shù)可配置,worker進程退出后會自動拉起;
          • 子進程循環(huán)次數(shù)可配置,防止業(yè)務(wù)代碼內(nèi)存泄漏;默認(rèn)stop命令會等待子進程平滑退出;
          • 支持topic特性,不同的job綁定不同的topic;
          • 每個topic啟動對應(yīng)數(shù)量的子進程,杜絕不同topic之間相互影響;
          • 根據(jù)隊列積壓情況,子進程動態(tài)啟動進程數(shù),最大子進程個數(shù)可配置;
          • 支持composer,可以跟任意框架集成;
          • 日志文件自動切割,默認(rèn)最大100M,最多5個日志文件,防止日志刷滿磁盤;
          • 出現(xiàn)積壓情況,支持釘釘機器人等消息提醒;

          4. 安裝

          4.1 composer

          git clone https://github.com/kcloze/swoole-jobs.git
          cd swoole-jobs
          
          
          composer install
          

          4.2 docker

          • git clone https://github.com/kcloze/swoole-jobs.git
          • cd swoole-jobs and composer install
          • 根據(jù)根目錄Dockerfile構(gòu)建鏡像
          • docker build -t swoole-jobs .
          • docker run -it -v ~/data/code/php:/data swoole-jobs /bin/bash
          • 進入容器之后,進入項目目錄:
            • php ./bin/swoole-jobs.php start

          5. 運行

          5.1 示范

          1.修改配置config.php
          
          2.啟動服務(wù)
          php ./bin/swoole-jobs.php start >> log/system.log 2>&1
          
          3.往隊列推送任務(wù)
          php ./tests/testJobsSerialzie.php
          
          4.啟動api服務(wù)
          php ./bin/swoole-jobs.php http start
          
          5.停止api服務(wù)
          php ./bin/swoole-jobs.php http stop
          
          
          
          

          5.2 啟動參數(shù)說明

          NAME
                - manage swoole-jobs
          
          SYNOPSIS
                -php ./bin/swoole-jobs.php app [options]
                  -Manage swoole-jobs daemons.
          
          WORKFLOWS
          
                -help [command]
                  -Show this help, or workflow help for command.
          
                -restart
                  -Stop, then start swoole-jobs master and workers.
          
                -start
                  -Start swoole-jobs master and workers.
          
                -stop
                  -Wait all running workers smooth exit, please check swoole-jobs status for a while.
          
                -exit
                  -Kill all running workers and master PIDs.
          
                -http start 
                  -Start swoole http server for apis.
                
                -http stop
                  -Stop swoole http server for api.
          
          
          

          5.3 API parameter description

          5.3.1 api url

          5.3.2 api params:

          Params Type Demo
          jobData json {"topic":"MyJob","jobClass":"\Kcloze\Jobs\Jobs\MyJob","jobMethod":"test2","jobParams":["kcloze",1532857253,"oop"],"jobExtras":[],"serializeFunc":"php"}

          6. 服務(wù)管理

          線上啟動和關(guān)閉服務(wù),有兩種方式:

          6.1 啟動腳本加入到crontab定時任務(wù),每分鐘執(zhí)行一次(swoole-jobs會自動檢查是否在執(zhí)行,避免重復(fù)啟動)

          * * * * * /usr/local/bin/php /***/swoole-jobs.php start >> /***/log/system.log 2>&1
          
          

          6.2 使用systemd管理(故障重啟、開機自啟動)

          更多systemd介紹

          1. 根據(jù)自己項目路徑,修改 docs/systemd/swoole-jobs.service
          2. sudo cp -f systemd/swoole-jobs.service /etc/systemd/system/
          3. sudo systemctl --system daemon-reload
          4. 服務(wù)管理
          #啟動服務(wù)
          sudo systemctl start swoole-jobs.service
          #reload服務(wù)
          sudo systemctl reload swoole-jobs.service
          #關(guān)閉服務(wù)
          sudo systemctl stop swoole-jobs.service
          
          

          7.系統(tǒng)截圖

          htop截圖

          status

          釘釘提醒

          8. change log

          9. 注意事項

          • 如果嵌入自己的框架,可參考src/Action代碼,繼承抽象類Kcloze\Jobs\Action\BaseAction
          • 各種框架服務(wù)啟動會稍有不同,具體參考:example/bin項目的代碼
          • swoole 4 以上版本需要設(shè)置php.ini,關(guān)閉協(xié)程

          10. 壓測

          • 瓶頸: redis/rabbitmq隊列存儲本身和job執(zhí)行速度

          11. 感謝

          12. 聯(lián)系

          qq群:141059677

          13. 捐贈

          • 如果這個項目真的幫助到你,麻煩點擊右上角給個star
          瀏覽 38
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  av网在线观看 | 北条麻妃在线视频 | 午夜激情福利视频 | 伊人高清无码 | 三级无码在线观看视频 |