rnd-cosoft / queue-doctrine
集成Doctrine作为队列系统的Laminas框架模块
Requires
- php: ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
- doctrine/annotations: ^1.8
- doctrine/dbal: ^3.1.2
- laminas/laminas-config: ^3.7
- laminas/laminas-eventmanager: ^3.4
- laminas/laminas-router: ^3.5
- slm/queue: ^3.1
Requires (Dev)
- ext-sqlite3: *
- doctrine/doctrine-orm-module: ^4.1 || ^5.0 || ^6.0
- doctrine/orm: ^2.11.1
- laminas/laminas-i18n: ^2.12
- laminas/laminas-log: ^2.15
- laminas/laminas-modulemanager: ^2.11
- laminas/laminas-mvc: ^3.3
- laminas/laminas-serializer: ^2.11
- laminas/laminas-view: ^2.13
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.6.2
Suggests
- doctrine/doctrine-orm-module: If you use Doctrine in combination with Laminas
- roave/psr-container-doctrine: Configures Doctrine services automatically.
Conflicts
- doctrine/cache: >2.0
This package is not auto-updated.
Last update: 2024-09-13 11:43:54 UTC
README
由Stefan Kleff创建
要求
注意:需要在composer.json文件中要求 doctrine 包。
安装
运行 composer require slm/queue-doctrine
。
如果您已安装laminas/laminas-component-installer 包,它将要求您在Laminas和Mezzio中启用模块(和 SlmQueue
)。否则,将模块添加到列表中
- 在Laminas MVC中,通过在您的 application.config.php 文件中添加
SlmQueueDoctrine
来启用模块。 - 在Mezzio中,通过在您的 config.php 文件中添加
SlmQueueDoctrine\ConfigProvider::class,
来启用模块。
注意:不要忘记在您配置文件中安装 SlmQueue,这是必需的。
文档
在阅读 SlmQueueDoctrine 文档之前,请先阅读 SlmQueue 文档。
配置连接
您需要在服务管理器中注册一个doctrine连接,该连接将用于SlmQueueDoctrine访问数据库。以下是一些 示例。
连接参数可以在应用程序配置中定义
<?php return [ 'doctrine' => [ 'connection' => [ // default connection name 'orm_default' => [ 'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver', 'params' => [ 'host' => 'localhost', 'port' => '3306', 'user' => 'username', 'password' => 'password', 'dbname' => 'database', ] ] ] ], ];
从SQL文件创建表
您必须创建所需的表,该表将包含队列。您可以使用位于 'data/queue_default.sql' 的模式。如果您更改表名,请参阅 配置队列。
>mysql database < data/queue_default.sql
从Doctrine实体创建表
还有另一种方法通过将Doctrine实体 'data/DefaultQueue.php' 复制到您的实体文件夹(在我们的示例中为 'Application\Entity')并执行Doctrine的 'orm:schema-tool:update' 命令来在您的数据库中创建 'queue_default' 表。请注意,DefaultQueue 实体仅用于表创建,并在此模块内部不使用。
添加队列
return [ 'slm_queue' => [ 'queue_manager' => [ 'factories' => [ 'foo' => 'SlmQueueDoctrine\Factory\DoctrineQueueFactory' ] ] ] ];
添加作业
return [ 'slm_queue' => [ 'job_manager' => [ 'factories' => [ 'My\Job' => 'My\JobFactory' ] ] ] ];
配置队列
以下选项可以针对每个队列进行设置;
- 连接(默认为 'doctrine.connection.orm_default'): 已注册的doctrine连接服务名称
- table_name(默认为 'queue_default'): 用于存储作业的表名称
- deleted_lifetime(默认为 0): 保持已删除(成功)作业的时间(以分钟为单位)
- buried_lifetime(默认为 0): 保持已埋葬(失败)作业的时间(以分钟为单位)
return [ 'slm_queue' => [ 'queues' => [ 'foo' => [ // ... ] ] ] ];
提供的工作策略
除了SlmQueue提供的策略外,SlmQueueDoctrine还提供了以下策略;
ClearObjectManagerStrategy
此策略将在执行单个作业之前清除ObjectManager。作业必须实现DoctrineModule\Persistence\ObjectManagerAwareInterface或SlmQueueDoctrine\Persistence\ObjectManagerAwareInterface。
监听
process.job
事件,优先级1000
选项
- 无
此策略默认启用。
IdleNapStrategy
当队列中没有可用的作业时,此策略将使工作进程等待特定的时间后再查询数据库。
监听
process.idle
事件,优先级为1
选项
nap_duration
默认为1(秒)
此策略默认启用。
对队列的操作
push
有效选项包括
- scheduled: 作业下次计划运行的时间
- 数字字符串或整数 - 解释为时间戳
- 可由 DateTime 对象解析的字符串
- DateTime 实例
- delay: 作业变为可弹出之前的时间延迟(默认为0 - 无延迟 -)
- 数字字符串或整数 - 解释为秒
- 可由 DateTimeInterval::__construct 解析的(ISO 8601持续时间)字符串
- 可由 DateTimeInterval::createFromDateString 解析的(相对部分)字符串
- DateTimeInterval 实例
- priority: 优先级越低,作业越早从队列中弹出(默认为1024)
示例
// scheduled for execution asap $queue->push($job); // will get executed before jobs that have higher priority $queue->push($job, [ 'priority' => 200, ]); // scheduled for execution 2015-01-01 00:00:00 (system timezone applies) $queue->push($job, [ 'scheduled' => 1420070400, ]); // scheduled for execution 2015-01-01 00:00:00 (system timezone applies) $queue->push($job, [ 'scheduled' => '2015-01-01 00:00:00' ]); // scheduled for execution at 2015-01-01 01:00:00 $queue->push($job, [ 'scheduled' => '2015-01-01 00:00:00', 'delay' => 3600 ]); // scheduled for execution at now + 300 seconds $queue->push($job, [ 'delay' => 'PT300S' ]); // scheduled for execution at now + 2 weeks (1209600 seconds) $queue->push($job, [ 'delay' => '2 weeks' ]); // scheduled for execution at now + 300 seconds $queue->push($job, [ 'delay' => new DateInterval("PT300S")) ]);
工作进程动作
从您的 Laminas Framework 2 应用程序的公共文件夹中,通过命令行与工作进程进行交互
启动工作进程
启动一个工作进程,该工作进程将监控特定队列中计划处理的作业。该工作进程将继续运行,直到达到某些标准(超过内存限制或处理了指定的作业数量)。
vendor/bin/laminas slm-queue:start <队列名称>
当工作进程完成当前正在处理的作业后,您可以通过按下 cntr-C 之后 退出工作进程。(PHP 在 Windows 上不支持信号处理)
恢复作业
要恢复长时间处于 '运行' 状态(以分钟为单位指定)的作业,请使用以下命令。
vendor/bin/laminas slm-queue:doctrine:recover <队列名称> [--executionTime=]
注意:正在处理正在恢复的作业的工作进程不会被停止。