diff --git a/remoting/zookeeper/listener.go b/remoting/zookeeper/listener.go index 5b9e0a8f824598fd5030bd76eec04adf3e639ed9..e58f5245d51b21357bfd16feb17940532ca4c291 100644 --- a/remoting/zookeeper/listener.go +++ b/remoting/zookeeper/listener.go @@ -18,6 +18,7 @@ package zookeeper import ( + gxtime "github.com/dubbogo/gost/time" "path" "sync" "time" @@ -33,6 +34,10 @@ import ( "github.com/apache/dubbo-go/remoting" ) +var ( + wheel = gxtime.NewWheel(gxtime.TimeSecondDuration(3), 12) // wheel longest span is 2 minute +) + type ZkEventListener struct { client *ZookeeperClient pathMapLock sync.Mutex @@ -188,7 +193,7 @@ func (l *ZkEventListener) listenDirEvent(zkPath string, listener remoting.DataLi } l.client.RegisterEvent(zkPath, &event) select { - case <-time.After(timeSecondDuration(failTimes * ConnDelay)): + case <-wheel.After(timeSecondDuration(failTimes * ConnDelay)): l.client.UnregisterEvent(zkPath, &event) continue case <-l.client.Done():