Symfony执行RabbitMQ消费者命令报错:类%old_sound_rabbit_mq.producer.class%不存在
解决RabbitMQBundle报错:Class %old_sound_rabbit_mq.producer.class% does not exist
下面是导致这个错误的常见原因及对应解决方法:
配置使用了过时的参数占位符
旧版本RabbitMqBundle依赖%old_sound_rabbit_mq.producer.class%这类参数指定生产者类,但新版本已将默认类整合到bundle内部,无需手动引用该占位符。
解决:检查services.yaml中的生产者配置,把class: '%old_sound_rabbit_mq.producer.class%'替换为实际类名(比如OldSound\RabbitMqBundle\RabbitMq\Producer),或者直接移除class配置项,让bundle自动处理。RabbitMQBundle未正确注册
如果项目的config/bundles.php里没注册OldSoundRabbitMqBundle,bundle的默认参数和服务就不会被加载,导致占位符无法解析。
解决:打开config/bundles.php,添加一行:OldSound\RabbitMqBundle\OldSoundRabbitMqBundle::class => ['all' => true],配置文件结构错误
services.yaml中的RabbitMQ配置层级不对(比如生产者/消费者配置没嵌套在old_sound_rabbit_mq节点下)、缩进错误,都会导致bundle无法读取配置,进而无法替换占位符。
解决:确保配置结构符合规范,示例如下:old_sound_rabbit_mq: connections: default: host: 'localhost' port: 5672 user: 'guest' password: 'guest' vhost: '/' producers: activity-logs: connection: default exchange_options: name: 'activity-logs-exchange' type: direct consumers: activity-logs: connection: default exchange_options: name: 'activity-logs-exchange' type: direct queue_options: name: 'activity-logs-queue' callback: App\Service\TestServiceSymfony缓存未清理
旧的缓存内容可能保留了错误的配置信息,导致占位符无法被正确解析。
解决:执行缓存清理命令:php bin/console cache:clear生产环境需添加
--env=prod参数。
内容的提问来源于stack exchange,提问作者Robert Blasco Villarroya
相关产品推荐
相关产品推荐

