symfony messenger没有消息处理程序
我希望能够轻松地同步和异步处理api调用 所以我创建了一个带有相应处理程序和基类的空接口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
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()方法,该方法的类型暗示了消息类(或消息接口):``取自