我已阅读与此问题相关的类似问题。它以沮丧告终。
我用 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 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()
}
墨色风雨
绝地无双
相关分类