Я хочу, чтобы компонент A знал компонент B, когда B умирает, A удаляет всю информацию B, а когда B рождается, A регистрирует информацию B. Следите за уведомлением, в котором записана информация о смерти или рождении Б, но из-за длительного времени, необходимого для подтверждения информации о смерти, информация о смерти в уведомлении задержится, если В умрет и сразу же возродится, информация о возрождении появится раньше информации о смерти, запись B информация с использованием переменной (которая может быть неподходящей), я не знаю, как справиться с этой ситуацией, кто-нибудь может помочь?
вот код
это код смотреть событие etcd
for wresp := range rch {
for _, ev := range wresp.Events {
switch ev.Type {
case clientv3.EventTypePut:
fmt.Printf("[%s] %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
info := GetServiceInfo(ev)
m.AddNode(string(ev.Kv.Key),info)
m.Needflush = "add"
case clientv3.EventTypeDelete:
fmt.Printf("[%s] %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
delete(m.Nodes, string(ev.Kv.Key))
m.Needflush = "del"
}
}
}
это код, который зависит от наблюдаемого события, когда некоторые работают
for {
if m.Needflush == "del" {
purge_ds(grafana_addr, "test_datasource")
m.Needflush = "no"
} else if m.Needflush == "add" {
prometheus_addr = read_prometheusip(m.Client, "monitor/prometheus_ip")
add_ds(grafana_addr, "test_datasource", prometheus_addr)
m.Needflush = "no"
}
time.Sleep(time.Second * 5)
}