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)
+}