Является ли отлов исключения и продолжение выполнения программы лучшей практикой?

Мое приложение подключается к rabbitMQ. Иногда это бросает AMQPTimeoutException. КонкретнееОшибка при отправке данных. Время соединения сокета истекло.«

Мое решение:

Я ловлю AMQPTimeoutException и вызывая мой метод переподключения. После чего программа продолжает нормальное выполнение. Также я установил флаг, чтобы исключение обрабатывалось не более 3 раз.

try
{
sendMethod($message);
} catch (AMQPTimeoutException $e) {
echo "caught socket connection exception". "\n";
$this->reconnect($message, $exchangeName, $queue);
}
//reconnect internally checks the flag

Мой вопрос: это лучшая практика? Если нет, какие другие решения возможны?

Заметка : Приложение написано на PHP.

10

Решение

Да.

Исключения всегда должны быть пойманы и обработаны. Это, безусловно, лучшая практика. Исключением являются структуры потока управления в языке, который позволяет программистам иметь дело с вещами, которые они не ожидали или очень редко ожидают.

В вашем сценарии вполне разумно ловить исключения, когда речь идет о сокетах. Связь по протоколу TCP / IP не идеальна, и в зависимости от широкого диапазона условий сбой сокета в определенный момент времени гарантирован на 100%.

Я бы порекомендовал вам начать регистрировать, ПОЧЕМУ происходят эти тайм-ауты. Обычно они вызваны истощением ресурсов, но где это? Сервер A или Сервер B … или этот клиент …

Тайм-ауты являются признаком проблемы, которую необходимо исследовать. Хотя вы обрабатываете их правильно, я настоятельно рекомендую добавить некоторые записи, чтобы выяснить, почему они происходят.

6

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector