added service reannounce
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user