Closed scottzzq closed 6 years ago
包括。 参见代码:https://github.com/baidu/sofa-pbrpc/blob/master/src/sofa/pbrpc/dynamic_rpc_channel_impl.cc#L365
if (cntl->Failed()) {
server->is_last_request_succeed = false;
if (server->is_in_live_map) {
MoveToUnlive(server->server_address, cntl->Reason());
}
}
else {
server->is_last_request_succeed = true;
}
可见通过判断cntl->Failed()来确定的。如果Server端通过SetFailed(reason)接口设置了错误,Client端在调用cntl->Failed()会返回true。
对于用户来说,有两种方式来设置失败:
用户可以根据需要采用合适的方式,但是要清楚各自的影响。
多谢 @qinzuoyan 解答,非常感谢!
在 sofa的wiki中写到容错策略: 一旦某个server的RPC调用出错,则将其加入“待探活队列”;
@@想问下这个出错的类型是否包括:应用层服务执行本身的错误(非RPC错误),具体就是指Server端在服务执行过程中遇到了错误,使用SetFailed(reason)接口设置错误的这种情况。 @qinzuoyan
谢谢!