diff --git a/common/proxy/proxy.go b/common/proxy/proxy.go index 8a2b65c6bf71271be77923da7baf766a770ea415..6c42dab8fd7173f3ba1919ca8721201d690002df 100644 --- a/common/proxy/proxy.go +++ b/common/proxy/proxy.go @@ -82,6 +82,10 @@ func (p *Proxy) Implement(v common.RPCService) { numField := valueOfElem.NumField() for i := 0; i < numField; i++ { t := typeOf.Field(i) + methodName := t.Tag.Get("dubbo") + if methodName == "" { + methodName = t.Name + } f := valueOfElem.Field(i) if f.Kind() == reflect.Func && f.IsValid() && f.CanSet() { if t.Type.NumIn() != 2 && t.Type.NumIn() != 3 { @@ -115,8 +119,8 @@ func (p *Proxy) Implement(v common.RPCService) { funcOuts[0] = t.Type.Out(0) // do method proxy here: - f.Set(reflect.MakeFunc(f.Type(), makeDubboCallProxy(t.Name, funcOuts))) - log.Debug("set method [%s]", t.Name) + f.Set(reflect.MakeFunc(f.Type(), makeDubboCallProxy(methodName, funcOuts))) + log.Debug("set method [%s]", methodName) } } diff --git a/common/proxy/proxy_test.go b/common/proxy/proxy_test.go index 8a7c8c880c564664c849096d242320e09708f5fb..8720298aa6372108f8b6ebbb6dbef707db38fecc 100644 --- a/common/proxy/proxy_test.go +++ b/common/proxy/proxy_test.go @@ -17,9 +17,10 @@ import ( ) type TestService struct { - MethodOne func(context.Context, []interface{}, *struct{}) error - MethodTwo func([]interface{}, *struct{}) error - Echo func([]interface{}, *struct{}) error + MethodOne func(context.Context, []interface{}, *struct{}) error + MethodTwo func([]interface{}, *struct{}) error + MethodThree func([]interface{}, *struct{}) error `dubbo:"methodThree"` + Echo func([]interface{}, *struct{}) error } func (s *TestService) Service() string { @@ -48,6 +49,8 @@ func TestProxy_Implement(t *testing.T) { assert.NoError(t, err) err = p.Get().(*TestService).MethodTwo(nil, nil) assert.NoError(t, err) + err = p.Get().(*TestService).MethodThree(nil, nil) + assert.NoError(t, err) err = p.Get().(*TestService).Echo(nil, nil) assert.NoError(t, err) diff --git a/examples/dubbo/go-client/app/client.go b/examples/dubbo/go-client/app/client.go index ddec042d7b4619db65ce2a6de83a244df24b3e37..3632a0e723a5bf2eb2912f604f4ed6893c37a889 100644 --- a/examples/dubbo/go-client/app/client.go +++ b/examples/dubbo/go-client/app/client.go @@ -69,6 +69,14 @@ func main() { } gxlog.CInfo("response result: %v", user) + gxlog.CInfo("\n\n\nstart to test dubbo - getUser") + user = &User{} + err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user) + if err != nil { + fmt.Println("getUser - error: ", err) + } + gxlog.CInfo("response result: %v", user) + gxlog.CInfo("\n\n\nstart to test dubbo illegal method") err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser1(context.TODO(), []interface{}{"A003"}, user) if err != nil { diff --git a/examples/dubbo/go-client/app/user.go b/examples/dubbo/go-client/app/user.go index 1195115961fbf9551508f0cd27861bf6c42ea0d3..1dd100ce436becc03e55abf6981b5b92136b354b 100644 --- a/examples/dubbo/go-client/app/user.go +++ b/examples/dubbo/go-client/app/user.go @@ -78,6 +78,7 @@ func (User) JavaClassName() string { type UserProvider struct { GetUser func(ctx context.Context, req []interface{}, rsp *User) error GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error + GetUser2 func(ctx context.Context, req []interface{}, rsp *User) error `dubbo:"getUser"` Echo func(ctx context.Context, req []interface{}, rsp *string) error // Echo represent EchoFilter will be used } diff --git a/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java b/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java index 5830ac716e8d2ea6a72b3c5921f29a734796a997..c04acefbe25fc1f1110de9c27d0ef0fb36721d74 100644 --- a/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java +++ b/examples/dubbo/java-client/src/main/java/com/ikurento/user/Consumer.java @@ -13,6 +13,7 @@ package com.ikurento.user; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import com.alibaba.dubbo.rpc.service.EchoService; import java.util.List; public class Consumer { @@ -39,6 +40,9 @@ public class Consumer { private void testGetUser() throws Exception { try { + EchoService echoService = (EchoService)userProvider; + Object status = echoService.$echo("OK"); + System.out.println("echo: "+status); User user1 = userProvider.GetUser("A003"); System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " + " UserInfo, Id:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString() diff --git a/examples/dubbo/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml b/examples/dubbo/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml index bdbd84417e55ee8c53e5e5d4cc011514ad70663a..b3a1b19d6764ca6db895719709412c07b348f13e 100644 --- a/examples/dubbo/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml +++ b/examples/dubbo/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml @@ -24,12 +24,13 @@ <dubbo:application name="user-info-server"/> <!-- 杩炴帴鍒板摢涓湰鍦版敞鍐屼腑蹇� --> <dubbo:registry id="ikurento" address="zookeeper://127.0.0.1:2181" /> + <dubbo:registry id="ikurento2" address="zookeeper://127.0.0.1:2182" /> <!-- 鐢╠ubbo鍗忚鍦�20880绔彛鏆撮湶鏈嶅姟 --> <!-- dubbo:protocol host="127.0.0.1" / --> <dubbo:protocol id="dubbo" name="dubbo" host="127.0.0.1" port="20010" /> <dubbo:protocol id="jsonrpc" name="jsonrpc" host="127.0.0.1" port="10010" /> <!-- 澹版槑闇€瑕佹毚闇茬殑鏈嶅姟鎺ュ彛 --> - <dubbo:service registry="ikurento" timeout="3000" interface="com.ikurento.user.UserProvider" ref="demoService"/> + <dubbo:service registry="ikurento,ikurento2" timeout="3000" interface="com.ikurento.user.UserProvider" ref="demoService"/> <dubbo:service registry="ikurento" timeout="3000" interface="com.ikurento.user.UserProvider" ref="otherService" version="2.0"/> <dubbo:service registry="ikurento" timeout="3000" interface="com.ikurento.user.UserProvider" ref="otherService" group="as" version="2.0"/> diff --git a/examples/jsonrpc/go-client/app/client.go b/examples/jsonrpc/go-client/app/client.go index cb8ca19239c8cb8166f536802a693563f34c2c47..5eb6babb2dd276e1bd8dc3b476a49dbf9aa3fdfc 100644 --- a/examples/jsonrpc/go-client/app/client.go +++ b/examples/jsonrpc/go-client/app/client.go @@ -50,7 +50,7 @@ func main() { res := "" err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).Echo(context.TODO(), []interface{}{"OK"}, &res) if err != nil { - panic(err) + fmt.Println("echo - error: ", err) } gxlog.CInfo("res: %s", res) @@ -64,6 +64,14 @@ func main() { } gxlog.CInfo("response result: %v", user) + gxlog.CInfo("\n\n\nstart to test jsonrpc - getUser") + user = &JsonRPCUser{} + err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user) + if err != nil { + fmt.Println("getUser - error: ", err) + } + gxlog.CInfo("response result: %v", user) + gxlog.CInfo("\n\n\nstart to test jsonrpc illegal method") err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser1(context.TODO(), []interface{}{"A003"}, user) if err != nil { diff --git a/examples/jsonrpc/go-client/app/user.go b/examples/jsonrpc/go-client/app/user.go index 5030f81031bfb86b2fa59d7930afd4b18e794a6f..20a62a010638c5813157a09a9d8186c0d81c0281 100644 --- a/examples/jsonrpc/go-client/app/user.go +++ b/examples/jsonrpc/go-client/app/user.go @@ -32,7 +32,8 @@ func (u JsonRPCUser) String() string { type UserProvider struct { GetUser func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error GetUser1 func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error - Echo func(ctx context.Context, req []interface{}, rsp *string) error // Echo represent EchoFilter will be used + GetUser2 func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error `dubbo:"getUser"` + Echo func(ctx context.Context, req []interface{}, rsp *string) error // Echo represent EchoFilter will be used } func (u *UserProvider) Service() string { diff --git a/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java b/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java index 5830ac716e8d2ea6a72b3c5921f29a734796a997..a9e5aaa51fe0a4bb5a3ee31b36cfb46cac5a6122 100644 --- a/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java +++ b/examples/jsonrpc/java-client/src/main/java/com/ikurento/user/Consumer.java @@ -13,6 +13,7 @@ package com.ikurento.user; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import com.alibaba.dubbo.rpc.service.EchoService; import java.util.List; public class Consumer { @@ -39,6 +40,16 @@ public class Consumer { private void testGetUser() throws Exception { try { + EchoService echoService = (EchoService)userProvider; + Object status = echoService.$echo("OK"); + System.out.println("echo: "+status); + } catch (Exception e) { + e.printStackTrace(); + } + try { + EchoService echoService = (EchoService)userProvider; + Object status = echoService.$echo("OK"); + System.out.println("echo: "+status); User user1 = userProvider.GetUser("A003"); System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] " + " UserInfo, Id:" + user1.getId() + ", name:" + user1.getName() + ", sex:" + user1.getSex().toString() diff --git a/examples/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml b/examples/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml index bdbd84417e55ee8c53e5e5d4cc011514ad70663a..b3a1b19d6764ca6db895719709412c07b348f13e 100644 --- a/examples/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml +++ b/examples/jsonrpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml @@ -24,12 +24,13 @@ <dubbo:application name="user-info-server"/> <!-- 杩炴帴鍒板摢涓湰鍦版敞鍐屼腑蹇� --> <dubbo:registry id="ikurento" address="zookeeper://127.0.0.1:2181" /> + <dubbo:registry id="ikurento2" address="zookeeper://127.0.0.1:2182" /> <!-- 鐢╠ubbo鍗忚鍦�20880绔彛鏆撮湶鏈嶅姟 --> <!-- dubbo:protocol host="127.0.0.1" / --> <dubbo:protocol id="dubbo" name="dubbo" host="127.0.0.1" port="20010" /> <dubbo:protocol id="jsonrpc" name="jsonrpc" host="127.0.0.1" port="10010" /> <!-- 澹版槑闇€瑕佹毚闇茬殑鏈嶅姟鎺ュ彛 --> - <dubbo:service registry="ikurento" timeout="3000" interface="com.ikurento.user.UserProvider" ref="demoService"/> + <dubbo:service registry="ikurento,ikurento2" timeout="3000" interface="com.ikurento.user.UserProvider" ref="demoService"/> <dubbo:service registry="ikurento" timeout="3000" interface="com.ikurento.user.UserProvider" ref="otherService" version="2.0"/> <dubbo:service registry="ikurento" timeout="3000" interface="com.ikurento.user.UserProvider" ref="otherService" group="as" version="2.0"/>