mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-04 06:54:45 +08:00
自定义rpc错误类型
This commit is contained in:
@@ -136,7 +136,7 @@ func (slf *TestServiceCall) Test(){
|
|||||||
|
|
||||||
func (slf *TestServiceCall) Run(){
|
func (slf *TestServiceCall) Run(){
|
||||||
//var ret int
|
//var ret int
|
||||||
var input int = 1000000
|
var input int = 1
|
||||||
//bT := time.Now() // 开始时间
|
//bT := time.Now() // 开始时间
|
||||||
|
|
||||||
//err := slf.Call("TestServiceCall.RPC_Test",&ret,&input)
|
//err := slf.Call("TestServiceCall.RPC_Test",&ret,&input)
|
||||||
@@ -149,9 +149,12 @@ func (slf *TestServiceCall) Run(){
|
|||||||
if param.Index == 0 {
|
if param.Index == 0 {
|
||||||
fmt.Print(".......................\n")
|
fmt.Print(".......................\n")
|
||||||
}
|
}
|
||||||
slf.AsyncCall("TestService1.RPC_Test",¶m, func(reply *Param, err error) {
|
err := slf.AsyncCall("TestService1.RPC_Test",¶m, func(reply *Param, err error) {
|
||||||
log.Debug(" index %d ,err %+v",reply.Index,err)
|
log.Debug(" index %d ,err %+v",reply.Index,err)
|
||||||
})
|
})
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("x333333333333:%+v",err)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,13 +170,13 @@ func (slf *TestService1) RPC_Test(a *Param,b *Param) error {
|
|||||||
func (slf *TestService1) OnInit() error {
|
func (slf *TestService1) OnInit() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
func (slf *TestServiceCall) RPC_Test(a *int,b *int) error {
|
func (slf *TestServiceCall) RPC_Test(a *int,b *int) error {
|
||||||
fmt.Printf("TestService2\n")
|
fmt.Printf("TestService2\n")
|
||||||
*a = *b
|
*a = *b
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
func (slf *TestServiceCall) TestDB() {
|
func (slf *TestServiceCall) TestDB() {
|
||||||
assetsInfo := &struct {
|
assetsInfo := &struct {
|
||||||
Cash int64 `json:"cash"` //美金余额 100
|
Cash int64 `json:"cash"` //美金余额 100
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ func (slf *Client) Go(noReply bool,mutiCoroutine bool,serviceMethod string, args
|
|||||||
return call
|
return call
|
||||||
}
|
}
|
||||||
|
|
||||||
type RequestHandler func(Returns interface{},Err error)
|
type RequestHandler func(Returns interface{},Err *RpcError)
|
||||||
|
|
||||||
type RpcRequest struct {
|
type RpcRequest struct {
|
||||||
//packhead
|
//packhead
|
||||||
@@ -151,7 +151,7 @@ type RpcRequest struct {
|
|||||||
type RpcResponse struct {
|
type RpcResponse struct {
|
||||||
//head
|
//head
|
||||||
Seq uint64 // sequence number chosen by client
|
Seq uint64 // sequence number chosen by client
|
||||||
Err error
|
Err *RpcError
|
||||||
|
|
||||||
//returns
|
//returns
|
||||||
Returns []byte
|
Returns []byte
|
||||||
@@ -189,6 +189,9 @@ func (slf *Client) Run(){
|
|||||||
v.Err = err
|
v.Err = err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if respone.Err != nil {
|
||||||
|
v.Err= respone.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if v.callback.IsValid() {
|
if v.callback.IsValid() {
|
||||||
|
|||||||
@@ -13,6 +13,31 @@ type FuncRpcClient func(nodeid int,serviceMethod string) ([]*Client,error)
|
|||||||
type FuncRpcServer func() (*Server)
|
type FuncRpcServer func() (*Server)
|
||||||
var NilError = reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
|
var NilError = reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
|
||||||
|
|
||||||
|
type RpcError struct {
|
||||||
|
Err string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slf *RpcError) Error() string {
|
||||||
|
return slf.Err
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewRpcError(e string) *RpcError {
|
||||||
|
return &RpcError{Err:e}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ConvertError(e error) *RpcError{
|
||||||
|
if e == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &RpcError{Err:e.Error()}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Errorf(format string, a ...interface{}) *RpcError {
|
||||||
|
return NewRpcError(fmt.Sprintf(format,a...))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
type RpcMethodInfo struct {
|
type RpcMethodInfo struct {
|
||||||
method reflect.Method
|
method reflect.Method
|
||||||
iparam interface{}
|
iparam interface{}
|
||||||
@@ -157,10 +182,11 @@ func (slf *RpcHandler) HandlerRpcResponeCB(call *Call){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
||||||
v,ok := slf.mapfunctons[request.ServiceMethod]
|
v,ok := slf.mapfunctons[request.ServiceMethod]
|
||||||
if ok == false {
|
if ok == false {
|
||||||
err := fmt.Errorf("RpcHandler %s cannot find %s",slf.rpcHandler.GetName(),request.ServiceMethod)
|
err := Errorf("RpcHandler %s cannot find %s",slf.rpcHandler.GetName(),request.ServiceMethod)
|
||||||
log.Error("%s",err.Error())
|
log.Error("%s",err.Error())
|
||||||
if request.requestHandle!=nil {
|
if request.requestHandle!=nil {
|
||||||
request.requestHandle(nil,err)
|
request.requestHandle(nil,err)
|
||||||
@@ -174,7 +200,7 @@ func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
|||||||
if request.localParam==nil{
|
if request.localParam==nil{
|
||||||
err = processor.Unmarshal(request.InParam,&v.iparam)
|
err = processor.Unmarshal(request.InParam,&v.iparam)
|
||||||
if err!=nil {
|
if err!=nil {
|
||||||
rerr := fmt.Errorf("Call Rpc %s Param error %+v",request.ServiceMethod,err)
|
rerr := Errorf("Call Rpc %s Param error %+v",request.ServiceMethod,err)
|
||||||
log.Error("%s",rerr.Error())
|
log.Error("%s",rerr.Error())
|
||||||
if request.requestHandle!=nil {
|
if request.requestHandle!=nil {
|
||||||
request.requestHandle(nil, rerr)
|
request.requestHandle(nil, rerr)
|
||||||
@@ -199,7 +225,7 @@ func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if request.requestHandle!=nil {
|
if request.requestHandle!=nil {
|
||||||
request.requestHandle(oParam.Interface(), err)
|
request.requestHandle(oParam.Interface(), ConvertError(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -120,15 +120,19 @@ func (agent *RpcAgent) Run() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if req.NoReply == false {
|
if req.NoReply == false {
|
||||||
req.requestHandle = func(Returns interface{},Err error){
|
req.requestHandle = func(Returns interface{},Err *RpcError){
|
||||||
var rpcRespone RpcResponse
|
var rpcRespone RpcResponse
|
||||||
rpcRespone.Seq = req.Seq
|
rpcRespone.Seq = req.Seq
|
||||||
rpcRespone.Err = Err
|
rpcRespone.Err = Err
|
||||||
if Err==nil {
|
if Err==nil {
|
||||||
rpcRespone.Returns,rpcRespone.Err = processor.Marshal(Returns)
|
rpcRespone.Returns,err = processor.Marshal(Returns)
|
||||||
|
if err!= nil {
|
||||||
|
rpcRespone.Err = ConvertError(err)
|
||||||
|
}
|
||||||
|
//rpcRespone.Returns, = processor.Marshal(Returns)
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes,err := processor.Marshal(rpcRespone)
|
bytes,err := processor.Marshal(&rpcRespone)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("service method %s Marshal error:%+v!", req.ServiceMethod,err)
|
log.Error("service method %s Marshal error:%+v!", req.ServiceMethod,err)
|
||||||
return
|
return
|
||||||
@@ -208,7 +212,7 @@ func (slf *Server) rpcHandlerGo(noReply bool,mutiCoroutine bool,handlerName stri
|
|||||||
req.NoReply = noReply
|
req.NoReply = noReply
|
||||||
|
|
||||||
if noReply == false {
|
if noReply == false {
|
||||||
req.requestHandle = func(Returns interface{},Err error){
|
req.requestHandle = func(Returns interface{},Err *RpcError){
|
||||||
pCall.Err = Err
|
pCall.Err = Err
|
||||||
pCall.done <- pCall
|
pCall.done <- pCall
|
||||||
}
|
}
|
||||||
@@ -244,7 +248,7 @@ func (slf *Server) rpcHandlerAsyncGo(callerRpcHandler IRpcHandler,noReply bool,m
|
|||||||
req.MutiCoroutine = mutiCoroutine
|
req.MutiCoroutine = mutiCoroutine
|
||||||
|
|
||||||
if noReply == false {
|
if noReply == false {
|
||||||
req.requestHandle = func(Returns interface{},Err error){
|
req.requestHandle = func(Returns interface{},Err *RpcError){
|
||||||
pCall.Err = Err
|
pCall.Err = Err
|
||||||
if Returns!=nil {
|
if Returns!=nil {
|
||||||
pCall.Reply = Returns
|
pCall.Reply = Returns
|
||||||
|
|||||||
Reference in New Issue
Block a user