


package main
import (
"context"
"fmt"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/sd"
"github.com/go-kit/kit/sd/consul"
httptransport "github.com/go-kit/kit/transport/http"
consulapi "github.com/hashicorp/consul/api"
"gomicro2/Services"
"io"
"net/url"
"os"
)
func main() {
//第一步創建client
{
config := consulapi.DefaultConfig()
config.Address = "localhost:8500"
api_client, _ := consulapi.NewClient(config)
client:= consul.NewClient(api_client)
var logger log.Logger
{
logger = log.NewLogfmtLogger(os.Stdout)
var Tag = []string{"primary"}
//第二部創建一個consul的實例
instancer := consul.NewInstancer(client, logger, "userservice", Tag, true) //最后的true表示只有通過健康檢查的服務才能被得到
{
factory := func(service_url string) (endpoint.Endpoint, io.Closer, error) { //factory定義了如何獲得服務端的endpoint,這里的service_url是從consul中讀取到的service的address我這里是192.168.3.14:8000
tart, _ := url.Parse("http://" + service_url) //server ip +8080真實服務的地址
return httptransport.NewClient("GET", tart, Services.GetUserInfo_Request, Services.GetUserInfo_Response).Endpoint(), nil, nil //我再GetUserInfo_Request里面定義了訪問哪一個api把url拼接成了http://192.168.3.14:8000/v1/user/{uid}的形式
}
endpointer := sd.NewEndpointer(instancer, factory, logger)
endpoints, _ := endpointer.Endpoints()
fmt.Println("服務有", len(endpoints), "條")
getUserInfo := endpoints[0] //寫死獲取第一個
ctx := context.Background() //第三步:創建一個context上下文對象
//第四步:執行
res, err := getUserInfo(ctx, Services.UserRequest{Uid: 101})
if err != nil {
fmt.Println(err)
os.Exit(1)
}
//第五步:斷言,得到響應值
userinfo := res.(Services.UserResponse)
fmt.Println(userinfo.Result)
}
}
}
}