package broker import ( "net" "time" "go.uber.org/zap" ) func (b *Broker) processClusterInfo() { for { msg, ok := <-b.clusterPool if !ok { log.Error("read message from cluster channel error") return } ProcessMessage(msg) } } func (b *Broker) ConnectToDiscovery() { var conn net.Conn var err error var tempDelay time.Duration = 0 for { conn, err = net.Dial("tcp", b.config.Router) if err != nil { log.Error("Error trying to connect to route: ", zap.Error(err)) log.Debug("Connect to route timeout ,retry...") if 0 == tempDelay { tempDelay = 1 * time.Second } else { tempDelay *= 2 } if max := 20 * time.Second; tempDelay > max { tempDelay = max } time.Sleep(tempDelay) continue } break } log.Debug("connect to router success :", zap.String("Router", b.config.Router)) cid := b.id info := info{ clientID: cid, keepalive: 60, } c := &client{ typ: ROUTER, broker: b, conn: conn, info: info, } c.init() c.SendConnect() c.SendInfo() go c.readLoop() go c.StartPing() } func (b *Broker) checkNodeExist(id, url string) bool { if id == b.id { return false } for k, v := range b.nodes { if k == id { return true } //skip l, ok := v.(string) if ok { if url == l { return true } } } return false }