【grpc】3.健康检查
- 服务端提供一个接口,客户端或者注册中心可以通过改接口确认服务端是否正常提供服务
- gRPC 提供了健康检查服务来检查服务的健康状态。健康检查服务是一个特殊的服务,它包含一个名为
grpc.health.v1.Health
的预定义服务。该服务提供了一个Check
方法,用于检查指定服务的健康状态。
# 官方实现
https://pkg.go.dev/google.golang.org/grpc/health
- 包名:google.golang.org/grpc/health
# 代码示例
server.go
package main import ( helloproto "bigox-rpc/proto" "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/health" "google.golang.org/grpc/health/grpc_health_v1" "log" "net" ) type GreeterServer struct { helloproto.UnimplementedGreeterServer } func (g *GreeterServer) Hello(ctx context.Context, req *helloproto.Req) (*helloproto.Res, error) { return &helloproto.Res{Msg: req.Msg}, nil } func main() { // 创建 gRPC 服务器 server := grpc.NewServer() // 创建服务 greeterServer := GreeterServer{} // 创建健康检查服务 healthServer := health.NewServer() // 注册服务 helloproto.RegisterGreeterServer(server, &greeterServer) grpc_health_v1.RegisterHealthServer(server, healthServer) // 创建tcp lis, err := net.Listen("tcp", fmt.Sprintf(":8080")) if err != nil { panic("failed to listen: " + err.Error()) } // 启动 gRPC 服务器 if err := server.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42client.go
package main import ( helloproto "bigox-rpc/proto" "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/health/grpc_health_v1" ) func main() { conn, err := grpc.Dial("127.0.0.1:8080", grpc.WithInsecure()) if err != nil { panic(err) } defer conn.Close() c := helloproto.NewGreeterClient(conn) r, err := c.Hello(context.Background(), &helloproto.Req{Msg: "liushahe"}) if err != nil { panic(err) } hc := grpc_health_v1.NewHealthClient(conn) hr, err := hc.Check(context.Background(), &grpc_health_v1.HealthCheckRequest{}) if err != nil { panic(err) } fmt.Println(r.Msg) fmt.Println(hr) }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
上次更新: 2023/05/04, 15:30:48