Java 处理连接错误的最佳实践
发生连接错误时采用的最佳工作流是什么。 假设我们有一个连接到中间层的客户端Java 处理连接错误的最佳实践,java,.net,wcf,ejb,Java,.net,Wcf,Ejb,发生连接错误时采用的最佳工作流是什么。 假设我们有一个连接到中间层的客户端 class MyClient{ ... void callServer(){ try{ middletier.saveRecord(123); }catch(...){ // log the error // what to do next (notify the user, take the same step again)?
class MyClient{
...
void callServer(){
try{
middletier.saveRecord(123);
}catch(...){
// log the error
// what to do next (notify the user, take the same step again)?
// reinitialize connection ?
}
}
}
如果发生连接错误(超时、连接断开…),该怎么办
我是否应该通知用户连接有问题并重试?
某些事情可以自动完成,并且对用户透明吗
我喜欢的是,不要用错误来打扰用户,然后告诉用户下一步要做什么。那么,处理此类错误的最佳工作流是什么呢?这完全取决于应用程序的要求。有时最好立即通知用户,有时最好在通知用户之前重试请求几次。您必须咨询您的客户/分析师。这完全取决于应用程序要求。有时最好立即通知用户,有时最好在通知用户之前重试请求几次。您必须咨询您的客户/分析师。从调用方的角度来看
MyClient
:一般来说,失败的方法调用应该使MyClient
保持在调用之前的状态。这意味着您应该注意如何恢复middletier.saveRecord(123)之前的状态代码>从调用方的角度来看MyClient
:一般来说,失败的方法调用应该使MyClient
保持在调用之前的状态。这意味着您应该注意如何恢复middletier.saveRecord(123)之前的状态代码>我可以强烈推荐Michael Nygards“发布它!”这本书花了很多时间解释如何让你的软件更健壮
我可以强烈推荐Michael Nygards“发布它!”这本书花了很多时间解释如何让你的软件更健壮
这取决于。。。如果操作是由用户交互引起的,请通知用户。用户可以决定重试的频率。代码可能会自行重试,但如果超时,则用户可能会等待几分钟(或在没有收到任何反馈的情况下中止操作) 如果是后台任务,请在延迟一段时间后重试(但不是无限期-最终中止操作)。您可以重新初始化连接,这取决于使用的技术以及是否使用连接池 当然,如果你想投入更多的时间,你可以用不同的方式处理不同的错误。首先,区分永久性错误(几分钟内重试没有帮助)和间歇性错误(下次可以)。例如,对于断开的连接,您可以使用新连接重试(可能是防火墙由于不活动而丢弃了打开的连接)。但是对于超时(可能是网络配置问题)或“未找到HTTP 404”(假设您无法更改用于HTTP调用的URL),您可能无能为力 您可以在“诊断与维修”组件中收集所有这些知识
我还建议阅读“释放它!”。这取决于。。。如果操作是由用户交互引起的,请通知用户。用户可以决定重试的频率。代码可能会自行重试,但如果超时,则用户可能会等待几分钟(或在没有收到任何反馈的情况下中止操作) 如果是后台任务,请在延迟一段时间后重试(但不是无限期-最终中止操作)。您可以重新初始化连接,这取决于使用的技术以及是否使用连接池 当然,如果你想投入更多的时间,你可以用不同的方式处理不同的错误。首先,区分永久性错误(几分钟内重试没有帮助)和间歇性错误(下次可以)。例如,对于断开的连接,您可以使用新连接重试(可能是防火墙由于不活动而丢弃了打开的连接)。但是对于超时(可能是网络配置问题)或“未找到HTTP 404”(假设您无法更改用于HTTP调用的URL),您可能无能为力 您可以在“诊断与维修”组件中收集所有这些知识
我还建议阅读“发布它!”。我的客户不知道这一点。他们要求我给出最好的解决方案。这就是我询问个人最佳实践的原因。我的客户不知道这一点。他们要求我给出最好的解决方案。这就是为什么我要问关于个人最佳实践的问题。