symfony messenger没有消息处理程序

symfony messenger没有消息处理程序,symfony,symfony-messenger,Symfony,Symfony Messenger,我希望能够轻松地同步和异步处理api调用 所以我创建了一个带有相应处理程序和基类的空接口 interface ApiPayloadInterface { } class ApiPayload implements ApiPayloadInterface { /** @var array */ public $payload; /** @var string */ public $username; } class ApiPayloadMessageHandle

我希望能够轻松地同步和异步处理api调用

所以我创建了一个带有相应处理程序和基类的空接口

interface ApiPayloadInterface
{
}

class ApiPayload implements ApiPayloadInterface
{
    /** @var array */
    public $payload;

    /** @var string */
    public $username;
}
class ApiPayloadMessageHandler implements MessageHandlerInterface
{
    public function __invoke(ApiPayloadInterface $row)
    {
        ...
    }
}
好的,那么我有空的子类来区分异步和同步

class ApiPayloadSync extends ApiPayload implements ApiPayloadInterface
{}
class ApiPayloadASync extends ApiPayload implements ApiPayloadInterface
{}
选择发生在
messenger.yaml

    transports:
        async: 'doctrine://default?auto_setup=false'
        sync: 
            dsn: 'sync://'
                retry_strategy:
                    max_retries: 0

        routing:
            'App\Entity\Messages\ApiPayloadSync': sync
            'App\Entity\Messages\ApiPayloadASync': async
好的,这确实有效,但我在调度同步有效负载时出错:

$this->dispatch($bSync ? new ApiPayloadSync() : new ApiPayloadASync());
在我的日志文件中,我看到了几十条这样的消息:

[2019-10-27 22:11:14]messenger.CRITICAL:处理消息App\Entity\Messages\ApiPayloadSync时引发错误。重试3次后从传输中删除。错误:“没有消息”App\Entity\Messages\ApiPayloadSync“{”message:“[object](App\Entity\Messages\ApiPayloadSync:{”payload:“{”action:“mdcadd”,…})”,“class:“App\Entity\Messages\ApiPayloadSync”,“retryCount”:3,“错误”:“没有消息”App\Entity\Messages\ApiPayloadSync“,“异常”:“[object](Symfony\Component\Messenger\Exception\NoHandlerForMessageException(代码:0):没有消息“App\Entity\Messages\ApiPayloadSync”的处理程序。位于/var/www/xxx/vendor/Symfony/Messenger/Middleware/handleMessageGeddleware.php:75)“[]


因此,尽管我将框架配置为不执行任何(同步传输)

我认为您不能使用这样的接口,您是否检查并?您应该按类而不是接口键入提示…或手动配置messenger处理程序,这些(相对较旧)问题表明接口无法使用,但似乎已被识别:
\bin/console debug:messenger…可以发送以下消息:---------------------------------------------------------------------------------------App\Entity\messages\ApiPayloadInterface由App\MessageHandler处理\ApiPayloadMessageHandler
hmm.``消息处理程序是一个PHP可调用的,建议创建它的方法是创建一个实现MessageHandlerInterface的类,并具有一个与消息类(或消息接口)暗示类型相同的u invoke()方法:``摘自我认为你不能使用那样的接口,你检查了吗?你应该按类而不是接口键入提示…或者手动配置你的messenger处理程序,嗯,这些(相对旧的)问题表明接口无法使用,但似乎已被识别:
\bin/console debug:messenger…可以发送以下消息:---------------------------------------------------------------------------------------App\Entity\messages\ApiPayloadInterface由App\MessageHandler处理\ApiPayloadMessageHandler
hmm.``消息处理程序是一个PHP可调用的,建议创建它的方法是创建一个实现MessageHandlerInterface的类,并具有一个u invoke()方法,该方法的类型暗示了消息类(或消息接口):``取自