调用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)
}
10.调用http api:引入protobuf、生成参数和响应模型