diff --git a/cluster/directory/base_directory.go b/cluster/directory/base_directory.go index a311bf4ca1eb8136e562ab65e2c043651bafd6a5..d87694edd490185dcf2741c989376628beb6f2c0 100644 --- a/cluster/directory/base_directory.go +++ b/cluster/directory/base_directory.go @@ -37,6 +37,7 @@ type BaseDirectory struct { destroyed *atomic.Bool routers []cluster.Router mutex sync.Mutex + once sync.Once } func NewBaseDirectory(url *common.URL) BaseDirectory { @@ -70,17 +71,23 @@ func (dir *BaseDirectory) SetRouters(routers []cluster.Router) { } func (dir *BaseDirectory) Routers() []cluster.Router { var routers []cluster.Router - rs := RouterUrlSet.Values() - for _, r := range rs { - factory := extension.GetRouterFactory(r.(*common.URL).GetParam("router", "condition")) - router, err := factory.Router(r.(*common.URL)) - if err == nil { - dir.routers = append(dir.routers, router) + dir.once.Do(func() { + rs := RouterUrlSet.Values() + for _, r := range rs { + factory := extension.GetRouterFactory(r.(*common.URL).GetParam("router", "condition")) + router, err := factory.Router(r.(*common.URL)) + if err == nil { + dir.routers = append(dir.routers, router) + } + + routers = append(routers, router) } + }) + if len(routers) > 0 { + return append(dir.routers, routers...) - routers = append(routers, router) } - return append(dir.routers, routers...) + return dir.routers } func (dir *BaseDirectory) Destroy(doDestroy func()) {