通过轮训方式调用远程服务
直接代码
func main() {
config := consulapi.DefaultConfig()
config.Address = "192.168.1.8:8500"
apiClient, err := consulapi.NewClient(config)
if err != nil {
panic(err)
}
client := consul.NewClient(apiClient)
var logger log.Logger
logger = log.NewLogfmtLogger(os.Stdout)
tags := []string{"user"}
instance := consul.NewInstancer(client, logger, "user", tags, true)
factory := func(serviceURL string) (endpoint2.Endpoint, io.Closer, error) {
target, _ := url.Parse("http://" + serviceURL)
return transporthttp.NewClient("GET", target, transport2.GetUserInfoRequest, transport2.GetUserInfoResponse).Endpoint(), nil, nil
}
endpointer := sd.NewEndpointer(instance, factory, logger)
ends, _ := endpointer.Endpoints()
fmt.Println("个服务", len(ends))
myLb := lb.NewRoundRobin(endpointer)
for {
getUserInfo, _ := myLb.Endpoint()
resp, err := getUserInfo(context.Background(), endpoint.UserRequest{Uid: 101})
if err != nil {
panic(err)
}
userResponse := resp.(endpoint.UserResponse)
fmt.Println(userResponse.Result)
time.Sleep(time.Second * 1)
}
}