added service reannounce

This commit is contained in:
Stephan D
2026-03-01 14:02:05 +01:00
parent 1005201bb7
commit ce23de94ce
2 changed files with 120 additions and 8 deletions

View File

@@ -12,6 +12,8 @@ import (
"go.uber.org/zap"
)
const defaultReannounceHeartbeatFactor = 6
type Announcer struct {
logger mlogger.Logger
producer msg.Producer
@@ -84,23 +86,34 @@ func (a *Announcer) Stop() {
func (a *Announcer) heartbeatLoop() {
defer close(a.doneCh)
interval := time.Duration(a.announce.Health.IntervalSec) * time.Second
if interval <= 0 {
interval = time.Duration(DefaultHealthIntervalSec) * time.Second
}
ticker := time.NewTicker(interval)
defer ticker.Stop()
heartbeatInterval := heartbeatIntervalForHealth(a.announce.Health)
heartbeatTicker := time.NewTicker(heartbeatInterval)
defer heartbeatTicker.Stop()
heartbeatTicks := 0
for {
select {
case <-a.stopCh:
return
case <-ticker.C:
a.sendHeartbeat()
case <-heartbeatTicker.C:
heartbeatTicks++
if heartbeatTicks%defaultReannounceHeartbeatFactor == 0 {
a.sendAnnouncement()
} else {
a.sendHeartbeat()
}
}
}
}
func heartbeatIntervalForHealth(health HealthParams) time.Duration {
interval := time.Duration(health.IntervalSec) * time.Second
if interval <= 0 {
return time.Duration(DefaultHealthIntervalSec) * time.Second
}
return interval
}
func (a *Announcer) sendAnnouncement() {
env := NewServiceAnnounceEnvelope(a.sender, a.announce)
event := ServiceAnnounceEvent()