splash/tasking-bundle

Symfony应用的高级任务包(100% PHP)

安装: 1,325

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 4

分支: 0

开放性问题: 3

类型:symfony-bundle

1.2.0 2022-11-29 18:58 UTC

README

Symfony的高级任务管理器。100% PHP,具有高并发管理。

主要特性

  • 后台任务:创建由工作者(Symfony命令)运行的作业
  • 100% PHP,适用于任何PHP 7.2+的Linux服务器
  • 高并发管理:使用作业令牌确保任务由单个进程执行。
  • 多服务器兼容:令牌存储在中央SQL表中。
  • 优化内存占用:创建专用的Symfony环境以减少内存影响。

Total Downloads Latest Stable Version

安装

步骤1 - 需求和安装包

第一步是告诉composer下载Tasking-Bundle,这可以通过在命令提示符中键入以下内容来实现

composer require splash/tasking-bundle

步骤2 - 在您的内核中启用包

包必须添加到您的AppKernel

**在Symfony Flex中通常不需要此步骤。

// app/AppKernel.php

public function registerBundles()
{
    return array(
        // ...
        new Splash\Tasking\SplashTaskingBundle(),
        // ...
    );
}

创建您的第一个作业

后台作业必须扩展 Splash\Tasking\Model\AbstractJob

use Splash\Tasking\Model\AbstractJob;

class MyJob extends AbstractJob
{
    /** @return bool */
    public function execute() : bool
    {
        // Execute your background operations
        // ...
        return true;
    }
}

作业令牌可以定义多种方式

use Splash\Tasking\Model\AbstractJob;

class MyJob extends AbstractJob
{
    /** You can set it directly by overriding this constant */
    protected $token = "";

    /**
     * Or by writing an array of parameters to setToken()
     * @param array $parameters 
     * @return self
     */
    public function setup(array $parameters): self
    {
        //====================================================================//
        // Setup Job Token
        $this->setToken($parameters);

        return $this;
    }
}

可用的作业类型

有一些预定义的抽象作业类型,用于不同类型的任务

  • Splash\Tasking\Model\AbstractJob:单个简单任务,由作业类执行一次。
  • Splash\Tasking\Model\AbstractServiceJob:使用给定的参数执行Symfony服务操作
  • Splash\Tasking\Model\AbstractStaticJob:简单任务,每XX分钟执行并重复。
  • Splash\Tasking\Model\AbstractBatch:逐步执行单个作业内的多个任务。

Symfony命令

该包包含管理命令,可以从命令行指导工作者。

tasking:check       Tasking Service : Check Supervisor Process is Running on Current Machines
tasking:start       Tasking Service : Start All Supervisors & Workers Process on All Machines
tasking:status      Tasking Service : Check Status of Tasking Services
tasking:stop        Tasking Service : Stop All Supervisors & Workers Process on All Machines
tasking:supervisor  Run a Supervisor Worker Process 
tasking:worker      Run a Tasking Worker Process 

注意:每次向队列添加新任务时,都会激活并检查任务处理程序和监视器

配置参考

包配置存储在 splash_tasking

splash_tasking:
    entity_manager: default     // Name of Doctrine Entity Manager to use for Tasks & Token Storage
    environement: prod          // Symfony Environnement to use for workers
    refresh_delay: 3            // Delay for workers status refresh
    watchdog_delay: 30          // Watchdog delay for tasks execution
    multiserver: false          // Enable multiserver mode
    multiserver_path: ''        // Url for remote servers checks 
    server:     
        force_crontab: false    // Use crontab to ensure supervisor is running (Useless if you uses 3+ workers)
        php_version: php        // Bash comamnd for php
    supervisor:
        max_age: 3600           // Time to live of supervisor process, if reached, process will die
        refresh_delay: 500      // Delay between two worker refresh  
        max_workers: 3          // Number of worker to use
        max_memory: 100         // Max. Memory, if reached, process will die
    workers:
        max_tasks: 100          // Max. number of jobs to execute, if reached, process will die
        max_age: 120            // Time to live of a worker process, if reached, process will die
        max_memory: 200         // Max. Memory, if reached, process will die
    tasks:
        max_age: 180            // Time to live of a finished task in database
        try_count: 5            // Number of failed attemps for a task
        try_delay: 120          // Delay before retry of a failed task
    static:                     // Key => Class values for Static Jobs
        myStaticJob: AppBundle\Jobs\MyStaticJob          

Docker开发环境

提供了一个Docker Compose文件,用于运行开发服务器。您可以在命令提示符中键入以下内容来启动它

docker-compose up -d

测试和代码质量

此包使用Phpunit进行功能测试。

docker-compose exec app php vendor/bin/phpunit 

此包使用Grumphp进行所有代码质量检查(PHPMD、PhpCsFixer、PhpStan等)。

docker-compose exec app php vendor/bin/grumphp run 

许可证

此包可在MIT许可证下获得。