diff --git a/examples/dubbo/go-client/app/client.go b/examples/dubbo/go-client/app/client.go index 5231457f7d21cc62b93a630df24584743832b980..c95654267dd6ba2a8400888e0fcb6d299fad0cf8 100644 --- a/examples/dubbo/go-client/app/client.go +++ b/examples/dubbo/go-client/app/client.go @@ -83,6 +83,13 @@ func main() { } println("response result: %v", ret) + println("\n\n\nstart to test dubbo - GetUsers") + ret1, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUsers([]interface{}{[]interface{}{"A002", "A003"}}) + if err != nil { + panic(err) + } + println("response result: %v", ret1) + println("\n\n\nstart to test dubbo - getUser") user = &User{} err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user) diff --git a/examples/dubbo/go-client/app/user.go b/examples/dubbo/go-client/app/user.go index 9ac1974d3e7ac2cebfe6c7cadd369a27a7853a62..7e9d3daedf756b79318160995ace0d8222b39b05 100644 --- a/examples/dubbo/go-client/app/user.go +++ b/examples/dubbo/go-client/app/user.go @@ -93,6 +93,7 @@ func (User) JavaClassName() string { } type UserProvider struct { + GetUsers func(req []interface{}) ([]interface{}, error) GetUser func(ctx context.Context, req []interface{}, rsp *User) error GetUser0 func(id string, name string) (User, error) GetUser1 func(ctx context.Context, req []interface{}, rsp *User) error diff --git a/examples/dubbo/go-client/profiles/dev/client.yml b/examples/dubbo/go-client/profiles/dev/client.yml index 5e58f4cc65d4b17411fb97f24c4b714fb7921ce0..93ce354c9c65682d393619a6afa1ae449b96660d 100644 --- a/examples/dubbo/go-client/profiles/dev/client.yml +++ b/examples/dubbo/go-client/profiles/dev/client.yml @@ -62,5 +62,5 @@ protocol_conf: tcp_read_timeout: "1s" tcp_write_timeout: "5s" wait_timeout: "1s" - max_msg_len: 1024 + max_msg_len: 10240 session_name: "client" diff --git a/examples/dubbo/go-client/profiles/release/client.yml b/examples/dubbo/go-client/profiles/release/client.yml index 269e9cbacbe4f1757ab8d9cc0ddeb46241020c5d..cb36b6946c3d5c637e291c47e34a779aaf427553 100644 --- a/examples/dubbo/go-client/profiles/release/client.yml +++ b/examples/dubbo/go-client/profiles/release/client.yml @@ -62,5 +62,5 @@ protocol_conf: tcp_read_timeout: "1s" tcp_write_timeout: "5s" wait_timeout: "1s" - max_msg_len: 1024 + max_msg_len: 10240 session_name: "client" diff --git a/examples/dubbo/go-client/profiles/test/client.yml b/examples/dubbo/go-client/profiles/test/client.yml index 269e9cbacbe4f1757ab8d9cc0ddeb46241020c5d..cb36b6946c3d5c637e291c47e34a779aaf427553 100644 --- a/examples/dubbo/go-client/profiles/test/client.yml +++ b/examples/dubbo/go-client/profiles/test/client.yml @@ -62,5 +62,5 @@ protocol_conf: tcp_read_timeout: "1s" tcp_write_timeout: "5s" wait_timeout: "1s" - max_msg_len: 1024 + max_msg_len: 10240 session_name: "client" diff --git a/examples/dubbo/go-server/app/user.go b/examples/dubbo/go-server/app/user.go index 12119b0b6d2bf909cc2605fc83ac263e2c97cebf..427125bd1329668c24e9dc46a94d55cfb362a472 100644 --- a/examples/dubbo/go-server/app/user.go +++ b/examples/dubbo/go-server/app/user.go @@ -156,6 +156,25 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) { return *user, err } +func (u *UserProvider) GetUsers(req []interface{}) ([]interface{}, error) { + var err error + + println("req:%s", req) + t := req[0].([]interface{}) + user, err := u.getUser(t[0].(string)) + if err != nil { + return nil, err + } + println("user:%v", user) + user1, err := u.getUser(t[1].(string)) + if err != nil { + return nil, err + } + println("user1:%v", user1) + + return []interface{}{user, user1}, err +} + func (u *UserProvider) Service() string { return "com.ikurento.user.UserProvider" } 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 69229943fcda3aae24970fb5ad7f05736696790a..b410813c74a7432cbbe1f2e7627faba9ebb17e70 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 @@ -79,7 +79,7 @@ public class Consumer { //鍚姩consumer鐨勫叆鍙e嚱鏁�(鍦ㄩ厤缃枃浠朵腑鎸囧畾) public void start() throws Exception { testGetUser(); - // testGetUsers(); + testGetUsers(); // Thread.sleep(120000); Thread.sleep(2000); } diff --git a/examples/jsonrpc/go-client/app/client.go b/examples/jsonrpc/go-client/app/client.go index b693d05eef7d2db57489d4d382fc265e658ab5e6..b71f0efa20243ddf2635c56ee0eca7340db6ce03 100644 --- a/examples/jsonrpc/go-client/app/client.go +++ b/examples/jsonrpc/go-client/app/client.go @@ -72,13 +72,20 @@ func main() { } println("response result: %v", user) - println("\n\n\nstart to test dubbo - GetUser0") + println("\n\n\nstart to test jsonrpc - GetUser0") ret, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser0("A003", "Moorse") if err != nil { panic(err) } println("response result: %v", ret) + println("\n\n\nstart to test jsonrpc - GetUsers") + ret1, err := conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUsers([]interface{}{[]interface{}{"A002", "A003"}}) + if err != nil { + panic(err) + } + println("response result: %v", ret1) + println("\n\n\nstart to test jsonrpc - getUser") user = &JsonRPCUser{} err = conMap["com.ikurento.user.UserProvider"].GetRPCService().(*UserProvider).GetUser2(context.TODO(), []interface{}{1}, user) diff --git a/examples/jsonrpc/go-client/app/user.go b/examples/jsonrpc/go-client/app/user.go index 17a24dbec781f28245ebdf899d4f0004ff5e2da5..0d159876125a19bb9c75fbd21d893942763a67c8 100644 --- a/examples/jsonrpc/go-client/app/user.go +++ b/examples/jsonrpc/go-client/app/user.go @@ -44,6 +44,7 @@ func (u JsonRPCUser) String() string { } type UserProvider struct { + GetUsers func(req []interface{}) ([]JsonRPCUser, error) GetUser func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error GetUser0 func(id string, name string) (JsonRPCUser, error) GetUser1 func(ctx context.Context, req []interface{}, rsp *JsonRPCUser) error diff --git a/examples/jsonrpc/go-server/app/user.go b/examples/jsonrpc/go-server/app/user.go index 5adcde0ccc7135735314d0e65a98aac75ce08366..9170de431a719351ee1e1af4e5c6bbcd4cbfde62 100644 --- a/examples/jsonrpc/go-server/app/user.go +++ b/examples/jsonrpc/go-server/app/user.go @@ -124,6 +124,25 @@ func (u *UserProvider) GetUser0(id string, name string) (User, error) { return *user, err } +func (u *UserProvider) GetUsers(req []interface{}) ([]User, error) { + var err error + + println("req:%s", req) + t := req[0].([]interface{}) + user, err := u.getUser(t[0].(string)) + if err != nil { + return nil, err + } + println("user:%v", user) + user1, err := u.getUser(t[1].(string)) + if err != nil { + return nil, err + } + println("user1:%v", user1) + + return []User{*user, *user1}, err +} + func (u *UserProvider) Service() string { return "com.ikurento.user.UserProvider" } 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 832f78e8553c5c55ea7f7d15566ddee7ac1268de..b2b8e95f94b5112721e12bf738b05bdd3bd9c419 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 @@ -83,7 +83,7 @@ public class Consumer { //鍚姩consumer鐨勫叆鍙e嚱鏁�(鍦ㄩ厤缃枃浠朵腑鎸囧畾) public void start() throws Exception { testGetUser(); - // testGetUsers(); + testGetUsers(); // Thread.sleep(120000); Thread.sleep(2000); } diff --git a/go.mod b/go.mod index e41f9906871337b822fd19ce18b91059420f38de..b03fcd5e5850d0b292089d2c7cbe89dcd943bbef 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/dubbo/go-for-apache-dubbo require ( github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53 - github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d + github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3 github.com/pkg/errors v0.8.1 github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec github.com/stretchr/testify v1.3.0 diff --git a/go.sum b/go.sum index d53a88c491d4d2f8d6d6fe7626d0bb829eb86a6c..e7f6c3037ce0171e7c8f34b1fd4e3099a68c6072 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53 h1:bniSNoC4xnAbrx4estwc9F0qkWnh6ZDsAS0y9d7mPos= github.com/dubbogo/getty v0.0.0-20190523180329-bdf5e640ea53/go.mod h1:cRMSuoCmwc5lULFFnYZTxyCfZhObmRTNbS7XRnPNHSo= -github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d h1:t4xwsC+7Vqh/a9IvNQehzI6coThd7+DLi5MKdleFA64= -github.com/dubbogo/hessian2 v0.0.0-20190521184416-2dbe10487e1d/go.mod h1:XFGDn4oSZX26zkcfhkM/fCJrOqwQJxk/xgWW1KMJBKM= +github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3 h1:qK0t4cWXFAng5VoPRdvnUyRyB9TdE+Q7G3ROOEY86tE= +github.com/dubbogo/hessian2 v0.0.0-20190525165532-d994415a90c3/go.mod h1:XFGDn4oSZX26zkcfhkM/fCJrOqwQJxk/xgWW1KMJBKM= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= diff --git a/protocol/dubbo/client_test.go b/protocol/dubbo/client_test.go index 2938f569d59ae2b85035170183d672fa0854bd39..216d2e10dd2fafb5decb08856ea2258b661004c7 100644 --- a/protocol/dubbo/client_test.go +++ b/protocol/dubbo/client_test.go @@ -16,13 +16,13 @@ package dubbo import ( "context" + "github.com/dubbogo/hessian2" "sync" "testing" "time" ) import ( - "github.com/dubbogo/hessian2" perrors "github.com/pkg/errors" "github.com/stretchr/testify/assert" ) @@ -79,6 +79,26 @@ func TestClient_Call(t *testing.T) { assert.NoError(t, err) assert.Equal(t, User{Id: "1", Name: "username"}, *user) + user = &User{} + err = c.Call("127.0.0.1:20000", url, "GetUser1", []interface{}{"1", "username"}, user) + assert.EqualError(t, err, "java exception:error") + + user2 := []interface{}{} + err = c.Call("127.0.0.1:20000", url, "GetUser2", []interface{}{"1", "username"}, &user2) + assert.NoError(t, err) + assert.Equal(t, &User{Id: "1", Name: "username"}, user2[0]) + + user2 = []interface{}{} + err = c.Call("127.0.0.1:20000", url, "GetUser3", []interface{}{[]interface{}{"1", "username"}}, &user2) + assert.NoError(t, err) + assert.Equal(t, &User{Id: "1", Name: "username"}, user2[0]) + + user3 := map[interface{}]interface{}{} + err = c.Call("127.0.0.1:20000", url, "GetUser4", []interface{}{map[interface{}]interface{}{"id": "1", "name": "username"}}, &user3) + assert.NoError(t, err) + assert.NotNil(t, user3) + assert.Equal(t, &User{Id: "1", Name: "username"}, user3["key"]) + // destroy proto.Destroy() } @@ -114,7 +134,7 @@ func InitTest(t *testing.T) (protocol.Protocol, common.URL) { methods, err := common.ServiceMap.Register("dubbo", &UserProvider{}) assert.NoError(t, err) - assert.Equal(t, "GetUser,GetUser0,GetUser1", methods) + assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3,GetUser4", methods) // config SetClientConf(ClientConfig{ @@ -191,6 +211,20 @@ func (u *UserProvider) GetUser1(ctx context.Context, req []interface{}, rsp *Use return perrors.New("error") } +func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *[]interface{}) error { + *rsp = append(*rsp, User{Id: req[0].(string), Name: req[1].(string)}) + return nil +} + +func (u *UserProvider) GetUser3(ctx context.Context, req []interface{}) ([]interface{}, error) { + + return []interface{}{User{Id: req[0].([]interface{})[0].(string), Name: req[0].([]interface{})[1].(string)}}, nil +} + +func (u *UserProvider) GetUser4(ctx context.Context, req []interface{}) (map[interface{}]interface{}, error) { + return map[interface{}]interface{}{"key": User{Id: req[0].(map[interface{}]interface{})["id"].(string), Name: req[0].(map[interface{}]interface{})["name"].(string)}}, nil +} + func (u *UserProvider) Service() string { return "com.ikurento.user.UserProvider" } diff --git a/protocol/jsonrpc/http_test.go b/protocol/jsonrpc/http_test.go index e70d5b83fdfa72be519dd61df5e4b358452bb40f..55f86f454e89bc16f409abfa141508207b749279 100644 --- a/protocol/jsonrpc/http_test.go +++ b/protocol/jsonrpc/http_test.go @@ -47,7 +47,7 @@ func TestHTTPClient_Call(t *testing.T) { methods, err := common.ServiceMap.Register("jsonrpc", &UserProvider{}) assert.NoError(t, err) - assert.Equal(t, "GetUser,GetUser0,GetUser1", methods) + assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3", methods) // Export proto := GetProtocol() @@ -75,7 +75,7 @@ func TestHTTPClient_Call(t *testing.T) { assert.Equal(t, "1", reply.Id) assert.Equal(t, "username", reply.Name) - // call GetUser + // call GetUser0 ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{ "X-Proxy-Id": "dubbogo", "X-Services": url.Path, @@ -100,6 +100,30 @@ func TestHTTPClient_Call(t *testing.T) { assert.True(t, strings.Contains(err.Error(), "500 Internal Server Error")) assert.True(t, strings.Contains(err.Error(), "\\\"result\\\":{},\\\"error\\\":{\\\"code\\\":-32000,\\\"message\\\":\\\"error\\\"}")) + // call GetUser2 + ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{ + "X-Proxy-Id": "dubbogo", + "X-Services": url.Path, + "X-Method": "GetUser", + }) + req = client.NewRequest(url, "GetUser2", []interface{}{"1", "username"}) + reply1 := []User{} + err = client.Call(ctx, url, req, &reply1) + assert.NoError(t, err) + assert.Equal(t, User{Id: "1", Name: "username"}, reply1[0]) + + // call GetUser3 + ctx = context.WithValue(context.Background(), constant.DUBBOGO_CTX_KEY, map[string]string{ + "X-Proxy-Id": "dubbogo", + "X-Services": url.Path, + "X-Method": "GetUser", + }) + req = client.NewRequest(url, "GetUser3", []interface{}{"1", "username"}) + reply1 = []User{} + err = client.Call(ctx, url, req, &reply1) + assert.NoError(t, err) + assert.Equal(t, User{Id: "1", Name: "username"}, reply1[0]) + // destroy proto.Destroy() @@ -119,6 +143,15 @@ func (u *UserProvider) GetUser1(ctx context.Context, req []interface{}, rsp *Use return perrors.New("error") } +func (u *UserProvider) GetUser2(ctx context.Context, req []interface{}, rsp *[]User) error { + *rsp = append(*rsp, User{Id: req[0].(string), Name: req[1].(string)}) + return nil +} + +func (u *UserProvider) GetUser3(ctx context.Context, req []interface{}) ([]User, error) { + return []User{{Id: req[0].(string), Name: req[1].(string)}}, nil +} + func (u *UserProvider) Service() string { return "com.ikurento.user.UserProvider" } diff --git a/protocol/jsonrpc/jsonrpc_invoker_test.go b/protocol/jsonrpc/jsonrpc_invoker_test.go index 3bc4a29af755f74e864f9c5159afda85a907f9d9..2d248469e2bb35edb1708901615c444a0d712dd0 100644 --- a/protocol/jsonrpc/jsonrpc_invoker_test.go +++ b/protocol/jsonrpc/jsonrpc_invoker_test.go @@ -34,7 +34,7 @@ func TestJsonrpcInvoker_Invoke(t *testing.T) { methods, err := common.ServiceMap.Register("jsonrpc", &UserProvider{}) assert.NoError(t, err) - assert.Equal(t, "GetUser,GetUser0,GetUser1", methods) + assert.Equal(t, "GetUser,GetUser0,GetUser1,GetUser2,GetUser3", methods) // Export proto := GetProtocol()