Dav*_*ore 8 php amqp symfony symfony-messenger
在我的 Symfony 项目中,有一个队列消息处理程序,并且在执行过程中随机出现一个错误:
[2022-10-12T07:31:40.060119+00:00] console.CRITICAL: Error thrown while running command "messenger:consume async --limit=10". Message: "Library error: a socket error occurred" {"exception":"[object] (Symfony\\Component\\Messenger\\Exception
TransportException(code: 0): Library error: a socket error occurred at /var/www/app/vendor/symfony/amqp-messenger/Transport/AmqpReceiver.php:62)
[previous exception] [object] (AMQPException(code: 0): Library error: a socket error occurred at /var/www/app/vendor/symfony/amqp-messenger/Transport/Connection.php:439)","command":"messenger:consume async --limit=10","message":"Library error: a socket error occurred"} []
Run Code Online (Sandbox Code Playgroud)
处理程序执行的 HTTP 请求可能会持续几秒钟,如果 API 速度很慢,单个消息的整个过程甚至可能需要一分钟以上。奇怪的是,问题消失了几个小时,但随后又随机出现。发送到队列的消息越多,就越容易看到异常。
config\packages\messenger.yaml
framework:
messenger:
transports:
# https://symfony.com/doc/current/messenger.html#transport-configuration
async:
dsn: "%env(MESSENGER_TRANSPORT_DSN)%"
options:
exchange:
name: async_exchange
queues:
async: ~
heartbeat: 45
write_timeout: 90
read_timeout: 90
retry_strategy:
max_retries: 0
routing:
# Route your messages to the transports
'App\Message\MessageUpdateRequest': async
Run Code Online (Sandbox Code Playgroud)
应用\MessageHandler\MessageUpdateRequestHandler.php
<?php
declare(strict_types=1);
namespace App\MessageHandler;
use App\Message\MessageUpdateRequest;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;
class MessageUpdateRequestHandler implements MessageHandlerInterface
{
public function __invoke(MessageUpdateRequest $message)
{
// Logic executing API requests...
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
环境
我尝试过的事情
heartbeat
、write_timeout
和。read_timeout
messenger.yaml
相关问题/链接
我该如何解决这个问题?
关于 Symfony Messenger 中发生的套接字错误,我总是建议遵循逐步方法并检查是否遗漏了任何内容。它几乎每次都会修复此类错误。请遵循以下准则:
messenger.yaml
是否准确。messenger.yaml
文件中,增加心跳、写入超时和读取超时设置。messenger.yaml
合适。MessageUpdateRequestHandler
。希望能帮助到你。调试愉快,祝你好运。