4

我在 Symfony 应用程序中使用 messenger 组件来处理来自 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

但我没有看到提供任何解决方案或解决方法!

4

1 回答 1

1

我找到了一种解决方法:当消息被重定向回队列(稍后重试)时,正在添加一个巨大的标记在我的序列化程序中,在方法“编码​​”中,我过滤了标记:

$allStamps = [];
        foreach ($envelope->all() as $stampKey => $stamps) {
            if ($stampKey  === 'Symfony\Component\Messenger\Stamp\ErrorDetailsStamp') {
                // 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),
            ],
        ];
于 2022-01-14T13:51:06.007 回答