我已閱讀與此問題相關的類似問題。它以沮喪告終。
- 我用 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作為 consul 服務器的192.168.0.152:8880地址和 gprc 服務的地址。不作業。
- 使用本地 IP 地址
-
- 使用本地 IP 地址
192.168.0.152:8500作為 consul 服務器的127.0.0.1:8880地址和 gprc 服務的地址。不作業。
- 使用本地 IP 地址
-
- 檢查 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())
}
uj5u.com熱心網友回復:
根據 Consul API ( https://www.consul.io/api-docs/agent/check#grpc )的檔案GRPC,您正在使用的欄位似乎
支持標準的 gRPC 健康檢查協議。
因此,您只需要在那里定義 gRPC 端點,協議就會處理健康檢查。
您可以通過HTTP在代理服務檢查配置中定義欄位來選擇退出以使用 HTTP 端點進行健康檢查。您可以在檔案中找到更多相關資訊(https://www.consul.io/api-docs/agent/check#http)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/352559.html
