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():