PHP队列简单实现

- 1 min

任务执行时,为了避免出现资源不足问题,需要有一个队列的容器来实现业务流的数据操作,避免出现数据库死锁却返回正常或者因为临时并发导致的系统崩溃。

以下代码在整体上借鉴了命令模式的思想。

<?php

class Pipeline {

    protected $queue = [];

    public function addItem(Command $command) {
        array_push($this->queue, $command);
    }

    public function removeItem(Command $command) {
        $key = array_search($command);
        if (!$key) {
            return false;
        }
        unset($command[$key]);
    }

    public function run() {
        for ($i = 0; $i < count($this->queue); $i++) {
            $item = array_shift($this->queue);
            $item->execute();
        }
    }

}

每个任务仍需要有相应的辅助功能

<?php

interface Command {

    public function execute();

    protected function store();

    protected function load();

    public function undo();

}

具体的任务命令

<?php

class ExampleCommand implements Command {

    protected const ON = 1;
    protected const OFF = 0;
    protected $last = EASE;

    public function execute() {
        // do something
    }

    protected function store() {
        // cache 记录所有的操作
    }

    protected function load() {
        // 任务中断时,任务恢复
        // 加载已完成的部分
    }

    public function undo() {
        // 回滚到上一版本数据
    }

}
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora