70 lines
1.2 KiB
Go
70 lines
1.2 KiB
Go
|
|
// client.go
|
|||
|
|
package main
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"context"
|
|||
|
|
"log"
|
|||
|
|
"time"
|
|||
|
|
|
|||
|
|
"go-micro.dev/v4"
|
|||
|
|
"go-micro.dev/v4/client"
|
|||
|
|
"go-micro.dev/v4/registry"
|
|||
|
|
"go.etcd.io/etcd/client/v3"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
type LoginRequest struct {
|
|||
|
|
Username string
|
|||
|
|
Password string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type LoginResponse struct {
|
|||
|
|
Token string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func main() {
|
|||
|
|
// 1. 创建 etcd 客户端
|
|||
|
|
etcdClient, err := clientv3.New(clientv3.Config{
|
|||
|
|
Endpoints: []string{"127.0.0.1:2379"},
|
|||
|
|
DialTimeout: 5 * time.Second,
|
|||
|
|
})
|
|||
|
|
if err != nil {
|
|||
|
|
log.Fatal(err)
|
|||
|
|
}
|
|||
|
|
defer etcdClient.Close()
|
|||
|
|
|
|||
|
|
// 2. 创建注册中心
|
|||
|
|
reg := registry.NewRegistry(
|
|||
|
|
registry.Addrs("127.0.0.1:2379"),
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// 3. 创建微服务客户端
|
|||
|
|
service := micro.NewService(
|
|||
|
|
micro.Registry(reg),
|
|||
|
|
)
|
|||
|
|
service.Init()
|
|||
|
|
|
|||
|
|
// 4. 创建 RPC 客户端
|
|||
|
|
userService := micro.NewService(
|
|||
|
|
micro.Name("user.client"),
|
|||
|
|
micro.Registry(reg),
|
|||
|
|
)
|
|||
|
|
userService.Init()
|
|||
|
|
|
|||
|
|
// 5. 调用远程服务
|
|||
|
|
req := client.NewRequest(
|
|||
|
|
"user.service", // 服务名
|
|||
|
|
"UserService.Login", // 方法名
|
|||
|
|
&LoginRequest{ // 请求参数
|
|||
|
|
Username: "admin",
|
|||
|
|
Password: "1234567",
|
|||
|
|
},
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
rsp := &LoginResponse{}
|
|||
|
|
if err := userService.Client().Call(context.Background(), req, rsp); err != nil {
|
|||
|
|
log.Fatal("调用失败:", err)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
log.Printf("登录成功,Token: %s", rsp.Token)
|
|||
|
|
}
|