Symfony 6.3的新功能:调度程序组件,取代cron轻松实现定时任务【转载】 CJayhe Symfony新闻 353 views 项目的常见需求是定期执行任务,例如发送试用结束电子邮件。在Unix世界中, 您可以将`cron`用于此类重复性任务。再加上Symfony命令,你拥有你需要的一切。 但克罗恩有局限性。这就是为什么在Symfony 6.3中我们引入了**一个新的调度程序组件**。此组件允许您触发应发送的消息 按照预定义的计划。它重用了你已经熟悉的信使概念。 在Symfony应用程序中,您首先定义一个新的调度提供程序 创建消息并定义发送消息的频率。 例如,计划将每 2 天发送一条消息,向您的应用程序发出信号 要对已创建但尚未付款的订单执行某些操作: ```php use Symfony\Component\Scheduler\Attribute\AsSchedule; use Symfony\Component\Scheduler\RecurringMessage; // ... #[AsSchedule('default')] class DefaultScheduleProvider implements ScheduleProviderInterface { public function getSchedule(): Schedule { return (new Schedule())->add( RecurringMessage::every('2 days', new PendingOrdersMessage()) ); } } ``` 然后,创建及其处理程序,方法与 使中的任何其他消息和处理程序。最后,运行消息与此计划关联的消费者(例如,通过命令控制台在 worker)生成消息:PendingOrdersMessage ```shell # 调度器名称中后缀为'_default'的 # 您之前在#[assschedule]属性中定义的值 $ symfony console messenger:consume -v scheduler_default ``` **仅此而已**。在内部,每个时间表都转换为信使 运输。传输生成消息(即它们未被调度)和 这些消息会立即处理(如传输)。`sync` 此组件的最佳功能之一是它基于 Messenger 基础架构。 重用相同的概念(消息、处理程序、图章等)可以让你学习 它很快。此外,重用与 Messenger 相同的工作线程意味着您可以使用 相同的时间限制、内存管理、信号处理等。 消息频率可以通过许多不同的方式定义: ```php RecurringMessage::every('10 seconds', $msg) RecurringMessage::every('1 day', $msg) RecurringMessage::every('next tuesday', $msg) RecurringMessage::every('first monday of next month', $msg) # run at a very specific time every day RecurringMessage::every('1 day', $msg, from: '13:47') # you can pass full date/time objects too RecurringMessage::every('1 day', $msg, from: new \DateTimeImmutable('13:47', new \DateTimeZone('Europe/Paris')) ) # define the end of the handling too RecurringMessage::every('1 day', $msg, until: '2023-09-21') # you can even use Cron expressions RecurringMessage::cron('0 12 * * 1', $msg) // every Monday at 12:00 RecurringMessage::cron('#midnight', $msg) RecurringMessage::cron('#weekly', $msg) ``` 我们仍在为这个新组件编写文档,我们希望拥有它们 在 Symfony 6.3 发布后不久就准备好了。同时,您可以免费观看Fabien在最近的SymfonyLive Paris 2023会议上发表的主题演讲( 视频是法语的,幻灯片是英文的)。 原文链接 https://symfony.com/blog/new-in-symfony-6-3-scheduler-component 帮助PHPZlc项目! 与任何开源项目一样, 贡献代码 或 文档 是最常见的帮助方式, 但我们也有广泛的 赞助机会。 0 赞赏 加入技术群 评论 去登录