slm / queue-doctrine
Laminas 框架模块,集成了 Doctrine 作为队列系统
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 auto-updated.
Last update: 2024-07-03 10:18:55 UTC
README
SlmQueueDoctrine
重要通知
我们决定转向使用 Symfony Messenger,因此不再维护此存储库。您可以随意将其分支并使其成为您自己的项目。
由 Stefan Kleff 创建
要求
注意:需要在 composer.json 文件中要求 doctrine 包。
安装
运行 composer require slm/queue-doctrine
。
如果您已安装 laminas/laminas-component-installer 包,它将询问您启用模块(和 SlmQueue
),在 Laminas 和 Mezzio 中都进行。否则,将模块添加到列表中
- 在 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' => [ // ... ] ] ] ];
提供的 Worker 策略
除了 SlmQueue 提供的策略外,SlmQueueDoctrine 还提供了以下策略;
ClearObjectManagerStrategy
此策略在执行单个作业之前会清除ObjectManager。作业必须实现DoctrineModule\Persistence\ObjectManagerAwareInterface或SlmQueueDoctrine\Persistence\ObjectManagerAwareInterface。
监听
process.job
事件,优先级为1000
选项
- 无
此策略默认启用。
IdleNapStrategy
当队列中没有作业可用时,此策略会使工作进程等待特定的时间后再查询数据库。
监听
process.idle
事件,优先级为1
选项
nap_duration
默认为1(秒)
此策略默认启用。
队列操作
推送
有效选项包括
- scheduled:作业下次计划运行的日期和时间
- 数字字符串或整数 - 解释为时间戳
- 可以被DateTime对象解析的字符串
- DateTime实例
- 延迟:作业变为可弹出的延迟时间(默认为0 - 无延迟 -)
- 数字字符串或整数 - 解释为秒
- 可以被DateTimeInterval::__construct解析的字符串(ISO 8601持续时间)
- 可以被DateTimeInterval::createFromDateString解析的字符串(相对部分)
- DateTimeInterval实例
- 优先级:优先级越低,作业从队列中弹出的越早(默认为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应用的public文件夹中通过命令行与工作进程交互
启动工作进程
启动一个工作进程,该工作进程将监控特定队列中计划处理的作业。该工作进程将继续运行,直到达到某些标准(例如超出内存限制或处理了指定的作业数量)。
vendor/bin/laminas slm-queue:start <队列名称>
工作进程在完成当前正在处理的作业后,按cntr-C 后将退出。 (PHP在Windows上不支持信号处理)
恢复作业
使用以下命令恢复长时间处于'运行'状态的作业(以分钟为单位)。
vendor/bin/laminas slm-queue:doctrine:recover <队列名称> [--executionTime=]
注意:正在处理正在恢复的作业的工作进程不会停止。