我希望能够轻松地同步和异步处理 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,"error":"没有消息处理程序 "App\Entity\Messages\ApiPayloadSync"。","exception":"[object] (Symfony\Component\Messenger\Exception\NoHandlerForMessageException(code : 0): 没有消息“App\Entity\Messages\ApiPayloadSync”的处理程序。在 /var/www/xxx/vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php:75)"} []
因此,尽管我将框架配置为不执行任何操作(对于同步传输),但框架确实开始重试