halloverden / symfony-scheduled-task-bundle
启用创建由 symfony/messenger 消费的任务的 cron-jobs
2.0.0
2022-09-08 11:31 UTC
Requires
- php: >=8.1
- dragonmantank/cron-expression: ^2.2
- nesbot/carbon: ^2.1
- symfony/config: ^5.4|^6.1
- symfony/console: ^5.4|^6.1
- symfony/dependency-injection: ^5.4|^6.1
- symfony/http-kernel: ^5.4|^6.1
- symfony/messenger: ^5.4|^6.1
- symfony/yaml: ^5.4|^6.1
This package is auto-updated.
Last update: 2024-09-08 15:49:09 UTC
README
Scheduled Task Bundle 为在 Symfony 应用程序中实现 cron 作业提供了一种方法,利用 messenger 组件 以同步或异步方式执行作业。
安装
确保已全局安装 Composer,如 Composer 文档的 安装章节 中所述。
使用 Symfony Flex 的应用程序
打开命令行,进入您的项目目录,并执行以下命令:
$ composer require halloverden/symfony-scheduled-task-bundle
未使用 Symfony Flex 的应用程序
步骤 1:下载 Bundle
打开命令行,进入您的项目目录,并执行以下命令以下载此 Bundle 的最新稳定版本:
$ composer require halloverden/symfony-scheduled-task-bundle
步骤 2:启用 Bundle
然后,通过将其添加到项目中 config/bundles.php
文件中注册的 Bundle 列表来启用 Bundle。
// config/bundles.php return [ // ... HalloVerden\ScheduledTaskBundle\HalloVerdenScheduledTaskBundle::class => ['all' => true], ];
用法
- 在您的
config/packages/messenger.yaml
文件中定义自己的 messenger 逻辑,将消息路由到传输。例如,请参阅Resources/config/hallo_verden_scheduler.yaml
。
framework: messenger: routing: 'HalloVerden\ScheduledTaskBundle\Interfaces\AsyncTaskInterface': async_task 'HalloVerden\ScheduledTaskBundle\Interfaces\SyncTaskInterface': sync
- 确保在您的
config/packages/messenger.yaml
文件的transports:
下配置了您要使用的所有传输。例如,请参阅Resources/config/hallo_verden_scheduler.yaml
。
framework: messenger: transports: async_task: '%env(MESSENGER_TRANSPORT_DSN)%' sync: 'sync://'
注意:建议启用 failure_transport
。
- 创建一个实现
AsyncTaskInterface
或SyncTaskInterface
的 Task 类,并定义 Task 的调度和名称
class RandomScheduledTask implements AsyncTaskInterface {
public function getSchedule(): ScheduleInterface {
return SimpleCronExpression::monthly()->day(23)->hour(16)->minute(25);
}
public function getName(): string {
return 'random-scheduled-task';
}
}
- 为您的任务创建一个 TaskHandler 类,该类需要定义一个
__invoke(Taskclass $task)
方法
class RandomScheduledTaskHandler implements TaskHandlerInterface {
public function __invoke(RandomScheduledTask $task) {
//...
}
}
贡献
欢迎 Pull 请求。对于重大更改,请先创建一个问题以讨论您想要更改的内容。
请确保适当更新测试。