Symfony 6.3新增Scheduler组件无法发送消息的问题求助
Symfony 6.3新增Scheduler组件无法发送消息的问题求助
各位大佬好!我最近在尝试使用Symfony 6.3刚推出的scheduler组件,但遇到了棘手的问题——定时消息始终没有被投递到队列,启动的worker一直处于等待状态,完全没动静。
这个组件目前还没有官方文档,我只看过相关的博客文章,了解到它的实现思路和symfony/messenger组件几乎一致,核心区别是定时消息需要定义对应的ScheduleProvider来配置调度规则,还要指定专属的队列名称。
下面是我目前的配置和操作步骤,麻烦帮忙看看哪里出错了:
1. 定义ScheduleProvider
我创建了默认的调度提供者类,用#[AsSchedule("default")]注解标记,代码如下:
#[AsSchedule("default")] class DefaultScheduleProvider implements ScheduleProviderInterface { public function getSchedule(): Schedule { $schedule = new Schedule(); $schedule->add(RecurringMessage::every("5 seconds", new TestScheduledMessage())); return $schedule; } }
2. 配置Messenger传输与路由
在messenger的配置文件里,我专门定义了scheduler_default传输,并把我的定时消息路由到这个传输:
framework: messenger: failure_transport: failed transports: scheduler_default: '%env(MESSENGER_TRANSPORT_DSN)%' routing: App\Scheduler\TestScheduledMessage: scheduler_default
3. 验证配置有效性
我运行了symfony console debug:scheduler命令,确认调度规则已经被系统识别,显示的下一次执行时间也符合预期:
default ------- ------------------------- ------------------------------------ --------------------------- Message Trigger Next Run ------------------------- ------------------------------------ --------------------------- TestScheduledMessage PeriodicalTrigger: every 5 seconds 2023-08-10T15:28:30+00:00 ------------------------- ------------------------------------ ---------------------------
同时查看messenger的传输状态,scheduler_default确实存在,当前消息数为0:
------------------- ------- Transport Count ------------------- ------- scheduler_default 0 ------------------- -------
4. 启动Worker
最后我执行了symfony console messenger:consume -vv scheduler_default启动worker,结果它就一直卡在那儿,完全没接收到任何消息,日志里也没报错。
另外补充一下我的消息处理器代码,应该是没问题的:
#[AsMessageHandler] final class TestMessageHandler { public function __invoke(TestScheduledMessage $message) { // 这里是消息处理逻辑 } }
有没有大佬知道我是不是漏掉了什么关键配置或者操作步骤?麻烦指点一下!
备注:内容来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

