Исключение TransportExceptionInterface
Исключение TransportExceptionInterface относится к компоненту
Messenger и выбрасывается, когда транспорт не может
выполнить операцию: отправить сообщение в очередь,
прочитать его или подтвердить обработку. Оно не
содержит параметров, но реализует стандартный
интерфейс Throwable и может быть перехвачено
для повторной попытки или логирования сбоя.
Синтаксис
namespace Symfony\Component\Messenger\Exception;
interface TransportExceptionInterface extends \Throwable
{
}
Пример
Давайте отправим сообщение через транспорт и перехватим
исключение TransportExceptionInterface:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Exception\TransportExceptionInterface;
class MessageController extends AbstractController
{
public function send(MessageBusInterface $bus): Response
{
try {
$bus->dispatch(new \App\Message\ArticleMessage('article'));
} catch (TransportExceptionInterface $e) {
return new Response('transport error: ' . $e->getMessage());
}
return new Response('sent');
}
}
?>
Результат выполнения кода при успешной отправке:
"sent"
Пример
Давайте обработаем сообщение и перехватим ошибку транспорта при получении:
<?php
namespace App\MessageHandler;
use App\Message\ArticleMessage;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
use Symfony\Component\Messenger\Exception\TransportExceptionInterface;
#[AsMessageHandler]
class ArticleMessageHandler
{
public function __invoke(ArticleMessage $message): void
{
try {
$text = $message->getText();
echo 'handled: ' . $text;
} catch (TransportExceptionInterface $e) {
echo 'transport error: ' . $e->getMessage();
}
}
}
?>
Результат выполнения кода для сообщения с текстом 'article':
"handled: article"
Пример
Давайте проверим, является ли исключение экземпляром
TransportExceptionInterface, и выведем статус:
<?php
use Symfony\Component\Messenger\Exception\TransportExceptionInterface;
$e = new \RuntimeException('connection failed');
if ($e instanceof TransportExceptionInterface) {
echo 'transport exception';
} else {
echo 'other exception';
}
?>
Результат выполнения кода:
"other exception"
Смотрите также
-
исключение
HttpExceptionInterface,
которое задаёт базовый интерфейс HTTP-исключений -
исключение
NotFoundHttpException,
которое сигнализирует об ошибке 404 -
исключение
BadRequestHttpException,
которое сигнализирует об ошибке 400 -
исключение
ServiceUnavailableHttpException,
которое сигнализирует об ошибке 503