go遠程調用grpc

1.rpc:本地方法調用與網絡通信技術

server:

type MathUser struct {
}
type MathRequest struct {
   Min int
   Mix int
}

type MathResponse struct {
   Result int
}

func (m *MathUser) Add(r MathRequest, b *MathResponse) error {
   b.Result = r.Min + r.Mix
   fmt.Println("server_result")
   return nil
}
func main() {

   u := new(MathUser)
   rpc.Register(u)
   rpc.HandleHTTP()
   listen, err := net.Listen("tcp", ":8089")
   if err != nil {
      panic(err)
   }
   go http.Serve(listen, nil)
   time.Sleep(time.Duration(20) * time.Second)
}

Client

type UserReq struct {
   Min int
   Mix int
}
type UserRep struct {
   Result int
}

func main() {

   var rep UserRep
   ret := UserReq{1, 2}
   conn, err1 := rpc.DialHTTP("tcp", ":8089")
   if err1 != nil {
      panic(err1)
   }
   err := conn.Call("MathUser.Add", ret, &rep)
   if err != nil {
      panic(err)
   }
   fmt.Println("client_result:", rep.Result)
}——————————————————————————
2.grpc(rpc+protobuf)
   message.proto
syntax = "proto3";
package message;

//訂單請求參數
message OrderRequest {
    string orderId = 1;
    int64 timeStamp = 2;
}

//訂單信息
message OrderInfo {
    string OrderId = 1;
    string OrderName = 2;
    string OrderStatus = 3;
}

protoc生成message.pd.go

server

//訂單服務
type OrderService struct {
}

func (os *OrderService) GetOrderInfo(request message.OrderRequest, response *message.OrderInfo) error {
   //201907310003
   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: "未付款"},
   }
   fmt.Println("test")
   *response = message.OrderInfo{OrderId: "0", OrderName: "test", OrderStatus: "訂單信息異常"}
   current := time.Now().Unix()
   if (request.TimeStamp > current) {
      *response = message.OrderInfo{OrderId: "0", OrderName: "", OrderStatus: "訂單信息異常"}
   } else {
      result := orderMap[request.OrderId] //201907310003
      if result.OrderId != "" {
         *response = orderMap[request.OrderId]
      } else {
         return nil
      }
   }
   return nil
}

Client

client, err := rpc.DialHTTP("tcp", "localhost:8081")
if err != nil {
   panic(err.Error())
}

timeStamp := time.Now().Unix()
request := message.OrderRequest{OrderId: "201907310001", TimeStamp: timeStamp}

var response *message.OrderInfo
err = client.Call("OrderService.GetOrderInfo", request, &response)
if err != nil {
   panic(err.Error())
}
fmt.Println(*response)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章