調用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)
}