【问题标题】:Is catching an exception and continuing program execution a best practice?捕获异常并继续执行程序是最佳实践吗?
【发布时间】:2016-01-11 06:44:50
【问题描述】:

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

【问题讨论】:

  • 在这种情况下,我觉得很好。如果 3 次尝试失败会怎样?
  • 这确实是最佳实践.. 向用户显示错误消息可能不仅会给用户带来麻烦,还会为您的系统上的黑客制造漏洞
  • @clayton 程序退出

标签: php rabbitmq amqp


【解决方案1】:

是的。

应始终捕获和处理异常。这无疑是最佳实践。异常是一种语言中的控制流结构,允许程序员处理他们没有预料到或很少会发生的事情。

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

我建议您开始记录为什么会发生这些套接字超时。通常它们是由资源枯竭引起的,但它在哪里呢?服务器 A 或服务器 B……或那个客户端……

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多