3.2.1 gRPC介绍
JupitergRPCJupitergRPC
gRPC
govern
3.2.2 配置规范
3.2.3 直连的gRPC
3.2.3.1 启动gRPC服务
配置项
[jupiter.server.grpc]port = 9091
代码
func main() {eng := NewEngine()eng.SetGovernor("127.0.0.1:9092")if err := eng.Run(); err != nil {xlog.Panic(err.Error())}}type Engine struct {jupiter.Application}func NewEngine() *Engine {eng := &Engine{}if err := eng.Startup(eng.serveGRPC,); err != nil {xlog.Panic("startup", xlog.Any("err", err))}return eng}func (eng *Engine) serveGRPC() error {server := xgrpc.StdConfig("grpc").Build()helloworld.RegisterGreeterServer(server.Server, new(Greeter))return eng.Serve(server)}type Greeter struct{}func (g Greeter) SayHello(context context.Context, request *helloworld.HelloRequest) (*helloworld.HelloReply, error) {return &helloworld.HelloReply{Message: "Hello Jupiter",}, nil}
go run main.go --config=config.tomlgRPC9091
3.2.3.2 启动gRPC客户端
配置项
[jupiter.client.directserver]address = "127.0.0.1:9091"balancerName = "round_robin" # 默认值block = false # 默认值dialTimeout = "0s" # 默认值
代码
func main() {eng := NewEngine()if err := eng.Run(); err != nil {xlog.Error(err.Error())}}type Engine struct {jupiter.Application}func NewEngine() *Engine {eng := &Engine{}if err := eng.Startup(eng.consumer,); err != nil {xlog.Panic("startup", xlog.Any("err", err))}return eng}func (eng *Engine) consumer() error {conn := grpc.StdConfig("directserver").Build()client := helloworld.NewGreeterClient(conn)for {resp, err := client.SayHello(context.Background(), &helloworld.HelloRequest{Name: "jupiter",})if err != nil {xlog.Error(err.Error())} else {xlog.Info("receive response", xlog.String("resp", resp.Message))}time.Sleep(1 * time.Second)}return nil}
gRPCgRPCgo run main.go --config=config.tomlhellogRPCHello Jupiter
3.2.4 注册ETCD的gRPC服务
3.2.4.2 启动gRPC服务
配置项
[jupiter.server.grpc]port = 9091[jupiter.registry.wh]connectTimeout = "1s"endpoints=["127.0.0.1:2379"]secure = false
代码
func main() {eng := NewEngine()eng.SetRegistry(compound_registry.New(etcdv3_registry.StdConfig("wh").BuildRegistry(),),)eng.SetGovernor("127.0.0.1:9092")if err := eng.Run(); err != nil {xlog.Error(err.Error())}}type Engine struct {jupiter.Application}func NewEngine() *Engine {eng := &Engine{}if err := eng.Startup(eng.serveGRPC,); err != nil {xlog.Panic("startup", xlog.Any("err", err))}return eng}func (eng *Engine) serveGRPC() error {server := xgrpc.StdConfig("grpc").Build()helloworld.RegisterGreeterServer(server.Server, new(Greeter))return eng.Serve(server)}type Greeter struct{}func (g Greeter) SayHello(context context.Context, request *helloworld.HelloRequest) (*helloworld.HelloReply, error) {return &helloworld.HelloReply{Message: "Hello Jupiter",}, nil}
go run main.go --config=config.tomlgRPC9091keyvalue
3.2.4.2 启动gRPC客户端
配置项
[jupiter.registry.wh]connectTimeout = "1s"endpoints=["127.0.0.1:2379"]secure = false[jupiter.client.etcdserver]address = "etcd:///main"balancerName = "round_robin" # 默认值block = false # 默认值dialTimeout = "0s" # 默认值
代码
func main() {eng := NewEngine()if err := eng.Run(); err != nil {xlog.Error(err.Error())}}type Engine struct {jupiter.Application}func NewEngine() *Engine {eng := &Engine{}if err := eng.Startup(eng.initResolver,eng.consumer,); err != nil {xlog.Panic("startup", xlog.Any("err", err))}return eng}func (eng *Engine) initResolver() error {resolver.Register(etcdv3_registry.StdConfig("wh").BuildResolver())return nil}func (eng *Engine) consumer() error {conn := grpc.StdConfig("etcdserver").Build()client := helloworld.NewGreeterClient(conn)for {resp, err := client.SayHello(context.Background(), &helloworld.HelloRequest{Name: "jupiter",})if err != nil {xlog.Error(err.Error())} else {xlog.Info("receive response", xlog.String("resp", resp.Message))}time.Sleep(1 * time.Second)}return nil}
go run main.go --config=config.tomlgRPCmainETCD/jupiter/main
hellogRPCHello Jupiter