10.調用http api:引入protobuf、生成參數和響應模型


調用http api:引入protobuf、生成參數和響應模型,定義proto文件

syntax = "proto3";
package Models;

message ProdModel {
    // @inject_tag: json:"pid"
    int32 ProdID = 1;
    // @inject_tag: json:"pname"
    string ProdName = 2;
}

message ProdRequest {
    int32 size = 1;
}

message ProdListResponse {
    repeated ProdModel data = 1;
}

根據proto文件生成pb文件

protoc --micro_out=../ --go_out=../ Prods.proto

在客戶端中使用生成的pb文件中的model去請求服務端

package main

import (
    "context"
    "fmt"
    "github.com/micro/go-micro/client"
    "github.com/micro/go-micro/client/selector"
    "github.com/micro/go-micro/registry"
    myhttp "github.com/micro/go-plugins/client/http"
    "github.com/micro/go-plugins/registry/consul"
    "go-micro/Models"
    "log"
)

func callAPI(s selector.Selector) {
    myCli := myhttp.NewClient(
        client.Selector(s),
        client.ContentType("application/json"),
    )
    req := myCli.NewRequest("prodservice", "/v1/prods", Models.ProdRequest{Size: 2}) //使用生成的pb文件中的結構體作為參數封裝到請求體中

    var resp Models.ProdListResponse  //使用生成的響應體去解析服務端返回數據
    err := myCli.Call(context.Background(), req, &resp)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(resp)
}

func main() {
    consulReg := consul.NewRegistry(
        registry.Addrs("localhost:8500"),
    )
    mySelector := selector.NewSelector(
        selector.Registry(consulReg),
        selector.SetStrategy(selector.RoundRobin), //設置查詢策略,這里是輪詢
    )
    callAPI(mySelector)
}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM