优化rpc错误返回

This commit is contained in:
duanhf2012
2020-04-01 14:42:33 +08:00
parent 7e6b3098d4
commit a76527c7d7
2 changed files with 15 additions and 12 deletions

View File

@@ -135,13 +135,13 @@ type RpcRequest struct {
Seq uint64 // sequence number chosen by client Seq uint64 // sequence number chosen by client
ServiceMethod string // format: "Service.Method" ServiceMethod string // format: "Service.Method"
NoReply bool //是否需要返回 NoReply bool //是否需要返回
//packbody //packbody
InParam []byte InParam []byte
//other data
localReply interface{} localReply interface{}
localParam interface{} //本地调用的参数列表 localParam interface{} //本地调用的参数列表
requestHandle RequestHandler requestHandle RequestHandler
callback *reflect.Value callback *reflect.Value
} }

View File

@@ -115,22 +115,24 @@ func (agent *RpcAgent) Run() {
for { for {
data,err := agent.conn.ReadMsg() data,err := agent.conn.ReadMsg()
if err != nil { if err != nil {
log.Debug("read message: %v", err) log.Error("read message: %v", err)
//will close tcpconn
break break
} }
if processor==nil{
log.Error("Rpc Processor not set!")
continue
}
var req RpcRequest
//解析head //解析head
var req RpcRequest
err = processor.Unmarshal(data,&req) err = processor.Unmarshal(data,&req)
if err != nil { if err != nil {
log.Debug("processor message: %v", err) if req.Seq>0 {
agent.Close() rpcError := RpcError("rpc Unmarshal request is error")
break agent.WriteRespone(req.ServiceMethod,req.Seq,nil,&rpcError)
continue
}else{
log.Error("rpc Unmarshal request is error: %v", err)
//will close tcpconn
break
}
} }
//交给程序处理 //交给程序处理
@@ -141,6 +143,7 @@ func (agent *RpcAgent) Run() {
log.Debug("rpc request req.ServiceMethod is error") log.Debug("rpc request req.ServiceMethod is error")
continue continue
} }
rpcHandler := agent.rpcserver.rpcHandleFinder.FindRpcHandler(serviceMethod[0]) rpcHandler := agent.rpcserver.rpcHandleFinder.FindRpcHandler(serviceMethod[0])
if rpcHandler== nil { if rpcHandler== nil {
rpcError := RpcError(fmt.Sprintf("service method %s not config!", req.ServiceMethod)) rpcError := RpcError(fmt.Sprintf("service method %s not config!", req.ServiceMethod))