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

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

  1. 我用 docker 安装了领事。我运行以下命令。docker run --name consul -d -p 8500:8500 consul,然后我测试了使用postman PUT方法注册服务是否有效,但没有启用健康检查,服务在consul web UI中成功注册到consul。现在一切都按预期工作。

  2. 我有一个用 go 编写的本地 GRPC 服务。本地服务地址为127.0.0.1:8880。领事服务器的地址是127.0.0.1:8500。然后将服务注册到 consul,但健康检查不起作用,获取All service failing. 然后我尝试了以下操作:


    1. 使用本地 IP 地址192.168.0.152:8500作为 consul 服务器192.168.0.152:8880的地址和 gprc 服务的地址。不工作。


    1. 使用本地 IP 地址192.168.0.152:8500作为 consul 服务器127.0.0.1:8880的地址和 gprc 服务的地址。不工作。


    1. 检查 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",

   }

将 grpc 服务注册到 consul 服务器并启用健康检查的代码如下:


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()

  

   }


斯蒂芬大帝
浏览 208回答 2
2回答

墨色风雨

根据 Consul API (&nbsp;https://www.consul.io/api-docs/agent/check#grpcGRPC&nbsp;) 的文档,您正在使用的字段似乎支持标准的 gRPC 健康检查协议。因此,您只需在此处定义 gRPC 端点,协议将处理健康检查。HTTP您可以通过在代理服务检查配置中定义字段来选择退出以使用 HTTP 端点进行健康检查。您可以在文档中找到更多信息(https://www.consul.io/api-docs/agent/check#http)

绝地无双

关于“正确”的代码有几个问题:consul的地址等于grpc服务?不是cfg.Address领事Addr吗?// get cfg.address from configuration file, in which host is 127.0.0.1 port 8880&nbsp; &nbsp;cfg.Address = fmt.Sprintf("%s:%d", global.ServerConfig.ConsulInfo.Host,&nbsp; &nbsp; &nbsp; global.ServerConfig.ConsulInfo.Port)&nbsp; &nbsp;client, err := api.NewClient(cfg)为什么正确的代码显示GRPC:"127.0.0.1:8880/health",结论是“在以下配置中将“127.0.0.1:8880/health”更改为“127.0.0.1:8880”后,它出奇地有效。不知道为什么......”。这是不一致的!!!!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go