为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
斯蒂芬大帝 2022-10-10 19:10:14
我已阅读与此问题相关的类似问题。它以沮丧告终。我用 docker 安装了领事。我运行以下命令。docker run --name consul -d -p 8500:8500 consul,然后我测试了使用postman PUT方法注册服务是否有效,但没有启用健康检查,服务在consul web UI中成功注册到consul。现在一切都按预期工作。我有一个用 go 编写的本地 GRPC 服务。本地服务地址为127.0.0.1:8880。领事服务器的地址是127.0.0.1:8500。然后将服务注册到 consul,但健康检查不起作用,获取All service failing. 然后我尝试了以下操作:使用本地 IP 地址192.168.0.152:8500作为 consul 服务器192.168.0.152:8880的地址和 gprc 服务的地址。不工作。使用本地 IP 地址192.168.0.152:8500作为 consul 服务器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   Segmentaae2e6ac1ff8  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()     }
查看完整描述

2 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

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

支持标准的 gRPC 健康检查协议。

因此,您只需在此处定义 gRPC 端点,协议将处理健康检查。

HTTP您可以通过在代理服务检查配置中定义字段来选择退出以使用 HTTP 端点进行健康检查。您可以在文档中找到更多信息(https://www.consul.io/api-docs/agent/check#http


查看完整回答
反对 回复 2022-10-10
?
绝地无双

TA贡献1946条经验 获得超4个赞

关于“正确”的代码有几个问题:


consul的地址等于grpc服务?不是cfg.Address领事Addr吗?

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

为什么正确的代码显示GRPC:"127.0.0.1:8880/health",结论是“在以下配置中将“127.0.0.1:8880/health”更改为“127.0.0.1:8880”后,它出奇地有效。不知道为什么......”。这是不一致的!!!!


查看完整回答
反对 回复 2022-10-10
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号