[go-zero] 简单微服务调用
在go-zero框架中,微服务之间的调用通常使用rpc(远程过程调用)。以下是一个简单的例子,展示了如何在两个服务之间进行rpc调用。
首先,定义rpc接口:
// api/user/user.go
type User struct {
UserId int64 `json:"user_id"`
Name string `json:"name"`
}
type UserService interface {
GetUser(userId int64) (*User, error)
}
实现rpc服务端:
// service/user/user.go
type UserServiceLogic struct {
svcCtx *svc.ServiceContext
}
func (l *UserServiceLogic) GetUser(req *user.UserReq) (*user.User, error) {
// 实现获取用户逻辑
user := &user.User{
UserId: req.UserId,
Name: "John Doe",
}
return user, nil
}
注册rpc服务:
// service/user/handler.go
func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
userHandler := user.NewUserServiceHandler(serverCtx)
engine.AddRoute(http.MethodGet, "/user/{userId}", userHandler.GetUser)
// 注册其他handler
}
在rpc客户端调用:
// cmd/caller/main.go
func main() {
client := user.NewUserService("svc.user", client.UseEtcdAsSource("http://localhost:2379"))
user, err := client.GetUser(context.Background(), &user.UserReq{UserId: 1})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Received user: %v\n", user)
}
在这个例子中,我们定义了一个简单的UserService,并在UserServiceLogic中实现了GetUser方法。然后我们在rpc服务端注册了这个逻辑处理器,并在客户端使用etcd作为服务发现,调用远程服务获取用户信息。
注意:这只是一个简化的例子,实际的go-zero框架应用可能涉及更多的配置和细节。
评论已关闭