grpc客戶端和服務端利用protoc進行通訊
阿新 • • 發佈:2021-11-10
./message/message.proto
syntax = "proto3"; option go_package="./;message"; package message; //訂單請求引數 message OrderRequest { string orderId = 1; //1,2編號 int64 timeStamp = 2; } //訂單資訊 message OrderInfo { string OrderId = 1; string OrderName = 2; string OrderStatus = 3; } //訂單服務service定義 service OrderService{ rpc GetOrderInfo(OrderRequest) returns (OrderInfo); }//執行:protoc --go_out=plugins=grpc:. message.proto //生成:message.pb.go
./Client.go
package main import ( "WLBC/GRPC2/message" "context" "fmt" "google.golang.org/grpc" "time" ) func main(){ conn, err := grpc.Dial("localhost:8090", grpc.WithInsecure()) if err != nil { panic(err.Error()) } defer conn.Close() orderServiceClient := message.NewOrderServiceClient(conn) orderRequest := &message.OrderRequest{OrderId: "201907300001", TimeStamp: time.Now().Unix()} orderInfo, err := orderServiceClient.GetOrderInfo(context.Background(), orderRequest) if orderInfo != nil { fmt.Println(orderInfo.GetOrderId()) fmt.Println(orderInfo.GetOrderName()) fmt.Println(orderInfo.GetOrderStatus()) } }
./Server.go
package main import ( "WLBC/GRPC2/message" "context" "errors" "fmt" "google.golang.org/grpc" "net" "time" ) type OrderServiceImpl struct { } //具體的方法實現 func (os *OrderServiceImpl) GetOrderInfo(ctx context.Context, request *message.OrderRequest) (*message.OrderInfo, error) { orderMap := map[string]message.OrderInfo{ "201907300001": message.OrderInfo{OrderId: "201907300001", OrderName: "衣服", OrderStatus: "已付款"}, "201907310001": message.OrderInfo{OrderId: "201907310001", OrderName: "零食", OrderStatus: "已付款"}, "201907310002": message.OrderInfo{OrderId: "201907310002", OrderName: "食品", OrderStatus: "未付款"}, } var response *message.OrderInfo current := time.Now().Unix() if request.TimeStamp > current { *response = message.OrderInfo{OrderId: "0", OrderName: "", OrderStatus: "訂單資訊異常"} } else { result := orderMap[request.OrderId] if result.OrderId != "" { fmt.Println(result) return &result, nil } else { return nil, errors.New("server error") } } return response, nil } func main() { server := grpc.NewServer() message.RegisterOrderServiceServer(server, new(OrderServiceImpl)) lis, err := net.Listen("tcp", ":8090") if err != nil { panic(err.Error()) } server.Serve(lis) }Mamba never out