捕获异常并继续执行程序是最佳实践吗?
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...或那个客户端...
超时是需要调查的问题的征兆。当您正确处理它们时,我强烈建议添加一些日志记录以找出它们发生的原因。
我的应用程序连接到 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...或那个客户端...
超时是需要调查的问题的征兆。当您正确处理它们时,我强烈建议添加一些日志记录以找出它们发生的原因。