This is an automated email from the ASF dual-hosted git repository.

joezou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git

commit 7e1b8b12e991828c973eeb29c42939aa8c33d6ad
Author: 382673...@qq.com <382673...@qq.com>
AuthorDate: Fri Oct 16 17:35:13 2020 +0800

    feat: add grpc stream sample
---
 general/grpc/{ => stream}/go-client/app/Makefile   |   0
 general/grpc/{ => stream}/go-client/app/client.go  |  75 +++-
 general/grpc/{ => stream}/go-client/app/hello.go   |  11 +-
 general/grpc/stream/go-client/app/helloworld.pb.go | 472 +++++++++++++++++++++
 .../{ => stream}/go-client/app/helloworld.proto    |   4 +-
 .../{go-server => stream/go-client}/app/version.go |   0
 .../{ => stream}/go-client/assembly/bin/load.sh    |   0
 .../go-client/assembly/common/app.properties       |   0
 .../go-client/assembly/common/build.sh             |   0
 .../{ => stream}/go-client/assembly/linux/dev.sh   |   0
 .../go-client/assembly/linux/release.sh            |   0
 .../{ => stream}/go-client/assembly/linux/test.sh  |   0
 .../{ => stream}/go-client/assembly/mac/dev.sh     |   0
 .../{ => stream}/go-client/assembly/mac/release.sh |   0
 .../{ => stream}/go-client/assembly/mac/test.sh    |   0
 .../{ => stream}/go-client/assembly/windows/dev.sh |   0
 .../go-client/assembly/windows/release.sh          |   0
 .../go-client/assembly/windows/test.sh             |   0
 .../{ => stream}/go-client/profiles/dev/client.yml |   0
 .../go-client}/profiles/dev/log.yml                |   0
 .../go-client/profiles/release/client.yml          |   0
 .../go-client}/profiles/release/log.yml            |   0
 .../go-client/profiles/test/client.yml             |   0
 .../go-client}/profiles/test/log.yml               |   0
 general/grpc/stream/go-server/app/greeter.go       | 101 +++++
 general/grpc/stream/go-server/app/helloworld.pb.go | 472 +++++++++++++++++++++
 .../go-server}/app/helloworld.proto                |   4 +-
 general/grpc/{ => stream}/go-server/app/server.go  |   0
 .../{go-client => stream/go-server}/app/version.go |   0
 .../{ => stream}/go-server/assembly/bin/load.sh    |   0
 .../go-server/assembly/common/app.properties       |   0
 .../go-server/assembly/common/build.sh             |   0
 .../{ => stream}/go-server/assembly/linux/dev.sh   |   0
 .../go-server/assembly/linux/release.sh            |   0
 .../{ => stream}/go-server/assembly/linux/test.sh  |   0
 .../{ => stream}/go-server/assembly/mac/dev.sh     |   0
 .../{ => stream}/go-server/assembly/mac/release.sh |   0
 .../{ => stream}/go-server/assembly/mac/test.sh    |   0
 .../{ => stream}/go-server/assembly/windows/dev.sh |   0
 .../go-server/assembly/windows/release.sh          |   0
 .../go-server/assembly/windows/test.sh             |   0
 .../go-server}/profiles/dev/log.yml                |   0
 .../{ => stream}/go-server/profiles/dev/server.yml |   0
 .../go-server}/profiles/release/log.yml            |   0
 .../go-server/profiles/release/server.yml          |   0
 .../go-server}/profiles/test/log.yml               |   0
 .../go-server/profiles/test/server.yml             |   0
 general/grpc/{ => unary}/go-client/app/Makefile    |   0
 general/grpc/{ => unary}/go-client/app/client.go   |  13 +-
 general/grpc/{ => unary}/go-client/app/hello.go    |   0
 .../go-client}/app/helloworld.pb.go                |   0
 .../go-client}/app/helloworld.proto                |   0
 .../{go-server => unary/go-client}/app/version.go  |   0
 .../{ => unary}/go-client/assembly/bin/load.sh     |   0
 .../go-client/assembly/common/app.properties       |   0
 .../{ => unary}/go-client/assembly/common/build.sh |   0
 .../{ => unary}/go-client/assembly/linux/dev.sh    |   0
 .../go-client/assembly/linux/release.sh            |   0
 .../{ => unary}/go-client/assembly/linux/test.sh   |   0
 .../grpc/{ => unary}/go-client/assembly/mac/dev.sh |   0
 .../{ => unary}/go-client/assembly/mac/release.sh  |   0
 .../{ => unary}/go-client/assembly/mac/test.sh     |   0
 .../{ => unary}/go-client/assembly/windows/dev.sh  |   0
 .../go-client/assembly/windows/release.sh          |   0
 .../{ => unary}/go-client/assembly/windows/test.sh |   0
 .../{ => unary}/go-client/profiles/dev/client.yml  |   0
 .../go-client}/profiles/dev/log.yml                |   0
 .../go-client/profiles/release/client.yml          |   0
 .../go-client}/profiles/release/log.yml            |   0
 .../{ => unary}/go-client/profiles/test/client.yml |   0
 .../go-client}/profiles/test/log.yml               |   0
 general/grpc/{ => unary}/go-server/app/greeter.go  |   0
 .../go-server}/app/helloworld.pb.go                |   0
 .../go-server}/app/helloworld.proto                |   0
 general/grpc/{ => unary}/go-server/app/server.go   |   0
 general/grpc/{ => unary}/go-server/app/version.go  |   0
 .../{ => unary}/go-server/assembly/bin/load.sh     |   0
 .../go-server/assembly/common/app.properties       |   0
 .../{ => unary}/go-server/assembly/common/build.sh |   0
 .../{ => unary}/go-server/assembly/linux/dev.sh    |   0
 .../go-server/assembly/linux/release.sh            |   0
 .../{ => unary}/go-server/assembly/linux/test.sh   |   0
 .../grpc/{ => unary}/go-server/assembly/mac/dev.sh |   0
 .../{ => unary}/go-server/assembly/mac/release.sh  |   0
 .../{ => unary}/go-server/assembly/mac/test.sh     |   0
 .../{ => unary}/go-server/assembly/windows/dev.sh  |   0
 .../go-server/assembly/windows/release.sh          |   0
 .../{ => unary}/go-server/assembly/windows/test.sh |   0
 .../{ => unary}/go-server/profiles/dev/log.yml     |   0
 .../{ => unary}/go-server/profiles/dev/server.yml  |   0
 .../{ => unary}/go-server/profiles/release/log.yml |   0
 .../go-server/profiles/release/server.yml          |   0
 .../{ => unary}/go-server/profiles/test/log.yml    |   0
 .../{ => unary}/go-server/profiles/test/server.yml |   0
 general/grpc/{ => unary}/java-client/build.sh      |   0
 general/grpc/{ => unary}/java-client/pom.xml       |   0
 .../java-client/src/main/assembly/assembly.xml     |   0
 .../src/main/assembly/conf/dubbo.properties        |   0
 .../src/main/assembly/conf}/log4j.properties       |   0
 .../src/main/java/com/ikurento/user/Consumer.java  |   0
 .../java-client}/src/main/proto/UserService.proto  |   0
 .../resources/META-INF/spring/dubbo.consumer.xml   |   0
 .../src/main/resources/META-INF/spring/service.xml |   0
 .../src/main/resources}/log4j.properties           |   0
 general/grpc/{ => unary}/java-server/build.sh      |   0
 general/grpc/{ => unary}/java-server/pom.xml       |   0
 .../grpc/{ => unary}/java-server/script/debug.sh   |   0
 .../java-server/src/main/assembly/assembly.xml     |   0
 .../java-server/src/main/assembly/bin/start.bat    |   0
 .../java-server/src/main/assembly/bin/start.sh     |   0
 .../src/main/assembly/conf/dubbo.properties        |   0
 .../src/main/assembly/conf}/log4j.properties       |   0
 .../src/main/java/com/ikurento/user/Provider.java  |   0
 .../java/com/ikurento/user/UserProviderImpl.java   |   0
 .../java-server}/src/main/proto/UserService.proto  |   0
 .../resources/META-INF/spring/dubbo.provider.xml   |   0
 .../src/main/resources}/log4j.properties           |   0
 go.mod                                             |   6 +-
 118 files changed, 1131 insertions(+), 27 deletions(-)

diff --git a/general/grpc/go-client/app/Makefile 
b/general/grpc/stream/go-client/app/Makefile
similarity index 100%
copy from general/grpc/go-client/app/Makefile
copy to general/grpc/stream/go-client/app/Makefile
diff --git a/general/grpc/go-client/app/client.go 
b/general/grpc/stream/go-client/app/client.go
similarity index 56%
copy from general/grpc/go-client/app/client.go
copy to general/grpc/stream/go-client/app/client.go
index d8634b7..4fe3a9f 100644
--- a/general/grpc/go-client/app/client.go
+++ b/general/grpc/stream/go-client/app/client.go
@@ -24,23 +24,26 @@ import (
        "os/signal"
        "syscall"
        "time"
-)
-
-import (
-       "github.com/dubbogo/gost/log"
-)
 
-import (
        _ "github.com/apache/dubbo-go/cluster/cluster_impl"
+
        _ "github.com/apache/dubbo-go/cluster/loadbalance"
        "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/filter/filter_impl"
+
        _ "github.com/apache/dubbo-go/protocol/dubbo"
+
        _ "github.com/apache/dubbo-go/protocol/grpc"
+
        _ "github.com/apache/dubbo-go/registry/protocol"
+
        _ "github.com/apache/dubbo-go/registry/zookeeper"
+
+       gxlog "github.com/dubbogo/gost/log"
 )
 
 var (
@@ -54,16 +57,68 @@ func main() {
        config.Load()
        time.Sleep(time.Second)
 
-       gxlog.CInfo("\n\n\nstart to test dubbo")
+       gxlog.CInfo("\n\n\n===== start to test SayHelloTwoSidesStream ======")
        reply := &HelloReply{}
-       req := &HelloRequest{
-               Name: "xujianhai",
+       stream, err := grpcGreeterImpl.SayHelloTwoSidesStream(context.TODO())
+       if err != nil {
+               logger.Errorf("stream get err = %s", err.Error())
+               return
+       }
+
+       if err := stream.Send(&HelloRequest{Name: "request 1"}); err != nil {
+               logger.Errorf("send stream req err = %s", err.Error())
+       }
+       if err := stream.Send(&HelloRequest{Name: "request 2"}); err != nil {
+               logger.Errorf("send stream req err = %s", err.Error())
        }
-       err := grpcGreeterImpl.SayHello(context.TODO(), req, reply)
+       reply, err = stream.Recv()
        if err != nil {
                panic(err)
        }
        gxlog.CInfo("client response result: %v\n", reply)
+       reply, err = stream.Recv()
+       if err != nil {
+               panic(err)
+       }
+       gxlog.CInfo("client response result: %v\n", reply)
+
+       gxlog.CInfo("\n\n\n===== start to test SayHelloClientStream =====")
+       clientStream, err := 
grpcGreeterImpl.SayHelloClientStream(context.TODO())
+       if err != nil {
+               logger.Errorf("stream get err = %s", err.Error())
+               return
+       }
+
+       if err := clientStream.Send(&HelloRequest{Name: "request 1"}); err != 
nil {
+               logger.Errorf("send stream req err = %s", err.Error())
+       }
+       if err := clientStream.Send(&HelloRequest{Name: "request 2"}); err != 
nil {
+               logger.Errorf("send stream req err = %s", err.Error())
+       }
+       err = clientStream.RecvMsg(reply)
+       if err != nil {
+               panic(err)
+       }
+       gxlog.CInfo("client response result: %v\n", reply)
+
+       gxlog.CInfo("\n\n\n===== start to test SayHelloServerStream =====")
+       req := &HelloRequest{}
+       serverStream, err := 
grpcGreeterImpl.SayHelloServerStream(context.TODO(), req)
+       if err != nil {
+               logger.Errorf("stream get err = %s", err.Error())
+               return
+       }
+       reply, err = serverStream.Recv()
+       if err != nil {
+               panic(err)
+       }
+       gxlog.CInfo("client response result: %v\n", reply)
+       reply, err = serverStream.Recv()
+       if err != nil {
+               panic(err)
+       }
+       gxlog.CInfo("client response result: %v\n", reply)
+
        initSignal()
 }
 
diff --git a/general/grpc/go-client/app/hello.go 
b/general/grpc/stream/go-client/app/hello.go
similarity index 79%
copy from general/grpc/go-client/app/hello.go
copy to general/grpc/stream/go-client/app/hello.go
index f3e6a8f..a427bb0 100644
--- a/general/grpc/go-client/app/hello.go
+++ b/general/grpc/stream/go-client/app/hello.go
@@ -19,14 +19,9 @@ package main
 
 import (
        "context"
-)
 
-import (
-       "google.golang.org/grpc"
-)
-
-import (
        "github.com/apache/dubbo-go/config"
+       "google.golang.org/grpc"
 )
 
 var grpcGreeterImpl = new(GrpcGreeterImpl)
@@ -36,7 +31,9 @@ func init() {
 }
 
 type GrpcGreeterImpl struct {
-       SayHello func(ctx context.Context, in *HelloRequest, out *HelloReply) 
error
+       SayHelloTwoSidesStream func(ctx context.Context) 
(Greeter_SayHelloTwoSidesStreamClient, error)
+       SayHelloClientStream   func(ctx context.Context) 
(Greeter_SayHelloClientStreamClient, error)
+       SayHelloServerStream   func(ctx context.Context, request *HelloRequest) 
(Greeter_SayHelloServerStreamClient, error)
 }
 
 func (u *GrpcGreeterImpl) Reference() string {
diff --git a/general/grpc/stream/go-client/app/helloworld.pb.go 
b/general/grpc/stream/go-client/app/helloworld.pb.go
new file mode 100644
index 0000000..2183a4f
--- /dev/null
+++ b/general/grpc/stream/go-client/app/helloworld.pb.go
@@ -0,0 +1,472 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: helloworld.proto
+
+package main
+
+import (
+       context "context"
+       fmt "fmt"
+       proto "github.com/golang/protobuf/proto"
+       grpc "google.golang.org/grpc"
+       codes "google.golang.org/grpc/codes"
+       status "google.golang.org/grpc/status"
+       math "math"
+)
+
+import (
+       "github.com/apache/dubbo-go/protocol"
+       dgrpc "github.com/apache/dubbo-go/protocol/grpc"
+       "github.com/apache/dubbo-go/protocol/invocation"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The request message containing the user's name.
+type HelloRequest struct {
+       Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" 
json:"name,omitempty"`
+       XXX_NoUnkeyedLiteral struct{} `json:"-"`
+       XXX_unrecognized     []byte   `json:"-"`
+       XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HelloRequest) Reset()         { *m = HelloRequest{} }
+func (m *HelloRequest) String() string { return proto.CompactTextString(m) }
+func (*HelloRequest) ProtoMessage()    {}
+func (*HelloRequest) Descriptor() ([]byte, []int) {
+       return fileDescriptor_17b8c58d586b62f2, []int{0}
+}
+
+func (m *HelloRequest) XXX_Unmarshal(b []byte) error {
+       return xxx_messageInfo_HelloRequest.Unmarshal(m, b)
+}
+func (m *HelloRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, 
error) {
+       return xxx_messageInfo_HelloRequest.Marshal(b, m, deterministic)
+}
+func (m *HelloRequest) XXX_Merge(src proto.Message) {
+       xxx_messageInfo_HelloRequest.Merge(m, src)
+}
+func (m *HelloRequest) XXX_Size() int {
+       return xxx_messageInfo_HelloRequest.Size(m)
+}
+func (m *HelloRequest) XXX_DiscardUnknown() {
+       xxx_messageInfo_HelloRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HelloRequest proto.InternalMessageInfo
+
+func (m *HelloRequest) GetName() string {
+       if m != nil {
+               return m.Name
+       }
+       return ""
+}
+
+// The response message containing the greetings
+type HelloReply struct {
+       Message              string   
`protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+       XXX_NoUnkeyedLiteral struct{} `json:"-"`
+       XXX_unrecognized     []byte   `json:"-"`
+       XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HelloReply) Reset()         { *m = HelloReply{} }
+func (m *HelloReply) String() string { return proto.CompactTextString(m) }
+func (*HelloReply) ProtoMessage()    {}
+func (*HelloReply) Descriptor() ([]byte, []int) {
+       return fileDescriptor_17b8c58d586b62f2, []int{1}
+}
+
+func (m *HelloReply) XXX_Unmarshal(b []byte) error {
+       return xxx_messageInfo_HelloReply.Unmarshal(m, b)
+}
+func (m *HelloReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) 
{
+       return xxx_messageInfo_HelloReply.Marshal(b, m, deterministic)
+}
+func (m *HelloReply) XXX_Merge(src proto.Message) {
+       xxx_messageInfo_HelloReply.Merge(m, src)
+}
+func (m *HelloReply) XXX_Size() int {
+       return xxx_messageInfo_HelloReply.Size(m)
+}
+func (m *HelloReply) XXX_DiscardUnknown() {
+       xxx_messageInfo_HelloReply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HelloReply proto.InternalMessageInfo
+
+func (m *HelloReply) GetMessage() string {
+       if m != nil {
+               return m.Message
+       }
+       return ""
+}
+
+func init() {
+       proto.RegisterType((*HelloRequest)(nil), "main.HelloRequest")
+       proto.RegisterType((*HelloReply)(nil), "main.HelloReply")
+}
+
+func init() { proto.RegisterFile("helloworld.proto", 
fileDescriptor_17b8c58d586b62f2) }
+
+var fileDescriptor_17b8c58d586b62f2 = []byte{
+       // 232 bytes of a gzipped FileDescriptorProto
+       0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 
0xc8, 0x48, 0xcd, 0xc9,
+       0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 
0x17, 0x62, 0xc9, 0x4d,
+       0xcc, 0xcc, 0x53, 0x52, 0xe2, 0xe2, 0xf1, 0x00, 0xc9, 0x04, 0xa5, 0x16, 
0x96, 0xa6, 0x16, 0x97,
+       0x08, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 
0x6a, 0x70, 0x06, 0x81,
+       0xd9, 0x4a, 0x6a, 0x5c, 0x5c, 0x50, 0x35, 0x05, 0x39, 0x95, 0x42, 0x12, 
0x5c, 0xec, 0xb9, 0xa9,
+       0xc5, 0xc5, 0x89, 0xe9, 0x30, 0x45, 0x30, 0xae, 0xd1, 0x65, 0x46, 0x2e, 
0x76, 0xf7, 0xa2, 0xd4,
+       0xd4, 0x92, 0xd4, 0x22, 0x21, 0x17, 0x2e, 0xb1, 0xe0, 0xc4, 0x4a, 0xb0, 
0xb6, 0x90, 0xf2, 0xfc,
+       0xe0, 0xcc, 0x94, 0xd4, 0xe2, 0xe0, 0x92, 0xa2, 0xd4, 0xc4, 0x5c, 0x21, 
0x21, 0x3d, 0x90, 0xc5,
+       0x7a, 0xc8, 0xb6, 0x4a, 0x09, 0xa0, 0x88, 0x15, 0xe4, 0x54, 0x2a, 0x31, 
0x68, 0x30, 0x1a, 0x30,
+       0x0a, 0x39, 0x70, 0x89, 0xc0, 0x4c, 0x71, 0xce, 0xc9, 0x4c, 0xcd, 0x2b, 
0x21, 0xd5, 0x0c, 0x64,
+       0x13, 0x82, 0x53, 0x8b, 0xca, 0x52, 0x8b, 0x48, 0x33, 0xc1, 0x80, 0xd1, 
0xc9, 0x8c, 0x4b, 0x3a,
+       0x33, 0x5f, 0x2f, 0xbd, 0xa8, 0x20, 0x59, 0x2f, 0xb5, 0x22, 0x31, 0xb7, 
0x20, 0x27, 0xb5, 0x58,
+       0x0f, 0x11, 0x98, 0x4e, 0xfc, 0x60, 0xe5, 0xe1, 0x20, 0x76, 0x00, 0x28, 
0x5c, 0x03, 0x18, 0x17,
+       0x31, 0x31, 0x7b, 0xf8, 0x84, 0x27, 0xb1, 0x81, 0x83, 0xd9, 0x18, 0x10, 
0x00, 0x00, 0xff, 0xff,
+       0xe7, 0x0c, 0xb8, 0x0a, 0x7a, 0x01, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// GreeterClient is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please 
refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClient interface {
+       // Sends a greeting
+       SayHelloTwoSidesStream(ctx context.Context, opts ...grpc.CallOption) 
(Greeter_SayHelloTwoSidesStreamClient, error)
+       SayHelloClientStream(ctx context.Context, opts ...grpc.CallOption) 
(Greeter_SayHelloClientStreamClient, error)
+       SayHelloServerStream(ctx context.Context, in *HelloRequest, opts 
...grpc.CallOption) (Greeter_SayHelloServerStreamClient, error)
+}
+
+type greeterClient struct {
+       cc *grpc.ClientConn
+}
+
+func NewGreeterClient(cc *grpc.ClientConn) GreeterClient {
+       return &greeterClient{cc}
+}
+
+func (c *greeterClient) SayHelloTwoSidesStream(ctx context.Context, opts 
...grpc.CallOption) (Greeter_SayHelloTwoSidesStreamClient, error) {
+       stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[0], 
"/main.Greeter/SayHelloTwoSidesStream", opts...)
+       if err != nil {
+               return nil, err
+       }
+       x := &greeterSayHelloTwoSidesStreamClient{stream}
+       return x, nil
+}
+
+type Greeter_SayHelloTwoSidesStreamClient interface {
+       Send(*HelloRequest) error
+       Recv() (*HelloReply, error)
+       grpc.ClientStream
+}
+
+type greeterSayHelloTwoSidesStreamClient struct {
+       grpc.ClientStream
+}
+
+func (x *greeterSayHelloTwoSidesStreamClient) Send(m *HelloRequest) error {
+       return x.ClientStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloTwoSidesStreamClient) Recv() (*HelloReply, error) {
+       m := new(HelloReply)
+       if err := x.ClientStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func (c *greeterClient) SayHelloClientStream(ctx context.Context, opts 
...grpc.CallOption) (Greeter_SayHelloClientStreamClient, error) {
+       stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[1], 
"/main.Greeter/SayHelloClientStream", opts...)
+       if err != nil {
+               return nil, err
+       }
+       x := &greeterSayHelloClientStreamClient{stream}
+       return x, nil
+}
+
+type Greeter_SayHelloClientStreamClient interface {
+       Send(*HelloRequest) error
+       CloseAndRecv() (*HelloReply, error)
+       grpc.ClientStream
+}
+
+type greeterSayHelloClientStreamClient struct {
+       grpc.ClientStream
+}
+
+func (x *greeterSayHelloClientStreamClient) Send(m *HelloRequest) error {
+       return x.ClientStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloClientStreamClient) CloseAndRecv() (*HelloReply, 
error) {
+       if err := x.ClientStream.CloseSend(); err != nil {
+               return nil, err
+       }
+       m := new(HelloReply)
+       if err := x.ClientStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func (c *greeterClient) SayHelloServerStream(ctx context.Context, in 
*HelloRequest, opts ...grpc.CallOption) (Greeter_SayHelloServerStreamClient, 
error) {
+       stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[2], 
"/main.Greeter/SayHelloServerStream", opts...)
+       if err != nil {
+               return nil, err
+       }
+       x := &greeterSayHelloServerStreamClient{stream}
+       if err := x.ClientStream.SendMsg(in); err != nil {
+               return nil, err
+       }
+       if err := x.ClientStream.CloseSend(); err != nil {
+               return nil, err
+       }
+       return x, nil
+}
+
+type Greeter_SayHelloServerStreamClient interface {
+       Recv() (*HelloReply, error)
+       grpc.ClientStream
+}
+
+type greeterSayHelloServerStreamClient struct {
+       grpc.ClientStream
+}
+
+func (x *greeterSayHelloServerStreamClient) Recv() (*HelloReply, error) {
+       m := new(HelloReply)
+       if err := x.ClientStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+// GreeterServer is the server API for Greeter service.
+type GreeterServer interface {
+       // Sends a greeting
+       SayHelloTwoSidesStream(Greeter_SayHelloTwoSidesStreamServer) error
+       SayHelloClientStream(Greeter_SayHelloClientStreamServer) error
+       SayHelloServerStream(*HelloRequest, Greeter_SayHelloServerStreamServer) 
error
+}
+
+// UnimplementedGreeterServer can be embedded to have forward compatible 
implementations.
+type UnimplementedGreeterServer struct {
+}
+
+func (*UnimplementedGreeterServer) SayHelloTwoSidesStream(srv 
Greeter_SayHelloTwoSidesStreamServer) error {
+       return status.Errorf(codes.Unimplemented, "method 
SayHelloTwoSidesStream not implemented")
+}
+func (*UnimplementedGreeterServer) SayHelloClientStream(srv 
Greeter_SayHelloClientStreamServer) error {
+       return status.Errorf(codes.Unimplemented, "method SayHelloClientStream 
not implemented")
+}
+func (*UnimplementedGreeterServer) SayHelloServerStream(req *HelloRequest, srv 
Greeter_SayHelloServerStreamServer) error {
+       return status.Errorf(codes.Unimplemented, "method SayHelloServerStream 
not implemented")
+}
+
+func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
+       s.RegisterService(&_Greeter_serviceDesc, srv)
+}
+
+func _Greeter_SayHelloTwoSidesStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       return 
srv.(GreeterServer).SayHelloTwoSidesStream(&greeterSayHelloTwoSidesStreamServer{stream})
+}
+
+type Greeter_SayHelloTwoSidesStreamServer interface {
+       Send(*HelloReply) error
+       Recv() (*HelloRequest, error)
+       grpc.ServerStream
+}
+
+type greeterSayHelloTwoSidesStreamServer struct {
+       grpc.ServerStream
+}
+
+func (x *greeterSayHelloTwoSidesStreamServer) Send(m *HelloReply) error {
+       return x.ServerStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloTwoSidesStreamServer) Recv() (*HelloRequest, error) {
+       m := new(HelloRequest)
+       if err := x.ServerStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func _Greeter_SayHelloClientStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       return 
srv.(GreeterServer).SayHelloClientStream(&greeterSayHelloClientStreamServer{stream})
+}
+
+type Greeter_SayHelloClientStreamServer interface {
+       SendAndClose(*HelloReply) error
+       Recv() (*HelloRequest, error)
+       grpc.ServerStream
+}
+
+type greeterSayHelloClientStreamServer struct {
+       grpc.ServerStream
+}
+
+func (x *greeterSayHelloClientStreamServer) SendAndClose(m *HelloReply) error {
+       return x.ServerStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloClientStreamServer) Recv() (*HelloRequest, error) {
+       m := new(HelloRequest)
+       if err := x.ServerStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func _Greeter_SayHelloServerStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       m := new(HelloRequest)
+       if err := stream.RecvMsg(m); err != nil {
+               return err
+       }
+       return srv.(GreeterServer).SayHelloServerStream(m, 
&greeterSayHelloServerStreamServer{stream})
+}
+
+type Greeter_SayHelloServerStreamServer interface {
+       Send(*HelloReply) error
+       grpc.ServerStream
+}
+
+type greeterSayHelloServerStreamServer struct {
+       grpc.ServerStream
+}
+
+func (x *greeterSayHelloServerStreamServer) Send(m *HelloReply) error {
+       return x.ServerStream.SendMsg(m)
+}
+
+var _Greeter_serviceDesc = grpc.ServiceDesc{
+       ServiceName: "main.Greeter",
+       HandlerType: (*GreeterServer)(nil),
+       Methods:     []grpc.MethodDesc{},
+       Streams: []grpc.StreamDesc{
+               {
+                       StreamName:    "SayHelloTwoSidesStream",
+                       Handler:       _Greeter_SayHelloTwoSidesStream_Handler,
+                       ServerStreams: true,
+                       ClientStreams: true,
+               },
+               {
+                       StreamName:    "SayHelloClientStream",
+                       Handler:       _Greeter_SayHelloClientStream_Handler,
+                       ClientStreams: true,
+               },
+               {
+                       StreamName:    "SayHelloServerStream",
+                       Handler:       _Greeter_SayHelloServerStream_Handler,
+                       ServerStreams: true,
+               },
+       },
+       Metadata: "helloworld.proto",
+}
+
+// GreeterClientImpl is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please 
refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClientImpl struct {
+       // Sends a greeting
+       SayHelloTwoSidesStream func(ctx context.Context) 
(Greeter_SayHelloTwoSidesStreamClient, error)
+       SayHelloClientStream   func(ctx context.Context) 
(Greeter_SayHelloClientStreamClient, error)
+       SayHelloServerStream   func(ctx context.Context, in *HelloRequest) 
(Greeter_SayHelloServerStreamClient, error)
+}
+
+func (c *GreeterClientImpl) Reference() string {
+       return "greeterImpl"
+}
+
+func (c *GreeterClientImpl) GetDubboStub(cc *grpc.ClientConn) GreeterClient {
+       return NewGreeterClient(cc)
+}
+
+type GreeterProviderBase struct {
+       proxyImpl protocol.Invoker
+}
+
+func (s *GreeterProviderBase) SetProxyImpl(impl protocol.Invoker) {
+       s.proxyImpl = impl
+}
+
+func (s *GreeterProviderBase) GetProxyImpl() protocol.Invoker {
+       return s.proxyImpl
+}
+
+func _DUBBO_Greeter_SayHelloTwoSidesStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       _, ok := srv.(dgrpc.DubboGrpcService)
+       invo := invocation.NewRPCInvocation("SayHelloTwoSidesStream", nil, nil)
+       if !ok {
+               fmt.Println(invo)
+       }
+       return 
srv.(GreeterServer).SayHelloTwoSidesStream(&greeterSayHelloTwoSidesStreamServer{stream})
+}
+
+func _DUBBO_Greeter_SayHelloClientStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       _, ok := srv.(dgrpc.DubboGrpcService)
+       invo := invocation.NewRPCInvocation("SayHelloClientStream", nil, nil)
+       if !ok {
+               fmt.Println(invo)
+       }
+       return 
srv.(GreeterServer).SayHelloClientStream(&greeterSayHelloClientStreamServer{stream})
+}
+
+func _DUBBO_Greeter_SayHelloServerStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       _, ok := srv.(dgrpc.DubboGrpcService)
+       invo := invocation.NewRPCInvocation("SayHelloServerStream", nil, nil)
+       if !ok {
+               fmt.Println(invo)
+       }
+       m := new(HelloRequest)
+       if err := stream.RecvMsg(m); err != nil {
+               return err
+       }
+       return srv.(GreeterServer).SayHelloServerStream(m, 
&greeterSayHelloServerStreamServer{stream})
+}
+
+func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
+       return &grpc.ServiceDesc{
+               ServiceName: "main.Greeter",
+               HandlerType: (*GreeterServer)(nil),
+               Methods:     []grpc.MethodDesc{},
+               Streams: []grpc.StreamDesc{
+                       {
+                               StreamName:    "SayHelloTwoSidesStream",
+                               Handler:       
_DUBBO_Greeter_SayHelloTwoSidesStream_Handler,
+                               ServerStreams: true,
+                               ClientStreams: true,
+                       },
+                       {
+                               StreamName:    "SayHelloClientStream",
+                               Handler:       
_DUBBO_Greeter_SayHelloClientStream_Handler,
+                               ClientStreams: true,
+                       },
+                       {
+                               StreamName:    "SayHelloServerStream",
+                               Handler:       
_DUBBO_Greeter_SayHelloServerStream_Handler,
+                               ServerStreams: true,
+                       },
+               },
+               Metadata: "helloworld.proto",
+       }
+}
diff --git a/general/grpc/go-client/app/helloworld.proto 
b/general/grpc/stream/go-client/app/helloworld.proto
similarity index 82%
copy from general/grpc/go-client/app/helloworld.proto
copy to general/grpc/stream/go-client/app/helloworld.proto
index d68e1dd..593bc4b 100644
--- a/general/grpc/go-client/app/helloworld.proto
+++ b/general/grpc/stream/go-client/app/helloworld.proto
@@ -23,7 +23,9 @@ package main;
 // The greeting service definition.
 service Greeter {
   // Sends a greeting
-  rpc SayHello (HelloRequest) returns (HelloReply) {}
+  rpc SayHelloTwoSidesStream (stream HelloRequest) returns (stream HelloReply) 
{}
+  rpc SayHelloClientStream(stream HelloRequest) returns (HelloReply) {}
+  rpc SayHelloServerStream(HelloRequest) returns (stream HelloReply) {}
 }
 
 // The request message containing the user's name.
diff --git a/general/grpc/go-server/app/version.go 
b/general/grpc/stream/go-client/app/version.go
similarity index 100%
copy from general/grpc/go-server/app/version.go
copy to general/grpc/stream/go-client/app/version.go
diff --git a/general/grpc/go-client/assembly/bin/load.sh 
b/general/grpc/stream/go-client/assembly/bin/load.sh
similarity index 100%
copy from general/grpc/go-client/assembly/bin/load.sh
copy to general/grpc/stream/go-client/assembly/bin/load.sh
diff --git a/general/grpc/go-client/assembly/common/app.properties 
b/general/grpc/stream/go-client/assembly/common/app.properties
similarity index 100%
copy from general/grpc/go-client/assembly/common/app.properties
copy to general/grpc/stream/go-client/assembly/common/app.properties
diff --git a/general/grpc/go-client/assembly/common/build.sh 
b/general/grpc/stream/go-client/assembly/common/build.sh
similarity index 100%
copy from general/grpc/go-client/assembly/common/build.sh
copy to general/grpc/stream/go-client/assembly/common/build.sh
diff --git a/general/grpc/go-client/assembly/linux/dev.sh 
b/general/grpc/stream/go-client/assembly/linux/dev.sh
similarity index 100%
copy from general/grpc/go-client/assembly/linux/dev.sh
copy to general/grpc/stream/go-client/assembly/linux/dev.sh
diff --git a/general/grpc/go-client/assembly/linux/release.sh 
b/general/grpc/stream/go-client/assembly/linux/release.sh
similarity index 100%
copy from general/grpc/go-client/assembly/linux/release.sh
copy to general/grpc/stream/go-client/assembly/linux/release.sh
diff --git a/general/grpc/go-client/assembly/linux/test.sh 
b/general/grpc/stream/go-client/assembly/linux/test.sh
similarity index 100%
copy from general/grpc/go-client/assembly/linux/test.sh
copy to general/grpc/stream/go-client/assembly/linux/test.sh
diff --git a/general/grpc/go-client/assembly/mac/dev.sh 
b/general/grpc/stream/go-client/assembly/mac/dev.sh
similarity index 100%
copy from general/grpc/go-client/assembly/mac/dev.sh
copy to general/grpc/stream/go-client/assembly/mac/dev.sh
diff --git a/general/grpc/go-client/assembly/mac/release.sh 
b/general/grpc/stream/go-client/assembly/mac/release.sh
similarity index 100%
copy from general/grpc/go-client/assembly/mac/release.sh
copy to general/grpc/stream/go-client/assembly/mac/release.sh
diff --git a/general/grpc/go-client/assembly/mac/test.sh 
b/general/grpc/stream/go-client/assembly/mac/test.sh
similarity index 100%
copy from general/grpc/go-client/assembly/mac/test.sh
copy to general/grpc/stream/go-client/assembly/mac/test.sh
diff --git a/general/grpc/go-client/assembly/windows/dev.sh 
b/general/grpc/stream/go-client/assembly/windows/dev.sh
similarity index 100%
copy from general/grpc/go-client/assembly/windows/dev.sh
copy to general/grpc/stream/go-client/assembly/windows/dev.sh
diff --git a/general/grpc/go-client/assembly/windows/release.sh 
b/general/grpc/stream/go-client/assembly/windows/release.sh
similarity index 100%
copy from general/grpc/go-client/assembly/windows/release.sh
copy to general/grpc/stream/go-client/assembly/windows/release.sh
diff --git a/general/grpc/go-client/assembly/windows/test.sh 
b/general/grpc/stream/go-client/assembly/windows/test.sh
similarity index 100%
copy from general/grpc/go-client/assembly/windows/test.sh
copy to general/grpc/stream/go-client/assembly/windows/test.sh
diff --git a/general/grpc/go-client/profiles/dev/client.yml 
b/general/grpc/stream/go-client/profiles/dev/client.yml
similarity index 100%
copy from general/grpc/go-client/profiles/dev/client.yml
copy to general/grpc/stream/go-client/profiles/dev/client.yml
diff --git a/general/grpc/go-server/profiles/dev/log.yml 
b/general/grpc/stream/go-client/profiles/dev/log.yml
similarity index 100%
copy from general/grpc/go-server/profiles/dev/log.yml
copy to general/grpc/stream/go-client/profiles/dev/log.yml
diff --git a/general/grpc/go-client/profiles/release/client.yml 
b/general/grpc/stream/go-client/profiles/release/client.yml
similarity index 100%
copy from general/grpc/go-client/profiles/release/client.yml
copy to general/grpc/stream/go-client/profiles/release/client.yml
diff --git a/general/grpc/go-server/profiles/release/log.yml 
b/general/grpc/stream/go-client/profiles/release/log.yml
similarity index 100%
copy from general/grpc/go-server/profiles/release/log.yml
copy to general/grpc/stream/go-client/profiles/release/log.yml
diff --git a/general/grpc/go-client/profiles/test/client.yml 
b/general/grpc/stream/go-client/profiles/test/client.yml
similarity index 100%
copy from general/grpc/go-client/profiles/test/client.yml
copy to general/grpc/stream/go-client/profiles/test/client.yml
diff --git a/general/grpc/go-server/profiles/test/log.yml 
b/general/grpc/stream/go-client/profiles/test/log.yml
similarity index 100%
copy from general/grpc/go-server/profiles/test/log.yml
copy to general/grpc/stream/go-client/profiles/test/log.yml
diff --git a/general/grpc/stream/go-server/app/greeter.go 
b/general/grpc/stream/go-server/app/greeter.go
new file mode 100644
index 0000000..49d0087
--- /dev/null
+++ b/general/grpc/stream/go-server/app/greeter.go
@@ -0,0 +1,101 @@
+/*
+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 (
+       "fmt"
+
+       "github.com/apache/dubbo-go/common/logger"
+       "github.com/apache/dubbo-go/config"
+)
+
+func init() {
+       config.SetProviderService(NewGreeterProvider())
+}
+
+type GreeterProvider struct {
+       *GreeterProviderBase
+}
+
+func NewGreeterProvider() *GreeterProvider {
+       return &GreeterProvider{
+               GreeterProviderBase: &GreeterProviderBase{},
+       }
+}
+
+func (g *GreeterProvider) SayHelloTwoSidesStream(server 
Greeter_SayHelloTwoSidesStreamServer) error {
+       req := &HelloRequest{}
+       fmt.Printf("in SayHelloTwoSidesStream func\n")
+       if err := server.RecvMsg(req); err != nil {
+               fmt.Printf("server.RecvMsg err = %s", err.Error())
+               return err
+       }
+       fmt.Printf("req1: %v\n", *req)
+       if err := server.RecvMsg(req); err != nil {
+               logger.Errorf("server.RecvMsg err = %s", err.Error())
+               return err
+       }
+       fmt.Printf("req2: %v\n", *req)
+       if err := server.Send(&HelloReply{Message: "reply1"}); err != nil {
+               logger.Errorf("server.Send err = %s", err.Error())
+               return err
+       }
+       if err := server.Send(&HelloReply{Message: "reply2"}); err != nil {
+               logger.Errorf("server.Send err = %s", err.Error())
+               return err
+       }
+       return nil
+}
+
+func (g *GreeterProvider) SayHelloClientStream(server 
Greeter_SayHelloClientStreamServer) error {
+       req := &HelloRequest{}
+       fmt.Printf("in SayHelloClientStream func\n")
+       if err := server.RecvMsg(req); err != nil {
+               fmt.Printf("server.RecvMsg err = %s", err.Error())
+               return err
+       }
+       fmt.Printf("req1: %v\n", *req)
+       if err := server.RecvMsg(req); err != nil {
+               logger.Errorf("server.RecvMsg err = %s", err.Error())
+               return err
+       }
+       fmt.Printf("req2: %v\n", *req)
+       if err := server.SendMsg(&HelloReply{Message: "unary reply"}); err != 
nil {
+               logger.Errorf("server.Send err = %s", err.Error())
+               return err
+       }
+       return nil
+}
+
+func (g *GreeterProvider) SayHelloServerStream(req *HelloRequest, server 
Greeter_SayHelloServerStreamServer) error {
+       fmt.Println("in SayHelloServerStream func")
+       fmt.Printf("unary req: %v\n", *req)
+       if err := server.Send(&HelloReply{Message: "reply1"}); err != nil {
+               logger.Errorf("server.Send err = %s", err.Error())
+               return err
+       }
+       if err := server.Send(&HelloReply{Message: "reply2"}); err != nil {
+               logger.Errorf("server.Send err = %s", err.Error())
+               return err
+       }
+       return nil
+}
+
+func (g *GreeterProvider) Reference() string {
+       return "GrpcGreeterImpl"
+}
diff --git a/general/grpc/stream/go-server/app/helloworld.pb.go 
b/general/grpc/stream/go-server/app/helloworld.pb.go
new file mode 100644
index 0000000..2183a4f
--- /dev/null
+++ b/general/grpc/stream/go-server/app/helloworld.pb.go
@@ -0,0 +1,472 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: helloworld.proto
+
+package main
+
+import (
+       context "context"
+       fmt "fmt"
+       proto "github.com/golang/protobuf/proto"
+       grpc "google.golang.org/grpc"
+       codes "google.golang.org/grpc/codes"
+       status "google.golang.org/grpc/status"
+       math "math"
+)
+
+import (
+       "github.com/apache/dubbo-go/protocol"
+       dgrpc "github.com/apache/dubbo-go/protocol/grpc"
+       "github.com/apache/dubbo-go/protocol/invocation"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ = proto.Marshal
+var _ = fmt.Errorf
+var _ = math.Inf
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the proto package it is being compiled against.
+// A compilation error at this line likely means your copy of the
+// proto package needs to be updated.
+const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+
+// The request message containing the user's name.
+type HelloRequest struct {
+       Name                 string   `protobuf:"bytes,1,opt,name=name,proto3" 
json:"name,omitempty"`
+       XXX_NoUnkeyedLiteral struct{} `json:"-"`
+       XXX_unrecognized     []byte   `json:"-"`
+       XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HelloRequest) Reset()         { *m = HelloRequest{} }
+func (m *HelloRequest) String() string { return proto.CompactTextString(m) }
+func (*HelloRequest) ProtoMessage()    {}
+func (*HelloRequest) Descriptor() ([]byte, []int) {
+       return fileDescriptor_17b8c58d586b62f2, []int{0}
+}
+
+func (m *HelloRequest) XXX_Unmarshal(b []byte) error {
+       return xxx_messageInfo_HelloRequest.Unmarshal(m, b)
+}
+func (m *HelloRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, 
error) {
+       return xxx_messageInfo_HelloRequest.Marshal(b, m, deterministic)
+}
+func (m *HelloRequest) XXX_Merge(src proto.Message) {
+       xxx_messageInfo_HelloRequest.Merge(m, src)
+}
+func (m *HelloRequest) XXX_Size() int {
+       return xxx_messageInfo_HelloRequest.Size(m)
+}
+func (m *HelloRequest) XXX_DiscardUnknown() {
+       xxx_messageInfo_HelloRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HelloRequest proto.InternalMessageInfo
+
+func (m *HelloRequest) GetName() string {
+       if m != nil {
+               return m.Name
+       }
+       return ""
+}
+
+// The response message containing the greetings
+type HelloReply struct {
+       Message              string   
`protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
+       XXX_NoUnkeyedLiteral struct{} `json:"-"`
+       XXX_unrecognized     []byte   `json:"-"`
+       XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *HelloReply) Reset()         { *m = HelloReply{} }
+func (m *HelloReply) String() string { return proto.CompactTextString(m) }
+func (*HelloReply) ProtoMessage()    {}
+func (*HelloReply) Descriptor() ([]byte, []int) {
+       return fileDescriptor_17b8c58d586b62f2, []int{1}
+}
+
+func (m *HelloReply) XXX_Unmarshal(b []byte) error {
+       return xxx_messageInfo_HelloReply.Unmarshal(m, b)
+}
+func (m *HelloReply) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) 
{
+       return xxx_messageInfo_HelloReply.Marshal(b, m, deterministic)
+}
+func (m *HelloReply) XXX_Merge(src proto.Message) {
+       xxx_messageInfo_HelloReply.Merge(m, src)
+}
+func (m *HelloReply) XXX_Size() int {
+       return xxx_messageInfo_HelloReply.Size(m)
+}
+func (m *HelloReply) XXX_DiscardUnknown() {
+       xxx_messageInfo_HelloReply.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_HelloReply proto.InternalMessageInfo
+
+func (m *HelloReply) GetMessage() string {
+       if m != nil {
+               return m.Message
+       }
+       return ""
+}
+
+func init() {
+       proto.RegisterType((*HelloRequest)(nil), "main.HelloRequest")
+       proto.RegisterType((*HelloReply)(nil), "main.HelloReply")
+}
+
+func init() { proto.RegisterFile("helloworld.proto", 
fileDescriptor_17b8c58d586b62f2) }
+
+var fileDescriptor_17b8c58d586b62f2 = []byte{
+       // 232 bytes of a gzipped FileDescriptorProto
+       0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 
0xc8, 0x48, 0xcd, 0xc9,
+       0xc9, 0x2f, 0xcf, 0x2f, 0xca, 0x49, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 
0x17, 0x62, 0xc9, 0x4d,
+       0xcc, 0xcc, 0x53, 0x52, 0xe2, 0xe2, 0xf1, 0x00, 0xc9, 0x04, 0xa5, 0x16, 
0x96, 0xa6, 0x16, 0x97,
+       0x08, 0x09, 0x71, 0xb1, 0xe4, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 
0x6a, 0x70, 0x06, 0x81,
+       0xd9, 0x4a, 0x6a, 0x5c, 0x5c, 0x50, 0x35, 0x05, 0x39, 0x95, 0x42, 0x12, 
0x5c, 0xec, 0xb9, 0xa9,
+       0xc5, 0xc5, 0x89, 0xe9, 0x30, 0x45, 0x30, 0xae, 0xd1, 0x65, 0x46, 0x2e, 
0x76, 0xf7, 0xa2, 0xd4,
+       0xd4, 0x92, 0xd4, 0x22, 0x21, 0x17, 0x2e, 0xb1, 0xe0, 0xc4, 0x4a, 0xb0, 
0xb6, 0x90, 0xf2, 0xfc,
+       0xe0, 0xcc, 0x94, 0xd4, 0xe2, 0xe0, 0x92, 0xa2, 0xd4, 0xc4, 0x5c, 0x21, 
0x21, 0x3d, 0x90, 0xc5,
+       0x7a, 0xc8, 0xb6, 0x4a, 0x09, 0xa0, 0x88, 0x15, 0xe4, 0x54, 0x2a, 0x31, 
0x68, 0x30, 0x1a, 0x30,
+       0x0a, 0x39, 0x70, 0x89, 0xc0, 0x4c, 0x71, 0xce, 0xc9, 0x4c, 0xcd, 0x2b, 
0x21, 0xd5, 0x0c, 0x64,
+       0x13, 0x82, 0x53, 0x8b, 0xca, 0x52, 0x8b, 0x48, 0x33, 0xc1, 0x80, 0xd1, 
0xc9, 0x8c, 0x4b, 0x3a,
+       0x33, 0x5f, 0x2f, 0xbd, 0xa8, 0x20, 0x59, 0x2f, 0xb5, 0x22, 0x31, 0xb7, 
0x20, 0x27, 0xb5, 0x58,
+       0x0f, 0x11, 0x98, 0x4e, 0xfc, 0x60, 0xe5, 0xe1, 0x20, 0x76, 0x00, 0x28, 
0x5c, 0x03, 0x18, 0x17,
+       0x31, 0x31, 0x7b, 0xf8, 0x84, 0x27, 0xb1, 0x81, 0x83, 0xd9, 0x18, 0x10, 
0x00, 0x00, 0xff, 0xff,
+       0xe7, 0x0c, 0xb8, 0x0a, 0x7a, 0x01, 0x00, 0x00,
+}
+
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// GreeterClient is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please 
refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClient interface {
+       // Sends a greeting
+       SayHelloTwoSidesStream(ctx context.Context, opts ...grpc.CallOption) 
(Greeter_SayHelloTwoSidesStreamClient, error)
+       SayHelloClientStream(ctx context.Context, opts ...grpc.CallOption) 
(Greeter_SayHelloClientStreamClient, error)
+       SayHelloServerStream(ctx context.Context, in *HelloRequest, opts 
...grpc.CallOption) (Greeter_SayHelloServerStreamClient, error)
+}
+
+type greeterClient struct {
+       cc *grpc.ClientConn
+}
+
+func NewGreeterClient(cc *grpc.ClientConn) GreeterClient {
+       return &greeterClient{cc}
+}
+
+func (c *greeterClient) SayHelloTwoSidesStream(ctx context.Context, opts 
...grpc.CallOption) (Greeter_SayHelloTwoSidesStreamClient, error) {
+       stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[0], 
"/main.Greeter/SayHelloTwoSidesStream", opts...)
+       if err != nil {
+               return nil, err
+       }
+       x := &greeterSayHelloTwoSidesStreamClient{stream}
+       return x, nil
+}
+
+type Greeter_SayHelloTwoSidesStreamClient interface {
+       Send(*HelloRequest) error
+       Recv() (*HelloReply, error)
+       grpc.ClientStream
+}
+
+type greeterSayHelloTwoSidesStreamClient struct {
+       grpc.ClientStream
+}
+
+func (x *greeterSayHelloTwoSidesStreamClient) Send(m *HelloRequest) error {
+       return x.ClientStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloTwoSidesStreamClient) Recv() (*HelloReply, error) {
+       m := new(HelloReply)
+       if err := x.ClientStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func (c *greeterClient) SayHelloClientStream(ctx context.Context, opts 
...grpc.CallOption) (Greeter_SayHelloClientStreamClient, error) {
+       stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[1], 
"/main.Greeter/SayHelloClientStream", opts...)
+       if err != nil {
+               return nil, err
+       }
+       x := &greeterSayHelloClientStreamClient{stream}
+       return x, nil
+}
+
+type Greeter_SayHelloClientStreamClient interface {
+       Send(*HelloRequest) error
+       CloseAndRecv() (*HelloReply, error)
+       grpc.ClientStream
+}
+
+type greeterSayHelloClientStreamClient struct {
+       grpc.ClientStream
+}
+
+func (x *greeterSayHelloClientStreamClient) Send(m *HelloRequest) error {
+       return x.ClientStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloClientStreamClient) CloseAndRecv() (*HelloReply, 
error) {
+       if err := x.ClientStream.CloseSend(); err != nil {
+               return nil, err
+       }
+       m := new(HelloReply)
+       if err := x.ClientStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func (c *greeterClient) SayHelloServerStream(ctx context.Context, in 
*HelloRequest, opts ...grpc.CallOption) (Greeter_SayHelloServerStreamClient, 
error) {
+       stream, err := c.cc.NewStream(ctx, &_Greeter_serviceDesc.Streams[2], 
"/main.Greeter/SayHelloServerStream", opts...)
+       if err != nil {
+               return nil, err
+       }
+       x := &greeterSayHelloServerStreamClient{stream}
+       if err := x.ClientStream.SendMsg(in); err != nil {
+               return nil, err
+       }
+       if err := x.ClientStream.CloseSend(); err != nil {
+               return nil, err
+       }
+       return x, nil
+}
+
+type Greeter_SayHelloServerStreamClient interface {
+       Recv() (*HelloReply, error)
+       grpc.ClientStream
+}
+
+type greeterSayHelloServerStreamClient struct {
+       grpc.ClientStream
+}
+
+func (x *greeterSayHelloServerStreamClient) Recv() (*HelloReply, error) {
+       m := new(HelloReply)
+       if err := x.ClientStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+// GreeterServer is the server API for Greeter service.
+type GreeterServer interface {
+       // Sends a greeting
+       SayHelloTwoSidesStream(Greeter_SayHelloTwoSidesStreamServer) error
+       SayHelloClientStream(Greeter_SayHelloClientStreamServer) error
+       SayHelloServerStream(*HelloRequest, Greeter_SayHelloServerStreamServer) 
error
+}
+
+// UnimplementedGreeterServer can be embedded to have forward compatible 
implementations.
+type UnimplementedGreeterServer struct {
+}
+
+func (*UnimplementedGreeterServer) SayHelloTwoSidesStream(srv 
Greeter_SayHelloTwoSidesStreamServer) error {
+       return status.Errorf(codes.Unimplemented, "method 
SayHelloTwoSidesStream not implemented")
+}
+func (*UnimplementedGreeterServer) SayHelloClientStream(srv 
Greeter_SayHelloClientStreamServer) error {
+       return status.Errorf(codes.Unimplemented, "method SayHelloClientStream 
not implemented")
+}
+func (*UnimplementedGreeterServer) SayHelloServerStream(req *HelloRequest, srv 
Greeter_SayHelloServerStreamServer) error {
+       return status.Errorf(codes.Unimplemented, "method SayHelloServerStream 
not implemented")
+}
+
+func RegisterGreeterServer(s *grpc.Server, srv GreeterServer) {
+       s.RegisterService(&_Greeter_serviceDesc, srv)
+}
+
+func _Greeter_SayHelloTwoSidesStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       return 
srv.(GreeterServer).SayHelloTwoSidesStream(&greeterSayHelloTwoSidesStreamServer{stream})
+}
+
+type Greeter_SayHelloTwoSidesStreamServer interface {
+       Send(*HelloReply) error
+       Recv() (*HelloRequest, error)
+       grpc.ServerStream
+}
+
+type greeterSayHelloTwoSidesStreamServer struct {
+       grpc.ServerStream
+}
+
+func (x *greeterSayHelloTwoSidesStreamServer) Send(m *HelloReply) error {
+       return x.ServerStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloTwoSidesStreamServer) Recv() (*HelloRequest, error) {
+       m := new(HelloRequest)
+       if err := x.ServerStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func _Greeter_SayHelloClientStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       return 
srv.(GreeterServer).SayHelloClientStream(&greeterSayHelloClientStreamServer{stream})
+}
+
+type Greeter_SayHelloClientStreamServer interface {
+       SendAndClose(*HelloReply) error
+       Recv() (*HelloRequest, error)
+       grpc.ServerStream
+}
+
+type greeterSayHelloClientStreamServer struct {
+       grpc.ServerStream
+}
+
+func (x *greeterSayHelloClientStreamServer) SendAndClose(m *HelloReply) error {
+       return x.ServerStream.SendMsg(m)
+}
+
+func (x *greeterSayHelloClientStreamServer) Recv() (*HelloRequest, error) {
+       m := new(HelloRequest)
+       if err := x.ServerStream.RecvMsg(m); err != nil {
+               return nil, err
+       }
+       return m, nil
+}
+
+func _Greeter_SayHelloServerStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       m := new(HelloRequest)
+       if err := stream.RecvMsg(m); err != nil {
+               return err
+       }
+       return srv.(GreeterServer).SayHelloServerStream(m, 
&greeterSayHelloServerStreamServer{stream})
+}
+
+type Greeter_SayHelloServerStreamServer interface {
+       Send(*HelloReply) error
+       grpc.ServerStream
+}
+
+type greeterSayHelloServerStreamServer struct {
+       grpc.ServerStream
+}
+
+func (x *greeterSayHelloServerStreamServer) Send(m *HelloReply) error {
+       return x.ServerStream.SendMsg(m)
+}
+
+var _Greeter_serviceDesc = grpc.ServiceDesc{
+       ServiceName: "main.Greeter",
+       HandlerType: (*GreeterServer)(nil),
+       Methods:     []grpc.MethodDesc{},
+       Streams: []grpc.StreamDesc{
+               {
+                       StreamName:    "SayHelloTwoSidesStream",
+                       Handler:       _Greeter_SayHelloTwoSidesStream_Handler,
+                       ServerStreams: true,
+                       ClientStreams: true,
+               },
+               {
+                       StreamName:    "SayHelloClientStream",
+                       Handler:       _Greeter_SayHelloClientStream_Handler,
+                       ClientStreams: true,
+               },
+               {
+                       StreamName:    "SayHelloServerStream",
+                       Handler:       _Greeter_SayHelloServerStream_Handler,
+                       ServerStreams: true,
+               },
+       },
+       Metadata: "helloworld.proto",
+}
+
+// GreeterClientImpl is the client API for Greeter service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please 
refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type GreeterClientImpl struct {
+       // Sends a greeting
+       SayHelloTwoSidesStream func(ctx context.Context) 
(Greeter_SayHelloTwoSidesStreamClient, error)
+       SayHelloClientStream   func(ctx context.Context) 
(Greeter_SayHelloClientStreamClient, error)
+       SayHelloServerStream   func(ctx context.Context, in *HelloRequest) 
(Greeter_SayHelloServerStreamClient, error)
+}
+
+func (c *GreeterClientImpl) Reference() string {
+       return "greeterImpl"
+}
+
+func (c *GreeterClientImpl) GetDubboStub(cc *grpc.ClientConn) GreeterClient {
+       return NewGreeterClient(cc)
+}
+
+type GreeterProviderBase struct {
+       proxyImpl protocol.Invoker
+}
+
+func (s *GreeterProviderBase) SetProxyImpl(impl protocol.Invoker) {
+       s.proxyImpl = impl
+}
+
+func (s *GreeterProviderBase) GetProxyImpl() protocol.Invoker {
+       return s.proxyImpl
+}
+
+func _DUBBO_Greeter_SayHelloTwoSidesStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       _, ok := srv.(dgrpc.DubboGrpcService)
+       invo := invocation.NewRPCInvocation("SayHelloTwoSidesStream", nil, nil)
+       if !ok {
+               fmt.Println(invo)
+       }
+       return 
srv.(GreeterServer).SayHelloTwoSidesStream(&greeterSayHelloTwoSidesStreamServer{stream})
+}
+
+func _DUBBO_Greeter_SayHelloClientStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       _, ok := srv.(dgrpc.DubboGrpcService)
+       invo := invocation.NewRPCInvocation("SayHelloClientStream", nil, nil)
+       if !ok {
+               fmt.Println(invo)
+       }
+       return 
srv.(GreeterServer).SayHelloClientStream(&greeterSayHelloClientStreamServer{stream})
+}
+
+func _DUBBO_Greeter_SayHelloServerStream_Handler(srv interface{}, stream 
grpc.ServerStream) error {
+       _, ok := srv.(dgrpc.DubboGrpcService)
+       invo := invocation.NewRPCInvocation("SayHelloServerStream", nil, nil)
+       if !ok {
+               fmt.Println(invo)
+       }
+       m := new(HelloRequest)
+       if err := stream.RecvMsg(m); err != nil {
+               return err
+       }
+       return srv.(GreeterServer).SayHelloServerStream(m, 
&greeterSayHelloServerStreamServer{stream})
+}
+
+func (s *GreeterProviderBase) ServiceDesc() *grpc.ServiceDesc {
+       return &grpc.ServiceDesc{
+               ServiceName: "main.Greeter",
+               HandlerType: (*GreeterServer)(nil),
+               Methods:     []grpc.MethodDesc{},
+               Streams: []grpc.StreamDesc{
+                       {
+                               StreamName:    "SayHelloTwoSidesStream",
+                               Handler:       
_DUBBO_Greeter_SayHelloTwoSidesStream_Handler,
+                               ServerStreams: true,
+                               ClientStreams: true,
+                       },
+                       {
+                               StreamName:    "SayHelloClientStream",
+                               Handler:       
_DUBBO_Greeter_SayHelloClientStream_Handler,
+                               ClientStreams: true,
+                       },
+                       {
+                               StreamName:    "SayHelloServerStream",
+                               Handler:       
_DUBBO_Greeter_SayHelloServerStream_Handler,
+                               ServerStreams: true,
+                       },
+               },
+               Metadata: "helloworld.proto",
+       }
+}
diff --git a/general/grpc/go-client/app/helloworld.proto 
b/general/grpc/stream/go-server/app/helloworld.proto
similarity index 82%
copy from general/grpc/go-client/app/helloworld.proto
copy to general/grpc/stream/go-server/app/helloworld.proto
index d68e1dd..593bc4b 100644
--- a/general/grpc/go-client/app/helloworld.proto
+++ b/general/grpc/stream/go-server/app/helloworld.proto
@@ -23,7 +23,9 @@ package main;
 // The greeting service definition.
 service Greeter {
   // Sends a greeting
-  rpc SayHello (HelloRequest) returns (HelloReply) {}
+  rpc SayHelloTwoSidesStream (stream HelloRequest) returns (stream HelloReply) 
{}
+  rpc SayHelloClientStream(stream HelloRequest) returns (HelloReply) {}
+  rpc SayHelloServerStream(HelloRequest) returns (stream HelloReply) {}
 }
 
 // The request message containing the user's name.
diff --git a/general/grpc/go-server/app/server.go 
b/general/grpc/stream/go-server/app/server.go
similarity index 100%
copy from general/grpc/go-server/app/server.go
copy to general/grpc/stream/go-server/app/server.go
diff --git a/general/grpc/go-client/app/version.go 
b/general/grpc/stream/go-server/app/version.go
similarity index 100%
rename from general/grpc/go-client/app/version.go
rename to general/grpc/stream/go-server/app/version.go
diff --git a/general/grpc/go-server/assembly/bin/load.sh 
b/general/grpc/stream/go-server/assembly/bin/load.sh
similarity index 100%
copy from general/grpc/go-server/assembly/bin/load.sh
copy to general/grpc/stream/go-server/assembly/bin/load.sh
diff --git a/general/grpc/go-server/assembly/common/app.properties 
b/general/grpc/stream/go-server/assembly/common/app.properties
similarity index 100%
copy from general/grpc/go-server/assembly/common/app.properties
copy to general/grpc/stream/go-server/assembly/common/app.properties
diff --git a/general/grpc/go-server/assembly/common/build.sh 
b/general/grpc/stream/go-server/assembly/common/build.sh
similarity index 100%
copy from general/grpc/go-server/assembly/common/build.sh
copy to general/grpc/stream/go-server/assembly/common/build.sh
diff --git a/general/grpc/go-server/assembly/linux/dev.sh 
b/general/grpc/stream/go-server/assembly/linux/dev.sh
similarity index 100%
copy from general/grpc/go-server/assembly/linux/dev.sh
copy to general/grpc/stream/go-server/assembly/linux/dev.sh
diff --git a/general/grpc/go-server/assembly/linux/release.sh 
b/general/grpc/stream/go-server/assembly/linux/release.sh
similarity index 100%
copy from general/grpc/go-server/assembly/linux/release.sh
copy to general/grpc/stream/go-server/assembly/linux/release.sh
diff --git a/general/grpc/go-server/assembly/linux/test.sh 
b/general/grpc/stream/go-server/assembly/linux/test.sh
similarity index 100%
copy from general/grpc/go-server/assembly/linux/test.sh
copy to general/grpc/stream/go-server/assembly/linux/test.sh
diff --git a/general/grpc/go-server/assembly/mac/dev.sh 
b/general/grpc/stream/go-server/assembly/mac/dev.sh
similarity index 100%
copy from general/grpc/go-server/assembly/mac/dev.sh
copy to general/grpc/stream/go-server/assembly/mac/dev.sh
diff --git a/general/grpc/go-server/assembly/mac/release.sh 
b/general/grpc/stream/go-server/assembly/mac/release.sh
similarity index 100%
copy from general/grpc/go-server/assembly/mac/release.sh
copy to general/grpc/stream/go-server/assembly/mac/release.sh
diff --git a/general/grpc/go-server/assembly/mac/test.sh 
b/general/grpc/stream/go-server/assembly/mac/test.sh
similarity index 100%
copy from general/grpc/go-server/assembly/mac/test.sh
copy to general/grpc/stream/go-server/assembly/mac/test.sh
diff --git a/general/grpc/go-server/assembly/windows/dev.sh 
b/general/grpc/stream/go-server/assembly/windows/dev.sh
similarity index 100%
copy from general/grpc/go-server/assembly/windows/dev.sh
copy to general/grpc/stream/go-server/assembly/windows/dev.sh
diff --git a/general/grpc/go-server/assembly/windows/release.sh 
b/general/grpc/stream/go-server/assembly/windows/release.sh
similarity index 100%
copy from general/grpc/go-server/assembly/windows/release.sh
copy to general/grpc/stream/go-server/assembly/windows/release.sh
diff --git a/general/grpc/go-server/assembly/windows/test.sh 
b/general/grpc/stream/go-server/assembly/windows/test.sh
similarity index 100%
copy from general/grpc/go-server/assembly/windows/test.sh
copy to general/grpc/stream/go-server/assembly/windows/test.sh
diff --git a/general/grpc/go-client/profiles/dev/log.yml 
b/general/grpc/stream/go-server/profiles/dev/log.yml
similarity index 100%
rename from general/grpc/go-client/profiles/dev/log.yml
rename to general/grpc/stream/go-server/profiles/dev/log.yml
diff --git a/general/grpc/go-server/profiles/dev/server.yml 
b/general/grpc/stream/go-server/profiles/dev/server.yml
similarity index 100%
copy from general/grpc/go-server/profiles/dev/server.yml
copy to general/grpc/stream/go-server/profiles/dev/server.yml
diff --git a/general/grpc/go-client/profiles/release/log.yml 
b/general/grpc/stream/go-server/profiles/release/log.yml
similarity index 100%
rename from general/grpc/go-client/profiles/release/log.yml
rename to general/grpc/stream/go-server/profiles/release/log.yml
diff --git a/general/grpc/go-server/profiles/release/server.yml 
b/general/grpc/stream/go-server/profiles/release/server.yml
similarity index 100%
copy from general/grpc/go-server/profiles/release/server.yml
copy to general/grpc/stream/go-server/profiles/release/server.yml
diff --git a/general/grpc/go-client/profiles/test/log.yml 
b/general/grpc/stream/go-server/profiles/test/log.yml
similarity index 100%
rename from general/grpc/go-client/profiles/test/log.yml
rename to general/grpc/stream/go-server/profiles/test/log.yml
diff --git a/general/grpc/go-server/profiles/test/server.yml 
b/general/grpc/stream/go-server/profiles/test/server.yml
similarity index 100%
copy from general/grpc/go-server/profiles/test/server.yml
copy to general/grpc/stream/go-server/profiles/test/server.yml
diff --git a/general/grpc/go-client/app/Makefile 
b/general/grpc/unary/go-client/app/Makefile
similarity index 100%
rename from general/grpc/go-client/app/Makefile
rename to general/grpc/unary/go-client/app/Makefile
diff --git a/general/grpc/go-client/app/client.go 
b/general/grpc/unary/go-client/app/client.go
similarity index 97%
rename from general/grpc/go-client/app/client.go
rename to general/grpc/unary/go-client/app/client.go
index d8634b7..eb39e34 100644
--- a/general/grpc/go-client/app/client.go
+++ b/general/grpc/unary/go-client/app/client.go
@@ -24,22 +24,25 @@ import (
        "os/signal"
        "syscall"
        "time"
-)
 
-import (
-       "github.com/dubbogo/gost/log"
-)
+       gxlog "github.com/dubbogo/gost/log"
 
-import (
        _ "github.com/apache/dubbo-go/cluster/cluster_impl"
+
        _ "github.com/apache/dubbo-go/cluster/loadbalance"
        "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/filter/filter_impl"
+
        _ "github.com/apache/dubbo-go/protocol/dubbo"
+
        _ "github.com/apache/dubbo-go/protocol/grpc"
+
        _ "github.com/apache/dubbo-go/registry/protocol"
+
        _ "github.com/apache/dubbo-go/registry/zookeeper"
 )
 
diff --git a/general/grpc/go-client/app/hello.go 
b/general/grpc/unary/go-client/app/hello.go
similarity index 100%
rename from general/grpc/go-client/app/hello.go
rename to general/grpc/unary/go-client/app/hello.go
diff --git a/general/grpc/go-server/app/helloworld.pb.go 
b/general/grpc/unary/go-client/app/helloworld.pb.go
similarity index 100%
rename from general/grpc/go-server/app/helloworld.pb.go
rename to general/grpc/unary/go-client/app/helloworld.pb.go
diff --git a/general/grpc/go-server/app/helloworld.proto 
b/general/grpc/unary/go-client/app/helloworld.proto
similarity index 100%
rename from general/grpc/go-server/app/helloworld.proto
rename to general/grpc/unary/go-client/app/helloworld.proto
diff --git a/general/grpc/go-server/app/version.go 
b/general/grpc/unary/go-client/app/version.go
similarity index 100%
copy from general/grpc/go-server/app/version.go
copy to general/grpc/unary/go-client/app/version.go
diff --git a/general/grpc/go-client/assembly/bin/load.sh 
b/general/grpc/unary/go-client/assembly/bin/load.sh
similarity index 100%
rename from general/grpc/go-client/assembly/bin/load.sh
rename to general/grpc/unary/go-client/assembly/bin/load.sh
diff --git a/general/grpc/go-client/assembly/common/app.properties 
b/general/grpc/unary/go-client/assembly/common/app.properties
similarity index 100%
rename from general/grpc/go-client/assembly/common/app.properties
rename to general/grpc/unary/go-client/assembly/common/app.properties
diff --git a/general/grpc/go-client/assembly/common/build.sh 
b/general/grpc/unary/go-client/assembly/common/build.sh
similarity index 100%
rename from general/grpc/go-client/assembly/common/build.sh
rename to general/grpc/unary/go-client/assembly/common/build.sh
diff --git a/general/grpc/go-client/assembly/linux/dev.sh 
b/general/grpc/unary/go-client/assembly/linux/dev.sh
similarity index 100%
rename from general/grpc/go-client/assembly/linux/dev.sh
rename to general/grpc/unary/go-client/assembly/linux/dev.sh
diff --git a/general/grpc/go-client/assembly/linux/release.sh 
b/general/grpc/unary/go-client/assembly/linux/release.sh
similarity index 100%
rename from general/grpc/go-client/assembly/linux/release.sh
rename to general/grpc/unary/go-client/assembly/linux/release.sh
diff --git a/general/grpc/go-client/assembly/linux/test.sh 
b/general/grpc/unary/go-client/assembly/linux/test.sh
similarity index 100%
rename from general/grpc/go-client/assembly/linux/test.sh
rename to general/grpc/unary/go-client/assembly/linux/test.sh
diff --git a/general/grpc/go-client/assembly/mac/dev.sh 
b/general/grpc/unary/go-client/assembly/mac/dev.sh
similarity index 100%
rename from general/grpc/go-client/assembly/mac/dev.sh
rename to general/grpc/unary/go-client/assembly/mac/dev.sh
diff --git a/general/grpc/go-client/assembly/mac/release.sh 
b/general/grpc/unary/go-client/assembly/mac/release.sh
similarity index 100%
rename from general/grpc/go-client/assembly/mac/release.sh
rename to general/grpc/unary/go-client/assembly/mac/release.sh
diff --git a/general/grpc/go-client/assembly/mac/test.sh 
b/general/grpc/unary/go-client/assembly/mac/test.sh
similarity index 100%
rename from general/grpc/go-client/assembly/mac/test.sh
rename to general/grpc/unary/go-client/assembly/mac/test.sh
diff --git a/general/grpc/go-client/assembly/windows/dev.sh 
b/general/grpc/unary/go-client/assembly/windows/dev.sh
similarity index 100%
rename from general/grpc/go-client/assembly/windows/dev.sh
rename to general/grpc/unary/go-client/assembly/windows/dev.sh
diff --git a/general/grpc/go-client/assembly/windows/release.sh 
b/general/grpc/unary/go-client/assembly/windows/release.sh
similarity index 100%
rename from general/grpc/go-client/assembly/windows/release.sh
rename to general/grpc/unary/go-client/assembly/windows/release.sh
diff --git a/general/grpc/go-client/assembly/windows/test.sh 
b/general/grpc/unary/go-client/assembly/windows/test.sh
similarity index 100%
rename from general/grpc/go-client/assembly/windows/test.sh
rename to general/grpc/unary/go-client/assembly/windows/test.sh
diff --git a/general/grpc/go-client/profiles/dev/client.yml 
b/general/grpc/unary/go-client/profiles/dev/client.yml
similarity index 100%
rename from general/grpc/go-client/profiles/dev/client.yml
rename to general/grpc/unary/go-client/profiles/dev/client.yml
diff --git a/general/grpc/go-server/profiles/dev/log.yml 
b/general/grpc/unary/go-client/profiles/dev/log.yml
similarity index 100%
copy from general/grpc/go-server/profiles/dev/log.yml
copy to general/grpc/unary/go-client/profiles/dev/log.yml
diff --git a/general/grpc/go-client/profiles/release/client.yml 
b/general/grpc/unary/go-client/profiles/release/client.yml
similarity index 100%
rename from general/grpc/go-client/profiles/release/client.yml
rename to general/grpc/unary/go-client/profiles/release/client.yml
diff --git a/general/grpc/go-server/profiles/release/log.yml 
b/general/grpc/unary/go-client/profiles/release/log.yml
similarity index 100%
copy from general/grpc/go-server/profiles/release/log.yml
copy to general/grpc/unary/go-client/profiles/release/log.yml
diff --git a/general/grpc/go-client/profiles/test/client.yml 
b/general/grpc/unary/go-client/profiles/test/client.yml
similarity index 100%
rename from general/grpc/go-client/profiles/test/client.yml
rename to general/grpc/unary/go-client/profiles/test/client.yml
diff --git a/general/grpc/go-server/profiles/test/log.yml 
b/general/grpc/unary/go-client/profiles/test/log.yml
similarity index 100%
copy from general/grpc/go-server/profiles/test/log.yml
copy to general/grpc/unary/go-client/profiles/test/log.yml
diff --git a/general/grpc/go-server/app/greeter.go 
b/general/grpc/unary/go-server/app/greeter.go
similarity index 100%
rename from general/grpc/go-server/app/greeter.go
rename to general/grpc/unary/go-server/app/greeter.go
diff --git a/general/grpc/go-client/app/helloworld.pb.go 
b/general/grpc/unary/go-server/app/helloworld.pb.go
similarity index 100%
rename from general/grpc/go-client/app/helloworld.pb.go
rename to general/grpc/unary/go-server/app/helloworld.pb.go
diff --git a/general/grpc/go-client/app/helloworld.proto 
b/general/grpc/unary/go-server/app/helloworld.proto
similarity index 100%
rename from general/grpc/go-client/app/helloworld.proto
rename to general/grpc/unary/go-server/app/helloworld.proto
diff --git a/general/grpc/go-server/app/server.go 
b/general/grpc/unary/go-server/app/server.go
similarity index 100%
rename from general/grpc/go-server/app/server.go
rename to general/grpc/unary/go-server/app/server.go
diff --git a/general/grpc/go-server/app/version.go 
b/general/grpc/unary/go-server/app/version.go
similarity index 100%
rename from general/grpc/go-server/app/version.go
rename to general/grpc/unary/go-server/app/version.go
diff --git a/general/grpc/go-server/assembly/bin/load.sh 
b/general/grpc/unary/go-server/assembly/bin/load.sh
similarity index 100%
rename from general/grpc/go-server/assembly/bin/load.sh
rename to general/grpc/unary/go-server/assembly/bin/load.sh
diff --git a/general/grpc/go-server/assembly/common/app.properties 
b/general/grpc/unary/go-server/assembly/common/app.properties
similarity index 100%
rename from general/grpc/go-server/assembly/common/app.properties
rename to general/grpc/unary/go-server/assembly/common/app.properties
diff --git a/general/grpc/go-server/assembly/common/build.sh 
b/general/grpc/unary/go-server/assembly/common/build.sh
similarity index 100%
rename from general/grpc/go-server/assembly/common/build.sh
rename to general/grpc/unary/go-server/assembly/common/build.sh
diff --git a/general/grpc/go-server/assembly/linux/dev.sh 
b/general/grpc/unary/go-server/assembly/linux/dev.sh
similarity index 100%
rename from general/grpc/go-server/assembly/linux/dev.sh
rename to general/grpc/unary/go-server/assembly/linux/dev.sh
diff --git a/general/grpc/go-server/assembly/linux/release.sh 
b/general/grpc/unary/go-server/assembly/linux/release.sh
similarity index 100%
rename from general/grpc/go-server/assembly/linux/release.sh
rename to general/grpc/unary/go-server/assembly/linux/release.sh
diff --git a/general/grpc/go-server/assembly/linux/test.sh 
b/general/grpc/unary/go-server/assembly/linux/test.sh
similarity index 100%
rename from general/grpc/go-server/assembly/linux/test.sh
rename to general/grpc/unary/go-server/assembly/linux/test.sh
diff --git a/general/grpc/go-server/assembly/mac/dev.sh 
b/general/grpc/unary/go-server/assembly/mac/dev.sh
similarity index 100%
rename from general/grpc/go-server/assembly/mac/dev.sh
rename to general/grpc/unary/go-server/assembly/mac/dev.sh
diff --git a/general/grpc/go-server/assembly/mac/release.sh 
b/general/grpc/unary/go-server/assembly/mac/release.sh
similarity index 100%
rename from general/grpc/go-server/assembly/mac/release.sh
rename to general/grpc/unary/go-server/assembly/mac/release.sh
diff --git a/general/grpc/go-server/assembly/mac/test.sh 
b/general/grpc/unary/go-server/assembly/mac/test.sh
similarity index 100%
rename from general/grpc/go-server/assembly/mac/test.sh
rename to general/grpc/unary/go-server/assembly/mac/test.sh
diff --git a/general/grpc/go-server/assembly/windows/dev.sh 
b/general/grpc/unary/go-server/assembly/windows/dev.sh
similarity index 100%
rename from general/grpc/go-server/assembly/windows/dev.sh
rename to general/grpc/unary/go-server/assembly/windows/dev.sh
diff --git a/general/grpc/go-server/assembly/windows/release.sh 
b/general/grpc/unary/go-server/assembly/windows/release.sh
similarity index 100%
rename from general/grpc/go-server/assembly/windows/release.sh
rename to general/grpc/unary/go-server/assembly/windows/release.sh
diff --git a/general/grpc/go-server/assembly/windows/test.sh 
b/general/grpc/unary/go-server/assembly/windows/test.sh
similarity index 100%
rename from general/grpc/go-server/assembly/windows/test.sh
rename to general/grpc/unary/go-server/assembly/windows/test.sh
diff --git a/general/grpc/go-server/profiles/dev/log.yml 
b/general/grpc/unary/go-server/profiles/dev/log.yml
similarity index 100%
rename from general/grpc/go-server/profiles/dev/log.yml
rename to general/grpc/unary/go-server/profiles/dev/log.yml
diff --git a/general/grpc/go-server/profiles/dev/server.yml 
b/general/grpc/unary/go-server/profiles/dev/server.yml
similarity index 100%
rename from general/grpc/go-server/profiles/dev/server.yml
rename to general/grpc/unary/go-server/profiles/dev/server.yml
diff --git a/general/grpc/go-server/profiles/release/log.yml 
b/general/grpc/unary/go-server/profiles/release/log.yml
similarity index 100%
rename from general/grpc/go-server/profiles/release/log.yml
rename to general/grpc/unary/go-server/profiles/release/log.yml
diff --git a/general/grpc/go-server/profiles/release/server.yml 
b/general/grpc/unary/go-server/profiles/release/server.yml
similarity index 100%
rename from general/grpc/go-server/profiles/release/server.yml
rename to general/grpc/unary/go-server/profiles/release/server.yml
diff --git a/general/grpc/go-server/profiles/test/log.yml 
b/general/grpc/unary/go-server/profiles/test/log.yml
similarity index 100%
rename from general/grpc/go-server/profiles/test/log.yml
rename to general/grpc/unary/go-server/profiles/test/log.yml
diff --git a/general/grpc/go-server/profiles/test/server.yml 
b/general/grpc/unary/go-server/profiles/test/server.yml
similarity index 100%
rename from general/grpc/go-server/profiles/test/server.yml
rename to general/grpc/unary/go-server/profiles/test/server.yml
diff --git a/general/grpc/java-client/build.sh 
b/general/grpc/unary/java-client/build.sh
similarity index 100%
rename from general/grpc/java-client/build.sh
rename to general/grpc/unary/java-client/build.sh
diff --git a/general/grpc/java-client/pom.xml 
b/general/grpc/unary/java-client/pom.xml
similarity index 100%
rename from general/grpc/java-client/pom.xml
rename to general/grpc/unary/java-client/pom.xml
diff --git a/general/grpc/java-client/src/main/assembly/assembly.xml 
b/general/grpc/unary/java-client/src/main/assembly/assembly.xml
similarity index 100%
rename from general/grpc/java-client/src/main/assembly/assembly.xml
rename to general/grpc/unary/java-client/src/main/assembly/assembly.xml
diff --git a/general/grpc/java-client/src/main/assembly/conf/dubbo.properties 
b/general/grpc/unary/java-client/src/main/assembly/conf/dubbo.properties
similarity index 100%
rename from general/grpc/java-client/src/main/assembly/conf/dubbo.properties
rename to general/grpc/unary/java-client/src/main/assembly/conf/dubbo.properties
diff --git a/general/grpc/java-client/src/main/resources/log4j.properties 
b/general/grpc/unary/java-client/src/main/assembly/conf/log4j.properties
similarity index 100%
rename from general/grpc/java-client/src/main/resources/log4j.properties
rename to general/grpc/unary/java-client/src/main/assembly/conf/log4j.properties
diff --git 
a/general/grpc/java-client/src/main/java/com/ikurento/user/Consumer.java 
b/general/grpc/unary/java-client/src/main/java/com/ikurento/user/Consumer.java
similarity index 100%
rename from 
general/grpc/java-client/src/main/java/com/ikurento/user/Consumer.java
rename to 
general/grpc/unary/java-client/src/main/java/com/ikurento/user/Consumer.java
diff --git a/general/grpc/java-server/src/main/proto/UserService.proto 
b/general/grpc/unary/java-client/src/main/proto/UserService.proto
similarity index 100%
rename from general/grpc/java-server/src/main/proto/UserService.proto
rename to general/grpc/unary/java-client/src/main/proto/UserService.proto
diff --git 
a/general/grpc/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
 
b/general/grpc/unary/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
similarity index 100%
rename from 
general/grpc/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
rename to 
general/grpc/unary/java-client/src/main/resources/META-INF/spring/dubbo.consumer.xml
diff --git 
a/general/grpc/java-client/src/main/resources/META-INF/spring/service.xml 
b/general/grpc/unary/java-client/src/main/resources/META-INF/spring/service.xml
similarity index 100%
rename from 
general/grpc/java-client/src/main/resources/META-INF/spring/service.xml
rename to 
general/grpc/unary/java-client/src/main/resources/META-INF/spring/service.xml
diff --git a/general/grpc/java-client/src/main/assembly/conf/log4j.properties 
b/general/grpc/unary/java-client/src/main/resources/log4j.properties
similarity index 100%
rename from general/grpc/java-client/src/main/assembly/conf/log4j.properties
rename to general/grpc/unary/java-client/src/main/resources/log4j.properties
diff --git a/general/grpc/java-server/build.sh 
b/general/grpc/unary/java-server/build.sh
similarity index 100%
rename from general/grpc/java-server/build.sh
rename to general/grpc/unary/java-server/build.sh
diff --git a/general/grpc/java-server/pom.xml 
b/general/grpc/unary/java-server/pom.xml
similarity index 100%
rename from general/grpc/java-server/pom.xml
rename to general/grpc/unary/java-server/pom.xml
diff --git a/general/grpc/java-server/script/debug.sh 
b/general/grpc/unary/java-server/script/debug.sh
similarity index 100%
rename from general/grpc/java-server/script/debug.sh
rename to general/grpc/unary/java-server/script/debug.sh
diff --git a/general/grpc/java-server/src/main/assembly/assembly.xml 
b/general/grpc/unary/java-server/src/main/assembly/assembly.xml
similarity index 100%
rename from general/grpc/java-server/src/main/assembly/assembly.xml
rename to general/grpc/unary/java-server/src/main/assembly/assembly.xml
diff --git a/general/grpc/java-server/src/main/assembly/bin/start.bat 
b/general/grpc/unary/java-server/src/main/assembly/bin/start.bat
similarity index 100%
rename from general/grpc/java-server/src/main/assembly/bin/start.bat
rename to general/grpc/unary/java-server/src/main/assembly/bin/start.bat
diff --git a/general/grpc/java-server/src/main/assembly/bin/start.sh 
b/general/grpc/unary/java-server/src/main/assembly/bin/start.sh
similarity index 100%
rename from general/grpc/java-server/src/main/assembly/bin/start.sh
rename to general/grpc/unary/java-server/src/main/assembly/bin/start.sh
diff --git a/general/grpc/java-server/src/main/assembly/conf/dubbo.properties 
b/general/grpc/unary/java-server/src/main/assembly/conf/dubbo.properties
similarity index 100%
rename from general/grpc/java-server/src/main/assembly/conf/dubbo.properties
rename to general/grpc/unary/java-server/src/main/assembly/conf/dubbo.properties
diff --git a/general/grpc/java-server/src/main/resources/log4j.properties 
b/general/grpc/unary/java-server/src/main/assembly/conf/log4j.properties
similarity index 100%
rename from general/grpc/java-server/src/main/resources/log4j.properties
rename to general/grpc/unary/java-server/src/main/assembly/conf/log4j.properties
diff --git 
a/general/grpc/java-server/src/main/java/com/ikurento/user/Provider.java 
b/general/grpc/unary/java-server/src/main/java/com/ikurento/user/Provider.java
similarity index 100%
rename from 
general/grpc/java-server/src/main/java/com/ikurento/user/Provider.java
rename to 
general/grpc/unary/java-server/src/main/java/com/ikurento/user/Provider.java
diff --git 
a/general/grpc/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
 
b/general/grpc/unary/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
similarity index 100%
rename from 
general/grpc/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
rename to 
general/grpc/unary/java-server/src/main/java/com/ikurento/user/UserProviderImpl.java
diff --git a/general/grpc/java-client/src/main/proto/UserService.proto 
b/general/grpc/unary/java-server/src/main/proto/UserService.proto
similarity index 100%
rename from general/grpc/java-client/src/main/proto/UserService.proto
rename to general/grpc/unary/java-server/src/main/proto/UserService.proto
diff --git 
a/general/grpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
 
b/general/grpc/unary/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
similarity index 100%
rename from 
general/grpc/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
rename to 
general/grpc/unary/java-server/src/main/resources/META-INF/spring/dubbo.provider.xml
diff --git a/general/grpc/java-server/src/main/assembly/conf/log4j.properties 
b/general/grpc/unary/java-server/src/main/resources/log4j.properties
similarity index 100%
rename from general/grpc/java-server/src/main/assembly/conf/log4j.properties
rename to general/grpc/unary/java-server/src/main/resources/log4j.properties
diff --git a/go.mod b/go.mod
index 7b80fca..e8ff748 100644
--- a/go.mod
+++ b/go.mod
@@ -8,11 +8,11 @@ require (
        github.com/emicklei/go-restful/v3 v3.0.0
        github.com/golang/protobuf v1.4.0
        github.com/opentracing/opentracing-go v1.1.0
-       github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5
-       github.com/openzipkin/zipkin-go v0.2.2
+       github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 // indirect
+       github.com/openzipkin/zipkin-go v0.2.2 // indirect
        github.com/pkg/errors v0.9.1
        github.com/prometheus/client_golang v1.1.0
-       github.com/uber/jaeger-client-go v2.22.1+incompatible
+       github.com/uber/jaeger-client-go v2.22.1+incompatible // indirect
        github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
        google.golang.org/grpc v1.26.0
 )

Reply via email to