diff --git a/common/proxy/proxy_factory/default.go b/common/proxy/proxy_factory/default.go index 33d4dcc71ef0c9f3bce2d048e58bb7d202a19976..882288e9658adc1af96f88b4ac69ea297bcf1f99 100644 --- a/common/proxy/proxy_factory/default.go +++ b/common/proxy/proxy_factory/default.go @@ -70,9 +70,11 @@ type ProxyInvoker struct { func (pi *ProxyInvoker) Invoke(invocation protocol.Invocation) protocol.Result { result := &protocol.RPCResult{} + url := pi.GetUrl().SubURL + methodName := invocation.MethodName() - proto := pi.GetUrl().Protocol - path := strings.TrimPrefix(pi.GetUrl().Path, "/") + proto := url.Protocol + path := strings.TrimPrefix(url.Path, "/") args := invocation.Arguments() // get service diff --git a/examples/general/dubbo/go-client/app/client.go b/examples/general/dubbo/go-client/app/client.go index 60adad356b8a8ff843034dd8e6086a2b832c7792..ad160576690e51e722af0a27f03ef9e6b559c7c9 100644 --- a/examples/general/dubbo/go-client/app/client.go +++ b/examples/general/dubbo/go-client/app/client.go @@ -33,9 +33,9 @@ import ( "github.com/apache/dubbo-go/common/logger" _ "github.com/apache/dubbo-go/common/proxy/proxy_factory" "github.com/apache/dubbo-go/config" - _ "github.com/apache/dubbo-go/registry/protocol" - _ "github.com/apache/dubbo-go/filter/impl" + _ "github.com/apache/dubbo-go/protocol/dubbo" + _ "github.com/apache/dubbo-go/registry/protocol" _ "github.com/apache/dubbo-go/cluster/cluster_impl" _ "github.com/apache/dubbo-go/cluster/loadbalance" @@ -95,18 +95,18 @@ func println(format string, args ...interface{}) { } func test() { - println("\n\n\necho") - res, err := userProvider.Echo(context.TODO(), "OK") - if err != nil { - panic(err) - } - println("res: %v\n", res) + //println("\n\n\necho") + //res, err := userProvider.Echo(context.TODO(), "OK") + //if err != nil { + // panic(err) + //} + //println("res: %v\n", res) time.Sleep(3e9) println("\n\n\nstart to test dubbo") user := &User{} - err = userProvider.GetUser(context.TODO(), []interface{}{"A003"}, user) + err := userProvider.GetUser(context.TODO(), []interface{}{"A003"}, user) if err != nil { panic(err) } @@ -168,7 +168,7 @@ func test1() { time.Sleep(3e9) - println("\n\n\nstart to test dubbo") + println("\n\n\nstart to test1 dubbo") user := &User{} err = userProvider1.GetUser(context.TODO(), []interface{}{"A003"}, user) if err != nil { @@ -176,7 +176,7 @@ func test1() { } println("response result: %v", user) - println("\n\n\nstart to test dubbo - GetUser0") + println("\n\n\nstart to test1 dubbo - GetUser0") ret, err := userProvider1.GetUser0("A003", "Moorse") if err != nil { panic(err) @@ -190,7 +190,7 @@ func test1() { } println("response result: %v", ret1) - println("\n\n\nstart to test dubbo - getUser") + println("\n\n\nstart to test1 dubbo - getUser") user = &User{} var i int32 = 1 err = userProvider1.GetUser2(context.TODO(), []interface{}{i}, user) @@ -206,7 +206,7 @@ func test1() { } println("succ!") - println("\n\n\nstart to test dubbo - getErr") + println("\n\n\nstart to test1 dubbo - getErr") user = &User{} err = userProvider1.GetErr(context.TODO(), []interface{}{"A003"}, user) if err == nil { @@ -214,7 +214,7 @@ func test1() { } println("getErr - error: %v", err) - println("\n\n\nstart to test dubbo illegal method") + println("\n\n\nstart to test1 dubbo illegal method") err = userProvider1.GetUser1(context.TODO(), []interface{}{"A003"}, user) if err == nil { panic("err is nil") @@ -232,7 +232,7 @@ func test2() { time.Sleep(3e9) - println("\n\n\nstart to test dubbo") + println("\n\n\nstart to test2 dubbo") user := &User{} err = userProvider2.GetUser(context.TODO(), []interface{}{"A003"}, user) if err != nil { @@ -240,21 +240,21 @@ func test2() { } println("response result: %v", user) - println("\n\n\nstart to test dubbo - GetUser0") + println("\n\n\nstart to test2 dubbo - GetUser0") ret, err := userProvider2.GetUser0("A003", "Moorse") if err != nil { panic(err) } println("response result: %v", ret) - println("\n\n\nstart to test dubbo - GetUsers") + println("\n\n\nstart to test2 dubbo - GetUsers") ret1, err := userProvider2.GetUsers([]interface{}{[]interface{}{"A002", "A003"}}) if err != nil { panic(err) } println("response result: %v", ret1) - println("\n\n\nstart to test dubbo - getUser") + println("\n\n\nstart to test2 dubbo - getUser") user = &User{} var i int32 = 1 err = userProvider2.GetUser2(context.TODO(), []interface{}{i}, user) @@ -263,14 +263,14 @@ func test2() { } println("response result: %v", user) - println("\n\n\nstart to test dubbo - GetUser3") + println("\n\n\nstart to test2 dubbo - GetUser3") err = userProvider2.GetUser3() if err != nil { panic(err) } println("succ!") - println("\n\n\nstart to test dubbo - getErr") + println("\n\n\nstart to test2 dubbo - getErr") user = &User{} err = userProvider2.GetErr(context.TODO(), []interface{}{"A003"}, user) if err == nil { @@ -278,7 +278,7 @@ func test2() { } println("getErr - error: %v", err) - println("\n\n\nstart to test dubbo illegal method") + println("\n\n\nstart to test2 dubbo illegal method") err = userProvider2.GetUser1(context.TODO(), []interface{}{"A003"}, user) if err == nil { panic("err is nil") diff --git a/protocol/dubbo/listener.go b/protocol/dubbo/listener.go index 60432ee0350f7bac345cd1fd8bb1e85e0880bf0e..096358d8ba0e8a07e730e6a2012baba6583ba5cb 100644 --- a/protocol/dubbo/listener.go +++ b/protocol/dubbo/listener.go @@ -220,12 +220,13 @@ func (h *RpcServerHandler) OnMessage(session getty.Session, pkg interface{}) { logger.Errorf("OnMessage panic: %+v, this is impossible.", e) p.Body = e } - } - if !twoway { - return + if !twoway { + return + } + h.reply(session, p, hessian.PackageResponse) } - h.reply(session, p, hessian.PackageResponse) + }() u := common.NewURLWithOptions(common.WithPath(p.Service.Path), common.WithParams(url.Values{}), diff --git a/registry/protocol/protocol.go b/registry/protocol/protocol.go index ff33b5fe6e063257c12035f3262e0daae874363e..e416e3af24a11244eff54b3bef7e40fa6d3c9749 100644 --- a/registry/protocol/protocol.go +++ b/registry/protocol/protocol.go @@ -200,3 +200,6 @@ func (ivk *wrappedInvoker) GetUrl() common.URL { func (ivk *wrappedInvoker) getInvoker() protocol.Invoker { return ivk.invoker } +func (ivk *wrappedInvoker) Invoke(invocation protocol.Invocation) protocol.Result { + return ivk.invoker.Invoke(invocation) +}