这个问题与语言无关。
我有一个处理循环中请求的应用程序。在此循环期间,对每个请求执行多个操作。这些操作位于try / catch / log块中。 我现在将其扩展为通过电子邮件通知管理员严重错误。
除了一件事,这一切都很容易。我们依靠客户端来实现他们自己的电子邮件传递冗余,我从经验中知道总会有一个客户端只有一个SMTP交换服务器,这必然会不时下降。
所以这就是困境:
方案1(在发送失败时不处理错误) - 当我向管理员发送电子邮件并且SMTP关闭时,它将破坏应用程序(应用程序将停止运行,并且其他循环将停止处理,因为错误是未处理的)这意味着错误报告本应该对应用程序有益突然成为99/100请求未被处理的原因,因为请求1存在问题。
场景2(在发送失败期间处理异常) - 这意味着我在try / catch / log块中包围发送代码,太棒了!应用程序处理其中的99个请求,除了一个,但管理员现在没有通过电子邮件通知这一个错误,因为当它试图发送SMTP时,该错误只是记录到应用程序日志,管理员谁没有现在检查这个日志几天(甚至几周),现在无法知道发生了错误。
有没有一种双赢的方式来解决这个问题,或者我总是会不知所措,并且受到SMTP的支配。请记住,管理电子邮件服务器冗余超出了我们的范围。
答案 0 :(得分:2)
扩展方案2以记录应用程序日志中的哪些条目未通过电子邮件发送,并定期轮询此日志以查找未发送的条目并尝试重新发送 - 最终smtp服务将再次可用。 (您可能希望阻止任何重新发送的错误返回重发队列......)
答案 1 :(得分:1)
我建议“双赢”的方式是让服务器管理员实际上管理服务器,而不是当他的邮件服务器关闭时完全无法访问的服务器管理员,并且不会之后要仔细查看它是否错过任何通知。