Etcd 注册中心
- 访问http://127.0.0.1:8082/service/user
- 如下
- 从注册中心查到 user 服务相关信息
构建client 从注册中心 拉取 user服务的地址信息
- 源码
package main
import (
"fmt"
"github.com/micro/go-micro/v2/client/selector"
"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-micro/v2/registry/etcd"
"log"
)
func main() {
reg := etcd.NewRegistry(
registry.Addrs("127.0.0.1:2379"),
)
if userService, err := reg.GetService("user");err != nil {
log.Fatal(err)
} else {
next:=selector.Random(userService)
node,err := next()
if err!=nil {
log.Fatal(err)
}
fmt.Println(node.Id, node.Address, node.Metadata)
}
}
输出
745efac9-a412-4c68-9f26-b71f4a0338da 192.168.137.1:8000 map[]
构建一个完整的 server - client
- server
package main
import (
"github.com/micro/go-micro/v2"
"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-micro/v2/registry/etcd"
Models "go-micro-service/models"
server2 "go-micro-service/service/server"
)
func main() {
reg := etcd.NewRegistry(
registry.Addrs("127.0.0.1:2379"),
)
server := micro.NewService(
micro.Name("user.server"),
micro.Registry(reg),
)
server.Init()
Models.RegisterUserListServiceHandler(server.Server(), new(server2.UserService))
server.Run()
}
- UserService
package server
import (
"context"
"github.com/micro/go-micro/v2/util/log"
"go-micro-service/models"
"strconv"
)
type UserService struct {
}
func NewUser(id int32, name string) *Models.UserModel {
return &Models.UserModel{UserID: id, Name: name}
}
func NewUserList(size int32) []*Models.UserModel {
ret := make([]*Models.UserModel, 0)
for i := int32(0); i < size; i++ {
ret = append(ret, NewUser(i, "user"+strconv.FormatInt(int64(i), 10)))
}
return ret
}
func (*UserService) GetUserList(ctx context.Context, UserListReq *Models.UsersRequest, UserListResp *Models.UserListResponse) error {
log.Info("GetUserList")
UserListResp.Data = NewUserList(UserListReq.Size)
return nil
}
- client
package main
import (
"context"
"fmt"
"github.com/micro/go-micro/v2"
"github.com/micro/go-micro/v2/registry"
"github.com/micro/go-micro/v2/registry/etcd"
Models "go-micro-service/models"
"log"
)
func main() {
server := micro.NewService(
micro.Name("user.client"),
micro.Registry(etcd.NewRegistry(
registry.Addrs("127.0.0.1:2379"),
)),
)
userServiceClient := Models.NewUserListService("user.server", server.Client())
resp, e := userServiceClient.GetUserList(context.Background(), &Models.UsersRequest{Size: 5})
if e != nil {
log.Fatal(e)
}
fmt.Println(resp)
for r := range resp.Data {
fmt.Println(resp.Data[r].UserID, resp.Data[r].Name)
}
}