Variables

  1. var (
  2. HealthCheckResponse_ServingStatus_name = map[int32]string{
  3. 0: "UNKNOWN",
  4. 1: "SERVING",
  5. 2: "NOT_SERVING",
  6. 3: "SERVICE_UNKNOWN",
  7. }
  8. HealthCheckResponse_ServingStatus_value = map[string]int32{
  9. "UNKNOWN": 0,
  10. "SERVING": 1,
  11. "NOT_SERVING": 2,
  12. "SERVICE_UNKNOWN": 3,
  13. }
  14. )

type HealthServer

  1. type HealthServer interface {
  2. Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error)
  3. Watch(*HealthCheckRequest, Health_WatchServer) error
  4. }

type HealthClient

  1. type HealthClient interface {
  2. Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error)
  3. Watch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (Health_WatchClient, error)
  4. }

type Health_WatchClient

  1. type Health_WatchClient interface {
  2. Recv() (*HealthCheckResponse, error)
  3. grpc.ClientStream
  4. }

type Health_WatchServer

  1. type Health_WatchServer interface {
  2. Send(*HealthCheckResponse) error
  3. grpc.ServerStream
  4. }

type HealthCheckResponse

  1. type HealthCheckResponse struct {
  2. Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
  3. // contains filtered or unexported fields
  4. }
  5. func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus

type HealthCheckResponse_ServingStatus

  1. type HealthCheckResponse_ServingStatus int32
  2. const (
  3. HealthCheckResponse_UNKNOWN HealthCheckResponse_ServingStatus = 0
  4. HealthCheckResponse_SERVING HealthCheckResponse_ServingStatus = 1
  5. HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2
  6. HealthCheckResponse_SERVICE_UNKNOWN HealthCheckResponse_ServingStatus = 3 // Used only by the Watch method.
  7. )

包函数

  1. func NewHealthClient(cc grpc.ClientConnInterface) HealthClient
  2. func RegisterHealthServer(s grpc.ServiceRegistrar, srv HealthServer)

举例(自定义cs端)

client

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "google.golang.org/grpc"
  6. "google.golang.org/grpc/health/grpc_health_v1"
  7. "sync"
  8. )
  9. func main() {
  10. c := NewClient()
  11. rsp, err := c.Check(context.Background(), &grpc_health_v1.HealthCheckRequest{}, nil)
  12. fmt.Println(err)
  13. fmt.Println(rsp)
  14. }
  15. var (
  16. mutex sync.Mutex
  17. instance *Client
  18. )
  19. type Client struct {
  20. conn *grpc.ClientConn
  21. healthClient grpc_health_v1.HealthClient
  22. }
  23. func NewClient() *Client {
  24. if instance == nil {
  25. mutex.Lock()
  26. defer mutex.Unlock()
  27. if instance == nil {
  28. instance = &Client{}
  29. }
  30. }
  31. return instance
  32. }
  33. func (c *Client) getConn() (*grpc.ClientConn, error) {
  34. if c.conn == nil {
  35. target := fmt.Sprintf("%s:%d", "127.0.0.1", 8000)
  36. conn, err := grpc.Dial(
  37. target,
  38. grpc.WithInsecure(),
  39. )
  40. if err != nil {
  41. return nil, err
  42. }
  43. c.conn = conn
  44. }
  45. return c.conn, nil
  46. }
  47. func (c *Client) getHealthClient() (grpc_health_v1.HealthClient, error) {
  48. if c.healthClient == nil {
  49. mutex.Lock()
  50. defer mutex.Unlock()
  51. if c.healthClient == nil {
  52. conn, err := c.getConn()
  53. if err != nil {
  54. return nil, err
  55. }
  56. c.healthClient = grpc_health_v1.NewHealthClient(conn)
  57. }
  58. }
  59. return c.healthClient, nil
  60. }
  61. func (c *Client) Check(ctx context.Context, req *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (*grpc_health_v1.HealthCheckResponse, error) {
  62. client, err := c.getHealthClient()
  63. if err != nil {
  64. return nil, err
  65. }
  66. fmt.Println("check")
  67. return client.Check(ctx, req)
  68. }
  69. func (c *Client) Watch(ctx context.Context, req *grpc_health_v1.HealthCheckRequest, opts ...grpc.CallOption) (grpc_health_v1.Health_WatchClient, error) {
  70. client, err := c.getHealthClient()
  71. if err != nil {
  72. return nil, err
  73. }
  74. return client.Watch(ctx, req)
  75. }

service

  1. package main
  2. import (
  3. "context"
  4. "google.golang.org/grpc"
  5. "google.golang.org/grpc/grpclog"
  6. "google.golang.org/grpc/health/grpc_health_v1"
  7. "google.golang.org/grpc/reflection"
  8. "log"
  9. "net"
  10. "os"
  11. )
  12. func main() {
  13. grpclog.SetLoggerV2(grpclog.NewLoggerV2(os.Stdout, os.Stdout, os.Stdout))
  14. lis, err := net.Listen("tcp", ":8000")
  15. if err != nil {
  16. log.Fatalf("failed to listen: %v", err)
  17. }
  18. grpcServer := grpc.NewServer()
  19. grpc_health_v1.RegisterHealthServer(grpcServer, NewGrpcHealthChecker())
  20. reflection.Register(grpcServer)
  21. if err := grpcServer.Serve(lis); err != nil {
  22. log.Fatalf("failed to serve: %v", err)
  23. }
  24. }
  25. type GrpcHealthChecker struct{}
  26. func (s *GrpcHealthChecker) Check(ctx context.Context, req *grpc_health_v1.HealthCheckRequest) (*grpc_health_v1.HealthCheckResponse, error) {
  27. grpclog.Info("Serving the Check request for health check")
  28. return &grpc_health_v1.HealthCheckResponse{
  29. Status: grpc_health_v1.HealthCheckResponse_SERVING,
  30. }, nil
  31. }
  32. func (s *GrpcHealthChecker) Watch(req *grpc_health_v1.HealthCheckRequest, server grpc_health_v1.Health_WatchServer) error {
  33. grpclog.Info("Serving the Watch request for health check")
  34. return server.Send(&grpc_health_v1.HealthCheckResponse{
  35. Status: grpc_health_v1.HealthCheckResponse_SERVING,
  36. })
  37. }
  38. func NewGrpcHealthChecker() *GrpcHealthChecker {
  39. return &GrpcHealthChecker{}
  40. }