robsonalvesbh/semaphoro

此包的最新版本(v1.0.1)没有提供许可信息。

此库可以帮助您使用PHP运行多个进程。

v1.0.1 2019-01-29 00:43 UTC

This package is auto-updated.

Last update: 2024-09-29 05:02:23 UTC


README

Scrutinizer Code Quality Code Coverage Build Status Code Intelligence Status

Semaphoro

此库可以帮助您使用PHP运行多个进程。

Semaphoro库通过避免两个或更多并行运行的工人执行相同的进程,从而对进程进行编排,避免进程重复,并在某些进程失败时仍有再次处理进程的应急措施。

如何使用

设置存储

参数
  • Predis/Client $redisClient - 必需
  • 字符串 $prefix - 可选(默认值:semaphoro)

prefix 是Redis的命名空间。

$redis = new Redis($redisClient, $prefix);

设置处理器

参数
  • StorageInterface $storage - 必需
  • 整数 $rangeLength - 可选(默认值:50)

rangeLength 是范围内的进程数量

$rangeHandler = new RangeHandler($storage, $rangeLength);

RangeHandler旨在与增量数字(如ID)一起工作

获取信号量

参数
  • HandlerInterface $handler - 必需
$semaphoro = new Semaphoro($handler);
方法
getAvailableProcess()

获取下一个可用范围

$semaphoro->getAvailableProcess();
返回
  • ProcessInterface
setUnprocessed()

当发生错误时设置未处理状态

参数
  • ProcessInterface $process - 必需
$semaphoro->setUnprocessed($process);
返回
  • void
remove()

当进程完成后从信号量中删除进程

参数
  • ProcessInterface $process - 必需
$semaphoro->remove($process);
返回
  • void

代码示例

<?php
require_once 'vendor/autoload.php';

use Predis\Client;
use Semaphoro\Handlers\RangeHandler;
use Semaphoro\Semaphoro;
use Semaphoro\Storages\Redis;

$redis = new Redis(new Client([
    'scheme' => 'tcp',
    'host' => 'redis',
    'port' => 6379,
]));
$rangeHandler = new RangeHandler($redis);
$semaphoro = new Semaphoro($rangeHandler);
$process = $semaphoro->getAvailableProcess();

try {
    /**
     * YOUR CODE HERE
     */

    $semaphoro->remove($process);
} catch (Throwable $e) {
    $semaphoro->setUnprocessed($process);
}

致谢