halloverden/symfony-scheduled-task-bundle

启用创建由 symfony/messenger 消费的任务的 cron-jobs

2.0.0 2022-09-08 11:31 UTC

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

  • 创建一个实现 AsyncTaskInterfaceSyncTaskInterface 的 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 请求。对于重大更改,请先创建一个问题以讨论您想要更改的内容。

请确保适当更新测试。

许可协议

MIT