mead-steve/mon-work-go

此包已被弃用且不再维护。作者建议使用mead-steve/mon-work-go包代替。

基于mongo DB的简单工作队列。

v2.0.0 2014-04-06 12:17 UTC

This package is auto-updated.

Last update: 2021-03-29 06:14:17 UTC


README

在mongodb之上构建的简单工作队列。MongoDB中的一个集合用于表示一个工作队列。使用json有效载荷来描述工作,然后由提供的回调函数处理。

master: Build Status develop: Build Status

安装

使用composer安装此库是最简单的方法。在你的项目的composer.json文件中添加

{
    "require": {
        "mead-steve/mon-work-go": "2.0.*"
    }
}

然后运行composer update。

排队工作

描述你工作的数据的混合数组可以排队等待处理。这将很快,这样你就可以像英雄一样响应用户。这将创建一个名为mainQueue的集合在MongoDB中(如果尚未存在)。

$manager = new \MeadSteve\MonWorkGo\Manager($mongoDB);

$manager->getQueue("mainQueue")
    ->clearCompletedWork()      // Do a bit of house keeping
    ->addWork(["jobOne", 34])
    ->addWork([5, 7])
    ->addWork([8])
    ->addWork(["jobFour", "mead"])
    ->addWork(["jobFive", "beer"]);

处理工作

一旦你的数据已经很好地排队,你可以花更多的时间来处理它。说实话,你可能想做的不仅仅是回显它,但这应该能给你一个想法。此脚本将无限期运行,没有阻止你在多个实例上运行以共享负载的东西。

$manager = new \MeadSteve\MonWorkGo\Manager($mongoDB);

$manager->createWorker(
    "mainQueue",
    function ($payload) {
        echo "Hello. I'm working on: " . var_export($payload, true);
        return \MeadSteve\MonWorkGo\Worker::WORK_RESPONSE_SUCCESS;
    }
)->start();

报告工作进度

工作对象还可以提供psr logger。除了向此记录器发送调试消息外,工作函数还通过第二个参数传递记录器,因此可以报告其进度。

$manager = (new \MeadSteve\MonWorkGo\Manager($mongoDB))->setLogger($logger);

$manager->createWorker(
    "mainQueue",
    function ($payload, \Psr\Log\LoggerInterface $log) {
        $log->info("Hello logger");
        $log->info("I should probably do some work");
        return \MeadSteve\MonWorkGo\Worker::WORK_RESPONSE_SUCCESS;
    }
)->start();