2016-01-11 9 views
10

Moja aplikacja łączy się z rabbitMQ. Czasami wrzuca on AMQPTimeoutException. Dokładniej „Błąd wysyłania danych Połączenie Gniazdo limit czasu.”.Czy uchwycenie wyjątku i kontynuowanie realizacji programu jest najlepszą praktyką?

Moje rozwiązanie:

Łapię AMQPTimeoutException i nazywając moją metodę ponownego połączenia. Po czym program kontynuuje normalne wykonywanie. Również ustawiłem flagę tak, że wyjątek jest obsługiwany na poziomie 3 razy.

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

Moje pytanie: czy to najlepsza praktyka? Jeśli nie, jakie inne rozwiązania są możliwe?

Uwaga: Aplikacja jest napisana w języku PHP.

+0

W tej sytuacji wydaje mi się w porządku. Co się stanie, jeśli zawiedzie po 3 próbach? – Clay

+0

To jest naprawdę najlepsza praktyka. Wyświetlanie komunikatów o błędach na użytkownikach może nie tylko powodować problemy u użytkowników, ale także tworzy luki dla hakerów w systemie –

+0

@clayton Program kończy – user3452275

Odpowiedz

6

Tak.

Wyjątki powinny zawsze być przechwytywane i obsługiwane. Jest to z pewnością najlepsza praktyka. Wyjątkiem są struktury sterowania przepływem w języku, który pozwala programistom na radzenie sobie z rzeczami, których się nie spodziewali lub bardzo rzadko oczekują.

W swoim scenariuszu jest całkowicie uzasadnione wychwycenie wyjątków, jeśli chodzi o gniazda. Komunikacja TCP/IP nie jest idealna iw zależności od szerokiego zakresu warunków awaria gniazda jest w 100% pewna.

Zalecam, aby rozpocząć rejestrowanie DLACZEGO nastąpią limity czasu gniazd. Zazwyczaj są one spowodowane wyczerpaniem zasobów, ale gdzie to jest? Serwer A lub Serwer B ... lub ten klient ...

Przerwy w dostawie są symptomem problemu, który należy zbadać. Podczas poprawnego obchodzenia się z nimi zdecydowanie sugeruję dodanie rejestrowania, aby dowiedzieć się, dlaczego tak się dzieje.

Powiązane problemy