gpt4 book ai didi

go - 领事健康检查(所有服务检查失败)

转载 作者:行者123 更新时间:2023-12-04 17:09:09 25 4
gpt4 key购买 nike

我已阅读与此问题相关的类似问题。它以沮丧告终。

  • 我用 docker 安装了 consul。我运行以下命令。 docker run --name consul -d -p 8500:8500 consul ,然后我使用postman PUT方法测试了服务的注册是否有效,但没有启用健康检查,该服务在consul web UI中成功注册到consul。现在一切都按预期进行。
  • 我有一个用 go 编写的本地 GRPC 服务。本地服务地址为127.0.0.1:8880 . consul服务器地址是127.0.0.1:8500 .然后服务注册到consul,但是健康检查没用,得到All service failing .然后我尝试了以下操作:

  • 使用本地 IP 地址,即 192.168.0.152:8500作为领事服务器的地址和192.168.0.152:8880作为 gprc 服务的地址。不工作。


  • 使用本地 IP 地址,即 192.168.0.152:8500作为领事服务器的地址和127.0.0.1:8880作为 gprc 服务的地址。不工作。


  • 检查 HTTP 服务是否有效。有一个用 GIN 编写的本地 Web 服务。端口为 1010。AgentServiceCheck 正在跟进。上面的方法试过了。不工作。

  • check := &api.AgentServiceCheck{
    HTTP: "http://127.0.0.1:1010/health",
    Timeout: "5s",
    Interval: "5s",
    DeregisterCriticalServiceAfter: "15s",
    }

  • 运行 consul members获取

  • Node          Address         Status  Type    Build   Protocol  DC   Segment
    aae2e6ac1ff8 127.0.0.1:8301 alive server 1.10.3 2 dc1 <all>
    更新:
  • 更改后"127.0.0.1:8880/health""127.0.0.1:8880"在以下配置中,它出人意料地有效。不知道为什么..
  • check := &api.AgentServiceCheck{
    GRPC: "127.0.0.1:8880",
    Timeout: "5s",
    Interval: "5s",
    DeregisterCriticalServiceAfter: "10s",
    }
    向 consul 服务器注册 grpc 服务并启用健康检查的代码如下:
    func main() {
    IP := flag.String("IP", "127.0.0.1", "IP address")
    Port := flag.Int("Port", 8880, "Port")
    flag.Parse()


    // initialize logger, configuation file and database
    initialize.InitLogger()
    initialize.InitConfig()
    initialize.InitDB()
    zap.S().Info(global.ServerConfig)
    zap.S().Info("IP: ", *IP)
    zap.S().Info("Port: ", *Port)


    server := grpc.NewServer()
    proto.RegisterUserServer(server, &handler.UserServer{})
    l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", *IP, *Port))
    if err != nil {
    panic("failed to listen" + err.Error())
    }

    // register health check
    grpc_health_v1.RegisterHealthServer(server, health.NewServer())

    cfg := api.DefaultConfig()

    // get cfg.address from configuration file, in which host is 127.0.0.1 port 8880
    cfg.Address = fmt.Sprintf("%s:%d", global.ServerConfig.ConsulInfo.Host,
    global.ServerConfig.ConsulInfo.Port)
    client, err := api.NewClient(cfg)
    if err != nil {
    panic(err)
    }

    // generate health check instance
    check := &api.AgentServiceCheck{
    GRPC: "127.0.0.1:8880/health",
    Timeout: "5s",
    Interval: "5s",
    DeregisterCriticalServiceAfter: "15s",
    }
    registration := new(api.AgentServiceRegistration)
    registration.Name = global.ServerConfig.Name
    registration.ID = global.ServerConfig.Name
    registration.Address = "127.0.0.1"
    registration.Port = 8880
    registration.Tags = []string{"user-srv", "user"}
    registration.Check = check

    err = client.Agent().ServiceRegister(registration)
    if err != nil {
    panic(err)
    }

    err = server.Serve(l)
    if err != nil {
    panic("failed to start grpc" + err.Error())
    }

    最佳答案

    根据 Consul API ( https://www.consul.io/api-docs/agent/check#grpc ) 的文档,似乎 GRPC您正在使用的字段

    supports the standard gRPC health checking protocol.


    因此,您只需要在那里定义 gRPC 端点,协议(protocol)就会处理健康检查。
    您可以通过定义 HTTP 来选择退出以使用 HTTP 端点进行健康检查。代理服务检查配置中的字段。您可以在文档 ( https://www.consul.io/api-docs/agent/check#http ) 中找到更多相关信息

    关于go - 领事健康检查(所有服务检查失败),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69840140/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com