2016-01-11 23 views
10

La mia app si collega a rabbitMQ. A volte, sta lanciando un AMQPTimeoutException. Più in particolare "Errore l'invio dei dati di connessione socket è scaduta.".Sta ottenendo un'eccezione e l'esecuzione continua del programma è una best practice?

La mia soluzione:

sto cattura il AMQPTimeoutException e chiamando il mio metodo di riconnessione. Dopo di che il programma continua è normale esecuzione. Inoltre ho impostato un flag in modo che l'eccezione venga gestita al massimo 3 volte.

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

La mia domanda: questa è una buona pratica? Se no, quali altre soluzioni sono possibili?

Nota: l'app è scritta in PHP.

+0

In questa situazione, mi sembra soddisfacente. Cosa succede se fallisce dopo 3 tentativi? – Clay

+0

che è davvero la migliore pratica .. visualizzare un messaggio di errore sugli utenti può non solo causare problemi agli utenti ma crea anche buchi per gli hacker sul tuo sistema –

+0

@clayton Il programma termina – user3452275

risposta

6

Sì.

Le eccezioni devono sempre essere rilevate e gestite. Questa è sicuramente la miglior pratica. Le eccezioni sono strutture di controllo del flusso in un linguaggio che consente ai programmatori di gestire cose che non si aspettavano che accadessero o che molto raramente si aspettano di accadere.

Nel tuo scenario, è perfettamente ragionevole prendere delle eccezioni quando si tratta di socket. La comunicazione TCP/IP non è perfetta e dipende da una vasta gamma di condizioni. Il guasto del socket è sicuro al 100% ad un certo punto nel tempo.

Quello che vorrei raccomandare è che si avvia la registrazione PERCHE 'questi timeout di socket si verificano. Tipicamente sono causati dall'esaurimento delle risorse, ma dov'è? Server A o Server B ... o quel client ...

I timeout sono un sintomo di un problema che deve essere esaminato. Mentre li gestisci correttamente, ti suggerisco caldamente di aggiungere alcune registrazioni per scoprire perché si stanno verificando.