捕获异常并继续执行程序是最佳实践


Is catching an exception and continuing program execution a best practice?

我的应用程序连接到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编写的。

是。

应始终捕获并处理异常。这无疑是最好的做法。异常是一种语言中的控制流结构,它允许程序员处理他们没有预料到或很少预料到的事情。

在您的场景中,在套接字方面捕获异常是完全合理的。TCP/IP通信并不完美,根据各种情况,套接字故障在某个时间点是100%确定的。

我建议您开始记录这些套接字超时的原因。通常情况下,它们是由资源耗尽引起的,但它在哪里?服务器A或服务器B…或该客户端。。。

超时是需要调查的问题的症状。在正确处理它们的同时,我强烈建议添加一些日志记录,以找出它们发生的原因。