splash / tasking-bundle
Symfony应用的高级任务包(100% PHP)
1.2.0
2022-11-29 18:58 UTC
Requires
- php: ^7.4|^8.0
- ext-curl: *
- ext-pcntl: *
- ext-posix: *
- doctrine/doctrine-bundle: ^1.6|^2.0
- sonata-project/admin-bundle: >3.0
- sonata-project/doctrine-orm-admin-bundle: *
- symfony/monolog-bundle: >=2.1
- symfony/symfony: ~4.0
Requires (Dev)
- badpixxel/paddock-core: dev-main
- badpixxel/php-sdk: ~1.0
- sentry/sentry-symfony: ^3.0||^4.0
- symfony/phpunit-bridge: ^3.0
This package is auto-updated.
Last update: 2024-09-19 09:10:18 UTC
README
Symfony的高级任务管理器。100% PHP,具有高并发管理。
主要特性
- 后台任务:创建由工作者(Symfony命令)运行的作业
- 100% PHP,适用于任何PHP 7.2+的Linux服务器
- 高并发管理:使用作业令牌确保任务由单个进程执行。
- 多服务器兼容:令牌存储在中央SQL表中。
- 优化内存占用:创建专用的Symfony环境以减少内存影响。
安装
步骤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许可证下获得。