You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony调度器异常:scheduler_default接收器不存在,未检测到调度

Symfony调度器接收器不存在+未识别调度任务排查解决

问题现象

执行命令 php bin/console messenger:consume -vv scheduler_default 时触发报错:

In ConsumeMessagesCommand.php line 168:

[Symfony\Component\Console\Exception\RuntimeException]
The receiver "scheduler_default" does not exist.

执行 php bin/console debug:scheduler 显示无调度任务:

Scheduler
=========


 [ERROR] No schedules found.

已执行操作

已按照官方流程创建调度器类,实现ScheduleProviderInterface接口并添加#[AsSchedule('default')]属性,但调度器仍未被系统识别。

相关代码与配置

调度器类代码(src/Scheduler/Schedule.php)

// src/Scheduler/Schedule.php
namespace App\Scheduler;

use Symfony\Component\Scheduler\RecurringMessage;
use Symfony\Component\Scheduler\Schedule;
use Symfony\Component\Scheduler\ScheduleProviderInterface;
use App\Message\Foo;

#[AsSchedule('default')]
class DefaultScheduleProvider implements ScheduleProviderInterface
{
    public function getSchedule(): Schedule
    {  
        $schedule = new Schedule();
        $schedule->add(RecurringMessage::every('2 days', new Foo()));
        return $schedule;
    }
}

Messenger配置文件(packages/messenger.yaml)

framework:
    messenger:
        # Uncomment this (and the failed transport below) to send failed messages to this transport for later handling.
        # failure_transport: failed

        transports:
            # https://symfony.com/doc/current/messenger.html#transport-configuration
            # async: '%env(MESSENGER_TRANSPORT_DSN)%'
            # failed: 'doctrine://default?queue_name=failed'
            # sync: 'sync://'

        routing:
            # Route your messages to the transports
            # 'App\Message\YourMessage': async

排查解决步骤

  • 补全属性导入:代码中未导入AsSchedule属性,导致注解不生效。需在调度器类顶部添加:
    use Symfony\Component\Scheduler\Attribute\AsSchedule;
    
  • 确认Scheduler组件已安装:执行以下命令确保组件存在:
    composer require symfony/scheduler
    
  • 验证服务注册状态:执行命令检查调度器类是否被Symfony自动注册为服务:
    php bin/console debug:container | grep ScheduleProvider
    
    若未找到DefaultScheduleProvider,需确认类的命名空间与文件路径匹配,或手动在services.yaml中配置服务。
  • 清除缓存:执行缓存清除命令,确保新配置和类被加载:
    php bin/console cache:clear
    
  • 配置Messenger传输(可选):若需异步执行任务,需在messenger.yaml中启用传输并配置路由:
    1. 取消transports下的async或sync注释,设置对应DSN(如async: 'doctrine://default?queue_name=async')
    2. 在routing中添加消息路由:
      'App\Message\Foo': async
      
  • 重新验证调度器:完成上述操作后,再次执行php bin/console debug:scheduler,若显示存在调度任务,即可执行php bin/console messenger:consume -vv scheduler_default启动消费进程。

内容的提问来源于stack exchange,提问作者Himanshu Lahare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:57:03