我正在Symfony应用程序中使用信使组件来处理来自rabbitmq的消息。
当我发送一个2-3mb的消息并且在我的处理程序中发生错误时,试图将消息发送回rabbit的中间件会引发类型为
的异常:AMQPException库错误:表太大缓冲区
我在这个链接中发现了类似的错误:
https://github.com/vyuldashev/laravel-queue-rabbitmq/issues/10
https://github.com/alanxz/rabbitmq-c/issues/224
https://github.com/php-amqp/php-amqp/issues/131
但我没有看到任何解决方案或变通提供!
我找到了一个解决方法:当消息被重定向回队列(稍后重试)时,将添加一个巨大的戳记在我的序列化器中,在方法'encode'中,我过滤戳记:
$allStamps = [];
foreach ($envelope->all() as $stampKey => $stamps) {
if ($stampKey === 'SymfonyComponentMessengerStampErrorDetailsStamp') {
// this header could be huge and drasticaly increase a size of a message
continue;
}
$allStamps = array_merge($allStamps, $stamps);
}
return [
'body' => serialize($messageBody),
'headers' => [
// store stamps as a header - to be read in decode()
'stamps' => serialize($allStamps),
],
];