easyswoole如何實(shí)現(xiàn)Redis隊(duì)列消費(fèi)/自定義進(jìn)程

定義消費(fèi)進(jìn)程邏輯

<?php
namespace App\Process;
use EasySwoole\Component\Process\AbstractProcess;
use Swoole\Process;
class Consumer extends AbstractProcess
{
    private $isRun = false;
    public function run($arg)
    {
        /*
         * 舉例,消費(fèi)redis中的隊(duì)列數(shù)據(jù)
         * 定時500ms檢測有沒有任務(wù),有的話就while死循環(huán)執(zhí)行
         */
        $this->addTick(500,function (){
            if(!$this->isRun){
                $this->isRun = true;
                $redis = new \redis();//此處為偽代碼,請自己建立連接或者維護(hù)redis連接
                while (true){
                    try{
                        $task = $redis->lPop('task_list');
                        if($task){
                            // do you task
                        }else{
                            break;
                        }
                    }catch (\Throwable $throwable){
                        break;
                    }
                }
                $this->isRun = false;
            }
            var_dump($this->getProcessName().' task run check');
        });
    }
    public function onShutDown() { }
    public function onReceive(string $str, ...$args) { }
}

注冊消費(fèi)進(jìn)程
在EasySwoole的全局事件中,注冊消費(fèi)進(jìn)程。

<?php
use App\Process\Consumer ;
use EasySwoole\Component\Process\Manager;
use EasySwoole\EasySwoole\Swoole\EventRegister;
public static function mainServerCreate(EventRegister $register)
{
    $allNum = 3; // 注冊三個消費(fèi)進(jìn)程
    for ($i = 0 ;$i < $allNum;$i++){
        $processConfig= new \EasySwoole\Component\Process\Config();
        $processConfig->setProcessName('ConsumerProcess'.$i);//設(shè)置進(jìn)程名稱
        Manager::getInstance()->addProcess(new Consumer ($processConfig));
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容