This is an automated email from the ASF dual-hosted git repository. dmwangnima pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git
The following commit(s) were added to refs/heads/main by this push: new f38eecac Add a sample about triple protocol with idl and pb (#713) f38eecac is described below commit f38eecac81b5e7225a6719bb03ea42d6b91f9c70 Author: Tom <56171752+flying-...@users.noreply.github.com> AuthorDate: Tue Mar 12 14:24:12 2024 +0800 Add a sample about triple protocol with idl and pb (#713) * Implement rpc-triple with pb and pb2 * Add integrate test for rpc/triple/pb(2) * Remove README * Update dubbo-go to v3.2.0-rc1 --- go.mod | 2 +- go.sum | 2 + .../rpc/triple/pb/tests/integration/main_test.go | 46 +++++ .../triple/pb/tests/integration/pbprovider_test.go | 39 ++++ .../rpc/triple/pb2/tests/integration/main_test.go | 46 +++++ .../pb2/tests/integration/pb2provider_test.go | 40 ++++ rpc/triple/pb/go-client/cmd/main.go | 63 ++++++ rpc/triple/pb/go-server/cmd/main.go | 71 +++++++ rpc/triple/pb/proto/greet.pb.go | 230 +++++++++++++++++++++ rpc/triple/pb/proto/greet.proto | 34 +++ rpc/triple/pb/proto/greet.triple.go | 122 +++++++++++ rpc/triple/pb2/go-client/cmd/main.go | 64 ++++++ rpc/triple/pb2/go-server/cmd/main.go | 71 +++++++ rpc/triple/pb2/proto/greet.pb.go | 229 ++++++++++++++++++++ rpc/triple/pb2/proto/greet.proto | 34 +++ rpc/triple/pb2/proto/greet.triple.go | 122 +++++++++++ start_integrate_test.sh | 2 + 17 files changed, 1216 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 9827ce84..6ea26fd5 100644 --- a/go.mod +++ b/go.mod @@ -1,7 +1,7 @@ module github.com/apache/dubbo-go-samples require ( - dubbo.apache.org/dubbo-go/v3 v3.1.1-0.20240202021041-198504bb0029 + dubbo.apache.org/dubbo-go/v3 v3.2.0-rc1 github.com/SkyAPM/go2sky v1.5.0 github.com/SkyAPM/go2sky-plugins/dubbo-go v0.0.0-20220718123631-cb8f743b16cf github.com/apache/dubbo-go-hessian2 v1.12.2 diff --git a/go.sum b/go.sum index 434d366a..72c1901d 100644 --- a/go.sum +++ b/go.sum @@ -602,6 +602,8 @@ dubbo.apache.org/dubbo-go/v3 v3.0.2-0.20220508105316-b27ec53b7bab/go.mod h1:Ytn9 dubbo.apache.org/dubbo-go/v3 v3.0.2/go.mod h1:bODgByAf72kzG/5YIfZIODXx81pY3gaAdIQ8B4mN/Yk= dubbo.apache.org/dubbo-go/v3 v3.1.1-0.20240202021041-198504bb0029 h1:+5r/DyxObRS5gUkyyojGBl/QHs8zIkmX45F0hTjciL4= dubbo.apache.org/dubbo-go/v3 v3.1.1-0.20240202021041-198504bb0029/go.mod h1:Aq4YRQHYH5rF6NpeYzPfjTdwhVTOBd5BhdXXstl7EZE= +dubbo.apache.org/dubbo-go/v3 v3.2.0-rc1 h1:31t/KezZ7R9TYpnsQkqSa15chW3UxWEvn41erKmsvrc= +dubbo.apache.org/dubbo-go/v3 v3.2.0-rc1/go.mod h1:4otARIJhwkOBWdRMlOpWLCJ45LR2tu9GhtEkMU5kXyg= gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= diff --git a/integrate_test/rpc/triple/pb/tests/integration/main_test.go b/integrate_test/rpc/triple/pb/tests/integration/main_test.go new file mode 100644 index 00000000..d548dd30 --- /dev/null +++ b/integrate_test/rpc/triple/pb/tests/integration/main_test.go @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package integration + +import ( + "os" + "testing" + + "dubbo.apache.org/dubbo-go/v3/client" + _ "dubbo.apache.org/dubbo-go/v3/imports" + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb/proto" +) + +var greetService greet.GreetService + +func TestMain(m *testing.M) { + cli, err := client.NewClient( + client.WithClientURL("127.0.0.1:20000"), + ) + if err != nil { + panic(err) + } + + greetService, err = greet.NewGreetService(cli) + + if err != nil { + panic(err) + } + + os.Exit(m.Run()) +} diff --git a/integrate_test/rpc/triple/pb/tests/integration/pbprovider_test.go b/integrate_test/rpc/triple/pb/tests/integration/pbprovider_test.go new file mode 100644 index 00000000..4cb02445 --- /dev/null +++ b/integrate_test/rpc/triple/pb/tests/integration/pbprovider_test.go @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package integration + +import ( + "context" + "testing" + + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb/proto" + "github.com/stretchr/testify/assert" +) + +func TestConnectWithGRPC(t *testing.T) { + req := &greet.GreetRequest{ + Name: "dubbo:pb", + } + + ctx := context.Background() + + reply, err := greetService.Greet(ctx, req) + + assert.Nil(t, err) + assert.Equal(t, "dubbo:pb", reply.Greeting) +} diff --git a/integrate_test/rpc/triple/pb2/tests/integration/main_test.go b/integrate_test/rpc/triple/pb2/tests/integration/main_test.go new file mode 100644 index 00000000..e5566e7c --- /dev/null +++ b/integrate_test/rpc/triple/pb2/tests/integration/main_test.go @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package integration + +import ( + "os" + "testing" + + "dubbo.apache.org/dubbo-go/v3/client" + _ "dubbo.apache.org/dubbo-go/v3/imports" + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb2/proto" +) + +var greetService greet.GreetService + +func TestMain(m *testing.M) { + cli, err := client.NewClient( + client.WithClientURL("127.0.0.1:20000"), + ) + if err != nil { + panic(err) + } + + greetService, err = greet.NewGreetService(cli) + + if err != nil { + panic(err) + } + + os.Exit(m.Run()) +} diff --git a/integrate_test/rpc/triple/pb2/tests/integration/pb2provider_test.go b/integrate_test/rpc/triple/pb2/tests/integration/pb2provider_test.go new file mode 100644 index 00000000..b33c0508 --- /dev/null +++ b/integrate_test/rpc/triple/pb2/tests/integration/pb2provider_test.go @@ -0,0 +1,40 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package integration + +import ( + "context" + "testing" + + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb2/proto" + "github.com/stretchr/testify/assert" +) + +func TestConnectWithGRPC(t *testing.T) { + name_str := "dubbo:pb" + req := &greet.GreetRequest{ + Name: &name_str, + } + + ctx := context.Background() + + reply, err := greetService.Greet(ctx, req) + + assert.Nil(t, err) + assert.Equal(t, name_str, *reply.Greeting) +} diff --git a/rpc/triple/pb/go-client/cmd/main.go b/rpc/triple/pb/go-client/cmd/main.go new file mode 100644 index 00000000..1b9070d5 --- /dev/null +++ b/rpc/triple/pb/go-client/cmd/main.go @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "context" + + "dubbo.apache.org/dubbo-go/v3" + "dubbo.apache.org/dubbo-go/v3/client" + "dubbo.apache.org/dubbo-go/v3/common/constant" + _ "dubbo.apache.org/dubbo-go/v3/imports" + "dubbo.apache.org/dubbo-go/v3/registry" + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb/proto" + "github.com/dubbogo/gost/log/logger" +) + +func main() { + ins, err := dubbo.NewInstance( + dubbo.WithName("dubbo_rpc_triple_pb_client"), + dubbo.WithRegistry( + registry.WithZookeeper(), + registry.WithAddress("127.0.0.1:2181"), + ), + ) + if err != nil { + panic(err) + } + + cli, err := ins.NewClient( + client.WithClientProtocolTriple(), + client.WithClientSerialization(constant.ProtobufSerialization), + ) + + if err != nil { + panic(err) + } + + svc, err := greet.NewGreetService(cli) + if err != nil { + panic(err) + } + + resp, err := svc.Greet(context.Background(), &greet.GreetRequest{Name: "hello world"}) + if err != nil { + logger.Error(err) + } + logger.Infof("Greet response: %s", resp) +} diff --git a/rpc/triple/pb/go-server/cmd/main.go b/rpc/triple/pb/go-server/cmd/main.go new file mode 100644 index 00000000..8608780c --- /dev/null +++ b/rpc/triple/pb/go-server/cmd/main.go @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "context" + + "dubbo.apache.org/dubbo-go/v3" + _ "dubbo.apache.org/dubbo-go/v3/imports" + "dubbo.apache.org/dubbo-go/v3/protocol" + "dubbo.apache.org/dubbo-go/v3/registry" + "dubbo.apache.org/dubbo-go/v3/server" + + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb/proto" + + "github.com/dubbogo/gost/log/logger" +) + +type GreetTripleServer struct { +} + +func (srv *GreetTripleServer) Greet(ctx context.Context, req *greet.GreetRequest) (*greet.GreetResponse, error) { + resp := &greet.GreetResponse{Greeting: req.Name} + return resp, nil +} + +func main() { + ins, err := dubbo.NewInstance( + dubbo.WithName("dubbo_rpc_triple_pb_server"), + dubbo.WithRegistry( + registry.WithZookeeper(), + registry.WithAddress("127.0.0.1:2181"), + ), + ) + if err != nil { + panic(err) + } + + srv, err := ins.NewServer( + server.WithServerProtocol( + protocol.WithTriple(), + protocol.WithPort(20000), + ), + ) + if err != nil { + panic(err) + } + + if err := greet.RegisterGreetServiceHandler(srv, &GreetTripleServer{}); err != nil { + panic(err) + } + + if err := srv.Serve(); err != nil { + logger.Error(err) + } +} diff --git a/rpc/triple/pb/proto/greet.pb.go b/rpc/triple/pb/proto/greet.pb.go new file mode 100644 index 00000000..a2b25c6b --- /dev/null +++ b/rpc/triple/pb/proto/greet.pb.go @@ -0,0 +1,230 @@ +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.29.0 +// protoc v4.25.0 +// source: greet.proto + +package greet + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GreetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *GreetRequest) Reset() { + *x = GreetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_greet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GreetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GreetRequest) ProtoMessage() {} + +func (x *GreetRequest) ProtoReflect() protoreflect.Message { + mi := &file_greet_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GreetRequest.ProtoReflect.Descriptor instead. +func (*GreetRequest) Descriptor() ([]byte, []int) { + return file_greet_proto_rawDescGZIP(), []int{0} +} + +func (x *GreetRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type GreetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Greeting string `protobuf:"bytes,1,opt,name=greeting,proto3" json:"greeting,omitempty"` +} + +func (x *GreetResponse) Reset() { + *x = GreetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_greet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GreetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GreetResponse) ProtoMessage() {} + +func (x *GreetResponse) ProtoReflect() protoreflect.Message { + mi := &file_greet_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GreetResponse.ProtoReflect.Descriptor instead. +func (*GreetResponse) Descriptor() ([]byte, []int) { + return file_greet_proto_rawDescGZIP(), []int{1} +} + +func (x *GreetResponse) GetGreeting() string { + if x != nil { + return x.Greeting + } + return "" +} + +var File_greet_proto protoreflect.FileDescriptor + +var file_greet_proto_rawDesc = []byte{ + 0x0a, 0x0b, 0x67, 0x72, 0x65, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x67, + 0x72, 0x65, 0x65, 0x74, 0x22, 0x22, 0x0a, 0x0c, 0x47, 0x72, 0x65, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x47, 0x72, 0x65, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x65, + 0x65, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72, 0x65, + 0x65, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x44, 0x0a, 0x0c, 0x47, 0x72, 0x65, 0x65, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x47, 0x72, 0x65, 0x65, 0x74, 0x12, 0x13, + 0x2e, 0x67, 0x72, 0x65, 0x65, 0x74, 0x2e, 0x47, 0x72, 0x65, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x65, 0x74, 0x2e, 0x47, 0x72, 0x65, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3e, 0x5a, 0x3c, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x67, 0x6f, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x62, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x67, 0x72, 0x65, 0x65, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_greet_proto_rawDescOnce sync.Once + file_greet_proto_rawDescData = file_greet_proto_rawDesc +) + +func file_greet_proto_rawDescGZIP() []byte { + file_greet_proto_rawDescOnce.Do(func() { + file_greet_proto_rawDescData = protoimpl.X.CompressGZIP(file_greet_proto_rawDescData) + }) + return file_greet_proto_rawDescData +} + +var file_greet_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_greet_proto_goTypes = []interface{}{ + (*GreetRequest)(nil), // 0: greet.GreetRequest + (*GreetResponse)(nil), // 1: greet.GreetResponse +} +var file_greet_proto_depIdxs = []int32{ + 0, // 0: greet.GreetService.Greet:input_type -> greet.GreetRequest + 1, // 1: greet.GreetService.Greet:output_type -> greet.GreetResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_greet_proto_init() } +func file_greet_proto_init() { + if File_greet_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_greet_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GreetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_greet_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GreetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_greet_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_greet_proto_goTypes, + DependencyIndexes: file_greet_proto_depIdxs, + MessageInfos: file_greet_proto_msgTypes, + }.Build() + File_greet_proto = out.File + file_greet_proto_rawDesc = nil + file_greet_proto_goTypes = nil + file_greet_proto_depIdxs = nil +} diff --git a/rpc/triple/pb/proto/greet.proto b/rpc/triple/pb/proto/greet.proto new file mode 100644 index 00000000..476d3069 --- /dev/null +++ b/rpc/triple/pb/proto/greet.proto @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; + +package greet; + +option go_package = "github.com/apache/dubbo-go-samples/rpc/triple/pb/proto;greet"; + +message GreetRequest { + string name = 1; +} + +message GreetResponse { + string greeting = 1; +} + +service GreetService { + rpc Greet(GreetRequest) returns (GreetResponse) {} +} \ No newline at end of file diff --git a/rpc/triple/pb/proto/greet.triple.go b/rpc/triple/pb/proto/greet.triple.go new file mode 100644 index 00000000..ca199223 --- /dev/null +++ b/rpc/triple/pb/proto/greet.triple.go @@ -0,0 +1,122 @@ +// Code generated by protoc-gen-triple. DO NOT EDIT. +// +// Source: greet.proto +package greet + +import ( + "context" +) + +import ( + "dubbo.apache.org/dubbo-go/v3" + "dubbo.apache.org/dubbo-go/v3/client" + "dubbo.apache.org/dubbo-go/v3/common" + "dubbo.apache.org/dubbo-go/v3/common/constant" + "dubbo.apache.org/dubbo-go/v3/protocol/triple/triple_protocol" + "dubbo.apache.org/dubbo-go/v3/server" +) + +// This is a compile-time assertion to ensure that this generated file and the Triple package +// are compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of Triple newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of Triple or updating the Triple +// version compiled into your binary. +const _ = triple_protocol.IsAtLeastVersion0_1_0 + +const ( + // GreetServiceName is the fully-qualified name of the GreetService service. + GreetServiceName = "greet.GreetService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // GreetServiceGreetProcedure is the fully-qualified name of the GreetService's Greet RPC. + GreetServiceGreetProcedure = "/greet.GreetService/Greet" +) + +var ( + _ GreetService = (*GreetServiceImpl)(nil) +) + +// GreetService is a client for the greet.GreetService service. +type GreetService interface { + Greet(ctx context.Context, req *GreetRequest, opts ...client.CallOption) (*GreetResponse, error) +} + +// NewGreetService constructs a client for the greet.GreetService service. +func NewGreetService(cli *client.Client, opts ...client.ReferenceOption) (GreetService, error) { + conn, err := cli.DialWithInfo("greet.GreetService", &GreetService_ClientInfo, opts...) + if err != nil { + return nil, err + } + return &GreetServiceImpl{ + conn: conn, + }, nil +} + +func SetConsumerService(srv common.RPCService) { + dubbo.SetConsumerServiceWithInfo(srv, &GreetService_ClientInfo) +} + +// GreetServiceImpl implements GreetService. +type GreetServiceImpl struct { + conn *client.Connection +} + +func (c *GreetServiceImpl) Greet(ctx context.Context, req *GreetRequest, opts ...client.CallOption) (*GreetResponse, error) { + resp := new(GreetResponse) + if err := c.conn.CallUnary(ctx, []interface{}{req}, resp, "Greet", opts...); err != nil { + return nil, err + } + return resp, nil +} + +var GreetService_ClientInfo = client.ClientInfo{ + InterfaceName: "greet.GreetService", + MethodNames: []string{"Greet"}, + ConnectionInjectFunc: func(dubboCliRaw interface{}, conn *client.Connection) { + dubboCli := dubboCliRaw.(*GreetServiceImpl) + dubboCli.conn = conn + }, +} + +// GreetServiceHandler is an implementation of the greet.GreetService service. +type GreetServiceHandler interface { + Greet(context.Context, *GreetRequest) (*GreetResponse, error) +} + +func RegisterGreetServiceHandler(srv *server.Server, hdlr GreetServiceHandler, opts ...server.ServiceOption) error { + return srv.Register(hdlr, &GreetService_ServiceInfo, opts...) +} + +func SetProviderService(srv common.RPCService) { + dubbo.SetProviderServiceWithInfo(srv, &GreetService_ServiceInfo) +} + +var GreetService_ServiceInfo = server.ServiceInfo{ + InterfaceName: "greet.GreetService", + ServiceType: (*GreetServiceHandler)(nil), + Methods: []server.MethodInfo{ + { + Name: "Greet", + Type: constant.CallUnary, + ReqInitFunc: func() interface{} { + return new(GreetRequest) + }, + MethodFunc: func(ctx context.Context, args []interface{}, handler interface{}) (interface{}, error) { + req := args[0].(*GreetRequest) + res, err := handler.(GreetServiceHandler).Greet(ctx, req) + if err != nil { + return nil, err + } + return triple_protocol.NewResponse(res), nil + }, + }, + }, +} diff --git a/rpc/triple/pb2/go-client/cmd/main.go b/rpc/triple/pb2/go-client/cmd/main.go new file mode 100644 index 00000000..56753936 --- /dev/null +++ b/rpc/triple/pb2/go-client/cmd/main.go @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "context" + + "dubbo.apache.org/dubbo-go/v3" + "dubbo.apache.org/dubbo-go/v3/client" + "dubbo.apache.org/dubbo-go/v3/common/constant" + _ "dubbo.apache.org/dubbo-go/v3/imports" + "dubbo.apache.org/dubbo-go/v3/registry" + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb2/proto" + "github.com/dubbogo/gost/log/logger" +) + +func main() { + ins, err := dubbo.NewInstance( + dubbo.WithName("dubbo_rpc_triple_pb2_client"), + dubbo.WithRegistry( + registry.WithZookeeper(), + registry.WithAddress("127.0.0.1:2181"), + ), + ) + if err != nil { + panic(err) + } + + cli, err := ins.NewClient( + client.WithClientProtocolTriple(), + client.WithClientSerialization(constant.ProtobufSerialization), + ) + + if err != nil { + panic(err) + } + + svc, err := greet.NewGreetService(cli) + if err != nil { + panic(err) + } + + name_str := "hello world" + resp, err := svc.Greet(context.Background(), &greet.GreetRequest{Name: &name_str}) + if err != nil { + logger.Error(err) + } + logger.Infof("Greet response: %s", resp) +} diff --git a/rpc/triple/pb2/go-server/cmd/main.go b/rpc/triple/pb2/go-server/cmd/main.go new file mode 100644 index 00000000..aad81bc2 --- /dev/null +++ b/rpc/triple/pb2/go-server/cmd/main.go @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "context" + + "dubbo.apache.org/dubbo-go/v3" + _ "dubbo.apache.org/dubbo-go/v3/imports" + "dubbo.apache.org/dubbo-go/v3/protocol" + "dubbo.apache.org/dubbo-go/v3/registry" + "dubbo.apache.org/dubbo-go/v3/server" + + greet "github.com/apache/dubbo-go-samples/rpc/triple/pb2/proto" + + "github.com/dubbogo/gost/log/logger" +) + +type GreetTripleServer struct { +} + +func (srv *GreetTripleServer) Greet(ctx context.Context, req *greet.GreetRequest) (*greet.GreetResponse, error) { + resp := &greet.GreetResponse{Greeting: req.Name} + return resp, nil +} + +func main() { + ins, err := dubbo.NewInstance( + dubbo.WithName("dubbo_rpc_triple_pb2_server"), + dubbo.WithRegistry( + registry.WithZookeeper(), + registry.WithAddress("127.0.0.1:2181"), + ), + ) + if err != nil { + panic(err) + } + + srv, err := ins.NewServer( + server.WithServerProtocol( + protocol.WithTriple(), + protocol.WithPort(20000), + ), + ) + if err != nil { + panic(err) + } + + if err := greet.RegisterGreetServiceHandler(srv, &GreetTripleServer{}); err != nil { + panic(err) + } + + if err := srv.Serve(); err != nil { + logger.Error(err) + } +} diff --git a/rpc/triple/pb2/proto/greet.pb.go b/rpc/triple/pb2/proto/greet.pb.go new file mode 100644 index 00000000..90ad775a --- /dev/null +++ b/rpc/triple/pb2/proto/greet.pb.go @@ -0,0 +1,229 @@ +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.29.0 +// protoc v4.25.0 +// source: greet.proto + +package greet + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GreetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"` +} + +func (x *GreetRequest) Reset() { + *x = GreetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_greet_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GreetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GreetRequest) ProtoMessage() {} + +func (x *GreetRequest) ProtoReflect() protoreflect.Message { + mi := &file_greet_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GreetRequest.ProtoReflect.Descriptor instead. +func (*GreetRequest) Descriptor() ([]byte, []int) { + return file_greet_proto_rawDescGZIP(), []int{0} +} + +func (x *GreetRequest) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +type GreetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Greeting *string `protobuf:"bytes,1,req,name=greeting" json:"greeting,omitempty"` +} + +func (x *GreetResponse) Reset() { + *x = GreetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_greet_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GreetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GreetResponse) ProtoMessage() {} + +func (x *GreetResponse) ProtoReflect() protoreflect.Message { + mi := &file_greet_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GreetResponse.ProtoReflect.Descriptor instead. +func (*GreetResponse) Descriptor() ([]byte, []int) { + return file_greet_proto_rawDescGZIP(), []int{1} +} + +func (x *GreetResponse) GetGreeting() string { + if x != nil && x.Greeting != nil { + return *x.Greeting + } + return "" +} + +var File_greet_proto protoreflect.FileDescriptor + +var file_greet_proto_rawDesc = []byte{ + 0x0a, 0x0b, 0x67, 0x72, 0x65, 0x65, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x67, + 0x72, 0x65, 0x65, 0x74, 0x22, 0x22, 0x0a, 0x0c, 0x47, 0x72, 0x65, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x2b, 0x0a, 0x0d, 0x47, 0x72, 0x65, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x65, + 0x65, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72, 0x65, + 0x65, 0x74, 0x69, 0x6e, 0x67, 0x32, 0x44, 0x0a, 0x0c, 0x47, 0x72, 0x65, 0x65, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x47, 0x72, 0x65, 0x65, 0x74, 0x12, 0x13, + 0x2e, 0x67, 0x72, 0x65, 0x65, 0x74, 0x2e, 0x47, 0x72, 0x65, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x67, 0x72, 0x65, 0x65, 0x74, 0x2e, 0x47, 0x72, 0x65, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x3f, 0x5a, 0x3d, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, + 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x67, 0x6f, 0x2d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x2f, 0x70, 0x62, 0x32, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x67, 0x72, 0x65, 0x65, 0x74, +} + +var ( + file_greet_proto_rawDescOnce sync.Once + file_greet_proto_rawDescData = file_greet_proto_rawDesc +) + +func file_greet_proto_rawDescGZIP() []byte { + file_greet_proto_rawDescOnce.Do(func() { + file_greet_proto_rawDescData = protoimpl.X.CompressGZIP(file_greet_proto_rawDescData) + }) + return file_greet_proto_rawDescData +} + +var file_greet_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_greet_proto_goTypes = []interface{}{ + (*GreetRequest)(nil), // 0: greet.GreetRequest + (*GreetResponse)(nil), // 1: greet.GreetResponse +} +var file_greet_proto_depIdxs = []int32{ + 0, // 0: greet.GreetService.Greet:input_type -> greet.GreetRequest + 1, // 1: greet.GreetService.Greet:output_type -> greet.GreetResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_greet_proto_init() } +func file_greet_proto_init() { + if File_greet_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_greet_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GreetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_greet_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GreetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_greet_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_greet_proto_goTypes, + DependencyIndexes: file_greet_proto_depIdxs, + MessageInfos: file_greet_proto_msgTypes, + }.Build() + File_greet_proto = out.File + file_greet_proto_rawDesc = nil + file_greet_proto_goTypes = nil + file_greet_proto_depIdxs = nil +} diff --git a/rpc/triple/pb2/proto/greet.proto b/rpc/triple/pb2/proto/greet.proto new file mode 100644 index 00000000..012b8533 --- /dev/null +++ b/rpc/triple/pb2/proto/greet.proto @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto2"; + +package greet; + +option go_package = "github.com/apache/dubbo-go-samples/rpc/triple/pb2/proto;greet"; + +message GreetRequest { + required string name = 1; +} + +message GreetResponse { + required string greeting = 1; +} + +service GreetService { + rpc Greet(GreetRequest) returns (GreetResponse) {} +} \ No newline at end of file diff --git a/rpc/triple/pb2/proto/greet.triple.go b/rpc/triple/pb2/proto/greet.triple.go new file mode 100644 index 00000000..ca199223 --- /dev/null +++ b/rpc/triple/pb2/proto/greet.triple.go @@ -0,0 +1,122 @@ +// Code generated by protoc-gen-triple. DO NOT EDIT. +// +// Source: greet.proto +package greet + +import ( + "context" +) + +import ( + "dubbo.apache.org/dubbo-go/v3" + "dubbo.apache.org/dubbo-go/v3/client" + "dubbo.apache.org/dubbo-go/v3/common" + "dubbo.apache.org/dubbo-go/v3/common/constant" + "dubbo.apache.org/dubbo-go/v3/protocol/triple/triple_protocol" + "dubbo.apache.org/dubbo-go/v3/server" +) + +// This is a compile-time assertion to ensure that this generated file and the Triple package +// are compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of Triple newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of Triple or updating the Triple +// version compiled into your binary. +const _ = triple_protocol.IsAtLeastVersion0_1_0 + +const ( + // GreetServiceName is the fully-qualified name of the GreetService service. + GreetServiceName = "greet.GreetService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // GreetServiceGreetProcedure is the fully-qualified name of the GreetService's Greet RPC. + GreetServiceGreetProcedure = "/greet.GreetService/Greet" +) + +var ( + _ GreetService = (*GreetServiceImpl)(nil) +) + +// GreetService is a client for the greet.GreetService service. +type GreetService interface { + Greet(ctx context.Context, req *GreetRequest, opts ...client.CallOption) (*GreetResponse, error) +} + +// NewGreetService constructs a client for the greet.GreetService service. +func NewGreetService(cli *client.Client, opts ...client.ReferenceOption) (GreetService, error) { + conn, err := cli.DialWithInfo("greet.GreetService", &GreetService_ClientInfo, opts...) + if err != nil { + return nil, err + } + return &GreetServiceImpl{ + conn: conn, + }, nil +} + +func SetConsumerService(srv common.RPCService) { + dubbo.SetConsumerServiceWithInfo(srv, &GreetService_ClientInfo) +} + +// GreetServiceImpl implements GreetService. +type GreetServiceImpl struct { + conn *client.Connection +} + +func (c *GreetServiceImpl) Greet(ctx context.Context, req *GreetRequest, opts ...client.CallOption) (*GreetResponse, error) { + resp := new(GreetResponse) + if err := c.conn.CallUnary(ctx, []interface{}{req}, resp, "Greet", opts...); err != nil { + return nil, err + } + return resp, nil +} + +var GreetService_ClientInfo = client.ClientInfo{ + InterfaceName: "greet.GreetService", + MethodNames: []string{"Greet"}, + ConnectionInjectFunc: func(dubboCliRaw interface{}, conn *client.Connection) { + dubboCli := dubboCliRaw.(*GreetServiceImpl) + dubboCli.conn = conn + }, +} + +// GreetServiceHandler is an implementation of the greet.GreetService service. +type GreetServiceHandler interface { + Greet(context.Context, *GreetRequest) (*GreetResponse, error) +} + +func RegisterGreetServiceHandler(srv *server.Server, hdlr GreetServiceHandler, opts ...server.ServiceOption) error { + return srv.Register(hdlr, &GreetService_ServiceInfo, opts...) +} + +func SetProviderService(srv common.RPCService) { + dubbo.SetProviderServiceWithInfo(srv, &GreetService_ServiceInfo) +} + +var GreetService_ServiceInfo = server.ServiceInfo{ + InterfaceName: "greet.GreetService", + ServiceType: (*GreetServiceHandler)(nil), + Methods: []server.MethodInfo{ + { + Name: "Greet", + Type: constant.CallUnary, + ReqInitFunc: func() interface{} { + return new(GreetRequest) + }, + MethodFunc: func(ctx context.Context, args []interface{}, handler interface{}) (interface{}, error) { + req := args[0].(*GreetRequest) + res, err := handler.(GreetServiceHandler).Greet(ctx, req) + if err != nil { + return nil, err + } + return triple_protocol.NewResponse(res), nil + }, + }, + }, +} diff --git a/start_integrate_test.sh b/start_integrate_test.sh index 87c17581..0de5c295 100755 --- a/start_integrate_test.sh +++ b/start_integrate_test.sh @@ -81,6 +81,8 @@ array+=("compatibility/rpc/jsonrpc") array+=("compatibility/rpc/triple/pb2") array+=("rpc/grpc") +array+=("rpc/triple/pb") +array+=("rpc/triple/pb2") # tls #array+=("compatibility/tls/dubbo")# tls.LoadX509KeyPair(certs{../../../x509/server1_cert.pem}, privateKey{../../../x509/server1_key.pem}) = err:open ../../../x509/server1_cert.pem: no such file or directory