Класс ErrorDetailsStamp
Класс ErrorDetailsStamp представляет собой штамп (stamp), который добавляется к конверту сообщения при возникновении ошибки во время обработки асинхронного сообщения. Он содержит сериализованную информацию об исключении: класс ошибки, сообщение и код. Этот штамп используется для логирования и повторной обработки сбойных сообщений.
Синтаксис
<?php
namespace Symfony\Component\Messenger\Stamp;
class ErrorDetailsStamp implements StampInterface
{
public function __construct(
string $exceptionClass,
int|string $exceptionCode,
string $exceptionMessage,
?FlattenException $flattenedException = null
) {
}
public function getExceptionClass(): string
{
}
public function getExceptionCode(): int|string
{
}
public function getExceptionMessage(): string
{
}
public function getFlattenedException(): ?FlattenException
{
}
}
?>
Пример
Давайте создадим штамп ErrorDetailsStamp вручную и добавим его к конверту:
<?php
namespace App\Message;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\ErrorDetailsStamp;
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
class ErrorHandler
{
public function handle(Envelope $envelope): void
{
$stamp = new ErrorDetailsStamp(
\RuntimeException::class,
500,
'Something went wrong'
);
$envelope = $envelope->with($stamp);
$error = $envelope->last(ErrorDetailsStamp::class);
echo $error->getExceptionClass();
echo "\n";
echo $error->getExceptionCode();
echo "\n";
echo $error->getExceptionMessage();
}
}
?>
Результат выполнения кода:
RuntimeException
500
"Something went wrong"
Пример
Давайте получим штамп ErrorDetailsStamp из конверта, который был создан при ошибке в очереди:
<?php
namespace App\Message;
use Symfony\Component\Messenger\Envelope;
use Symfony\Component\Messenger\Stamp\ErrorDetailsStamp;
class MessageConsumer
{
public function consume(Envelope $envelope): void
{
$errorStamp = $envelope->last(ErrorDetailsStamp::class);
if ($errorStamp !== null) {
echo 'Error class: ' . $errorStamp->getExceptionClass() . "\n";
echo 'Error message: ' . $errorStamp->getExceptionMessage() . "\n";
echo 'Error code: ' . $errorStamp->getExceptionCode() . "\n";
} else {
echo 'No error details found';
}
}
}
?>
Результат выполнения кода при наличии ошибки:
"Error class: RuntimeException"
"Error message: Something went wrong"
"Error code: 500"
Смотрите также
-
класс
Envelope,
который представляет конверт сообщения -
метод
last,
который возвращает последний штамп указанного типа -
класс
HandlerFailedException,
который выбрасывается при ошибке обработчика -
класс
RedeliveryStamp,
который хранит информацию о повторной доставке