-
-
Notifications
You must be signed in to change notification settings - Fork 3.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
consul watch, the server is offline and will not receive any notification #3310
Comments
你好,@noovertime7!我是 Dosu,一个可以帮助你解决问题、回答问题以及成为贡献者的机器人。我在这里帮助你,同时等待人类维护者的回复。我会立即查看你的问题,并尽快给你一个完整的答案。 |
Hello, @noovertime7! I'm Dosu, a bot that helps you solve problems, answer questions, and become a contributor. I'm here to help you while I wait to hear back from the human maintainers. I will review your question immediately and give you a complete answer as soon as possible. |
To address the issue where Consul watch does not trigger notifications when the server goes offline, unlike with etcd, you might need to implement additional logic in your Kratos project. The current implementation in Kratos for Consul watches, as seen in Here's a conceptual approach to enhance the watch functionality to detect when the Consul server goes offline:
For example, you could implement a health check that triggers an event when the server goes offline as follows: func (w *watcher) monitorConsulServer() {
ticker := time.NewTicker(10 * time.Second)
defer ticker.Stop()
for {
select {
case <-w.ctx.Done():
return
case <-ticker.C:
if !isConsulServerAlive() {
w.event <- struct{}{}
}
}
}
}
func isConsulServerAlive() bool {
// Logic to check if the Consul server is alive, e.g., a ping or health check
return true // Placeholder return value
} This function should be called as a goroutine, possibly during the watcher's initialization. Adjust this example based on your specific requirements and environment. For more details on the watcher implementation, refer to the Kratos repository, specifically the
|
I'm not sure what you're referring to. I've been using this feature all along. Please provide a complete explanation or reproduce an example |
What happened:
使用consul作为注册中心,当服务端离线时并不会收到任何通知,无法触发离线的回调
What you expected to happen:
服务端离线使用watch收到通知
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know?:
使用etcd是可以的
Environment:
kratos -v
):kratos version v2.7.3go version
): go version go1.21.2 darwin/arm64cat /etc/os-release
): mac bookThe text was updated successfully, but these errors were encountered: