//内部创建节点的方法 func (self *ZKManager) innerCreatePath(tmppath string, data []byte, createType zk.CreateType) error { exist, _, _, err := self.session.ExistsW(tmppath) if nil == err && !exist { _, err := self.session.Create(tmppath, data, createType, zk.WorldACL(zk.PermAll)) if nil != err { log.Error("ZKManager|innerCreatePath|FAIL|%s|%s\n", err, tmppath) return err } //做一下校验等待 for i := 0; i < 5; i++ { exist, _, _ = self.session.Exists(tmppath) if !exist { time.Sleep(time.Duration(i*100) * time.Millisecond) } else { break } } return err } else if nil != err { log.Error("ZKManager|innerCreatePath|FAIL|%s\n", err) return err } else if nil != data { //存在该节点,推送新数据 _, err := self.session.Set(tmppath, data, -1) if nil != err { log.Error("ZKManager|innerCreatePath|PUSH DATA|FAIL|%s|%s|%s\n", err, tmppath, string(data)) return err } } return nil }
func (self *ZKManager) Start() { if len(self.zkhosts) <= 0 { log.Warn("使用默认zkhosts!|localhost:2181\n") self.zkhosts = "localhost:2181" } else { log.Info("使用zkhosts:[%s]!\n", self.zkhosts) } ss, eventChan, err := zk.Connect(strings.Split(self.zkhosts, ","), 5*time.Second) if nil != err { panic("连接zk失败..." + err.Error()) return } exist, _, err := ss.Exists(KITEQ) if nil != err { ss.Close() panic("无法创建KITEQ " + err.Error()) } if !exist { resp, err := ss.Create(KITEQ, nil, zk.CreatePersistent, zk.WorldACL(zk.PermAll)) if nil != err { ss.Close() panic("NewZKManager|CREATE ROOT PATH|FAIL|" + KITEQ + "|" + err.Error()) } else { log.Info("NewZKManager|CREATE ROOT PATH|SUCC|%s", resp) } } self.session = ss self.isClose = false self.eventChan = eventChan go self.listenEvent() }