как предотвратить ошибку клиента из-за задержки сигнала события? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу, чтобы компонент 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...