You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/05/07 02:20:59 UTC

[dubbo-go] branch 3.0 updated: Rem:remove meshrouter and v3router (#1882)

This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/3.0 by this push:
     new 8dc50cc72 Rem:remove meshrouter and v3router  (#1882)
8dc50cc72 is described below

commit 8dc50cc72d7862afabd439b022d0004aace9b034
Author: pherzheyu <99...@users.noreply.github.com>
AuthorDate: Sat May 7 10:20:54 2022 +0800

    Rem:remove meshrouter and v3router  (#1882)
    
    * remove meshrouter and v3router (#1774)
    
    * remove meshrouter v3router constant (#1774)
---
 cluster/router/meshrouter/factory.go               |  41 ----
 cluster/router/meshrouter/meshrouter.go            | 146 ------------
 cluster/router/v3router/factory.go                 |  41 ----
 .../v3router/judger/attachment_match_judger.go     |  67 ------
 .../judger/attachment_match_judger_test.go         |  54 -----
 .../router/v3router/judger/bool_match_judger.go    |  39 ----
 .../v3router/judger/bool_match_judger_test.go      |  48 ----
 .../router/v3router/judger/double_match_judger.go  |  49 ----
 .../v3router/judger/double_match_judger_test.go    |  61 -----
 .../v3router/judger/double_range_match_judger.go   |  39 ----
 .../judger/double_range_match_judger_test.go       |  47 ----
 .../v3router/judger/list_double_match_judger.go    |  44 ----
 .../judger/list_double_match_judger_test.go        | 100 --------
 .../v3router/judger/list_string_match_judger.go    |  44 ----
 .../judger/list_string_match_judger_test.go        |  40 ----
 .../router/v3router/judger/method_match_judger.go  |  90 -------
 .../v3router/judger/method_match_judger_test.go    |  77 ------
 .../router/v3router/judger/string_match_judger.go  |  60 -----
 .../v3router/judger/string_match_judger_test.go    |  56 -----
 .../v3router/judger/url_label_match_judge.go       |  32 ---
 .../v3router/judger/url_label_match_judge_test.go  |  41 ----
 cluster/router/v3router/k8s_api/k8s.go             |  41 ----
 .../v3router/k8s_api/listener_handler_impl.go      | 200 ----------------
 cluster/router/v3router/k8s_crd/client.go          | 137 -----------
 .../v3router/k8s_crd/deploy/unifom_router_crd.yml  |  43 ----
 .../router/v3router/k8s_crd/listener_handler.go    |  36 ---
 cluster/router/v3router/router_chain.go            | 259 ---------------------
 cluster/router/v3router/router_chain_test.go       | 247 --------------------
 cluster/router/v3router/test_file/dest_rule.yml    |  17 --
 .../router/v3router/test_file/virtual_service.yml  | 158 -------------
 cluster/router/v3router/uniform_route.go           |  83 -------
 cluster/router/v3router/uniform_rule.go            | 258 --------------------
 common/constant/key.go                             |   2 -
 config/uniform_router_config.go                    | 218 -----------------
 config/uniform_router_config_test.go               |  42 ----
 go.mod                                             |   4 +-
 go.sum                                             | 112 ---------
 imports/imports.go                                 |   1 -
 registry/directory/directory_test.go               |   4 +-
 39 files changed, 2 insertions(+), 3076 deletions(-)

diff --git a/cluster/router/meshrouter/factory.go b/cluster/router/meshrouter/factory.go
deleted file mode 100644
index e5c8961a7..000000000
--- a/cluster/router/meshrouter/factory.go
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package meshrouter
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/common/extension"
-)
-
-func init() {
-	extension.SetRouterFactory(constant.MeshRouterFactoryKey, NewMeshRouterFactory)
-}
-
-// UniformRouteFactory is uniform router's factory
-type MeshRouterFactory struct{}
-
-// NewMeshRouterFactory constructs a new PriorityRouterFactory
-func NewMeshRouterFactory() router.PriorityRouterFactory {
-	return &MeshRouterFactory{}
-}
-
-// NewPriorityRouter construct a new UniformRouteFactory as PriorityRouter
-func (f *MeshRouterFactory) NewPriorityRouter() (router.PriorityRouter, error) {
-	return NewMeshRouter()
-}
diff --git a/cluster/router/meshrouter/meshrouter.go b/cluster/router/meshrouter/meshrouter.go
deleted file mode 100644
index 567f58a14..000000000
--- a/cluster/router/meshrouter/meshrouter.go
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package meshrouter
-
-import (
-	"math/rand"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router"
-	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	"dubbo.apache.org/dubbo-go/v3/config_center"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-	"dubbo.apache.org/dubbo-go/v3/remoting/xds"
-)
-
-const (
-	name = "mesh-router"
-)
-
-// MeshRouter have
-type MeshRouter struct {
-	client *xds.WrappedClientImpl
-}
-
-// NewMeshRouter construct an NewConnCheckRouter via url
-func NewMeshRouter() (router.PriorityRouter, error) {
-	xdsWrappedClient := xds.GetXDSWrappedClient()
-	if xdsWrappedClient == nil {
-		logger.Debugf("[Mesh Router] xds wrapped client is not created.")
-	}
-	return &MeshRouter{
-		client: xdsWrappedClient,
-	}, nil
-}
-
-// Route gets a list of routed invoker
-func (r *MeshRouter) Route(invokers []protocol.Invoker, url *common.URL, invocation protocol.Invocation) []protocol.Invoker {
-	if r.client == nil {
-		return invokers
-	}
-	hostAddr, err := r.client.GetHostAddrByServiceUniqueKey(common.GetSubscribeName(url))
-	if err != nil {
-		// todo deal with error
-		return nil
-	}
-	rconf := r.client.GetRouterConfig(hostAddr)
-
-	clusterInvokerMap := make(map[string][]protocol.Invoker)
-	for _, v := range invokers {
-		meshClusterID := v.GetURL().GetParam(constant.MeshClusterIDKey, "")
-		if _, ok := clusterInvokerMap[meshClusterID]; !ok {
-			clusterInvokerMap[meshClusterID] = make([]protocol.Invoker, 0)
-		}
-		clusterInvokerMap[meshClusterID] = append(clusterInvokerMap[meshClusterID], v)
-	}
-	route, err := r.client.MatchRoute(rconf, invocation)
-	if err != nil {
-		logger.Errorf("[Mesh Router] not found route,method=%s", invocation.MethodName())
-		return nil
-	}
-
-	// Loop through routes in order and select first match.
-	if route == nil || route.WeightedClusters == nil {
-		logger.Errorf("[Mesh Router] route's WeightedClusters is empty, route: %+v", r)
-		return invokers
-	}
-	invokersWeightPairs := make(invokerWeightPairs, 0)
-
-	for clusterID, weight := range route.WeightedClusters {
-		// cluster -> invokers
-		targetInvokers := clusterInvokerMap[clusterID]
-		invokersWeightPairs = append(invokersWeightPairs, invokerWeightPair{
-			invokers: targetInvokers,
-			weight:   weight.Weight,
-		})
-	}
-	return invokersWeightPairs.GetInvokers()
-}
-
-// Process there is no process needs for uniform Router, as it upper struct RouterChain has done it
-func (r *MeshRouter) Process(event *config_center.ConfigChangeEvent) {
-}
-
-// Name get name of ConnCheckerRouter
-func (r *MeshRouter) Name() string {
-	return name
-}
-
-// Priority get Router priority level
-func (r *MeshRouter) Priority() int64 {
-	return 0
-}
-
-// URL Return URL in router
-func (r *MeshRouter) URL() *common.URL {
-	return nil
-}
-
-// Notify the router the invoker list
-func (r *MeshRouter) Notify(invokers []protocol.Invoker) {
-}
-
-type invokerWeightPair struct {
-	invokers []protocol.Invoker
-	weight   uint32
-}
-
-type invokerWeightPairs []invokerWeightPair
-
-func (i *invokerWeightPairs) GetInvokers() []protocol.Invoker {
-	if len(*i) == 0 {
-		return nil
-	}
-	totalWeight := uint32(0)
-	tempWeight := uint32(0)
-	for _, v := range *i {
-		totalWeight += v.weight
-	}
-	randFloat := rand.Float64()
-	for _, v := range *i {
-		tempWeight += v.weight
-		tempPercent := float64(tempWeight) / float64(totalWeight)
-		if tempPercent >= randFloat {
-			return v.invokers
-		}
-	}
-	return (*i)[0].invokers
-}
diff --git a/cluster/router/v3router/factory.go b/cluster/router/v3router/factory.go
deleted file mode 100644
index 8ece4e6d9..000000000
--- a/cluster/router/v3router/factory.go
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package v3router
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/common/extension"
-)
-
-func init() {
-	extension.SetRouterFactory(constant.V3RouterFactoryKey, NewUniformRouterFactory)
-}
-
-// UniformRouteFactory is uniform router's factory
-type UniformRouteFactory struct{}
-
-// NewUniformRouterFactory constructs a new PriorityRouterFactory
-func NewUniformRouterFactory() router.PriorityRouterFactory {
-	return &UniformRouteFactory{}
-}
-
-// NewPriorityRouter construct a new UniformRouteFactory as PriorityRouter
-func (f *UniformRouteFactory) NewPriorityRouter() (router.PriorityRouter, error) {
-	return NewUniformRouterChain()
-}
diff --git a/cluster/router/v3router/judger/attachment_match_judger.go b/cluster/router/v3router/judger/attachment_match_judger.go
deleted file mode 100644
index d28373982..000000000
--- a/cluster/router/v3router/judger/attachment_match_judger.go
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-)
-
-type AttachmentMatchJudger struct {
-	config.DubboAttachmentMatch
-}
-
-// nolint
-func (j *AttachmentMatchJudger) Judge(invocation protocol.Invocation) bool {
-	invAttaMap := invocation.Attachments()
-	if j.EagleeyeContext != nil && !judge(j.EagleeyeContext, invAttaMap) {
-		return false
-	}
-
-	return j.DubboContext == nil || judge(j.DubboContext, invAttaMap)
-}
-
-func judge(condition map[string]*config.StringMatch, invAttaMap map[string]interface{}) bool {
-	for k, v := range condition {
-		invAttaValue, ok := invAttaMap[k]
-		if !ok {
-			if v.Empty == "" {
-				return false
-			}
-			continue
-		}
-		// exist this key
-		str, ok := invAttaValue.(string)
-		if !ok {
-			return false
-		}
-		strJudger := NewStringMatchJudger(v)
-		if !strJudger.Judge(str) {
-			return false
-		}
-	}
-
-	return true
-}
-
-// nolint
-func NewAttachmentMatchJudger(matchConf *config.DubboAttachmentMatch) *AttachmentMatchJudger {
-	return &AttachmentMatchJudger{
-		DubboAttachmentMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/attachment_match_judger_test.go b/cluster/router/v3router/judger/attachment_match_judger_test.go
deleted file mode 100644
index 26a8d5ed5..000000000
--- a/cluster/router/v3router/judger/attachment_match_judger_test.go
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
-)
-
-func TestAttachmentMatchJudger(t *testing.T) {
-	conditionMap := make(map[string]*config.StringMatch)
-	dubboIvkMap := make(map[string]interface{})
-	conditionMap["test-key"] = &config.StringMatch{
-		Exact: "abc",
-	}
-	dubboIvkMap["test-key"] = "abc"
-	assert.True(t, NewAttachmentMatchJudger(&config.DubboAttachmentMatch{
-		DubboContext: conditionMap,
-	}).Judge(invocation.NewRPCInvocation("method", nil, dubboIvkMap)))
-	assert.True(t, NewAttachmentMatchJudger(&config.DubboAttachmentMatch{
-		EagleeyeContext: conditionMap,
-	}).Judge(invocation.NewRPCInvocation("method", nil, dubboIvkMap)))
-
-	dubboIvkMap["test-key"] = "abd"
-	assert.False(t, NewAttachmentMatchJudger(&config.DubboAttachmentMatch{
-		DubboContext: conditionMap,
-	}).Judge(invocation.NewRPCInvocation("method", nil, dubboIvkMap)))
-	assert.False(t, NewAttachmentMatchJudger(&config.DubboAttachmentMatch{
-		EagleeyeContext: conditionMap,
-	}).Judge(invocation.NewRPCInvocation("method", nil, dubboIvkMap)))
-}
diff --git a/cluster/router/v3router/judger/bool_match_judger.go b/cluster/router/v3router/judger/bool_match_judger.go
deleted file mode 100644
index a49a6b6f5..000000000
--- a/cluster/router/v3router/judger/bool_match_judger.go
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-// nolint
-type BoolMatchJudger struct {
-	config.BoolMatch
-}
-
-// nolint
-func (j *BoolMatchJudger) Judge(input bool) bool {
-	return input == j.Exact
-}
-
-// nolint
-func newBoolMatchJudger(matchConf *config.BoolMatch) *BoolMatchJudger {
-	return &BoolMatchJudger{
-		BoolMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/bool_match_judger_test.go b/cluster/router/v3router/judger/bool_match_judger_test.go
deleted file mode 100644
index a86651e40..000000000
--- a/cluster/router/v3router/judger/bool_match_judger_test.go
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-func TestBoolMatchJudger(t *testing.T) {
-	assert.True(t, newBoolMatchJudger(&config.BoolMatch{
-		Exact: true,
-	}).Judge(true))
-
-	assert.True(t, newBoolMatchJudger(&config.BoolMatch{
-		Exact: false,
-	}).Judge(false))
-
-	assert.False(t, newBoolMatchJudger(&config.BoolMatch{
-		Exact: true,
-	}).Judge(false))
-
-	assert.False(t, newBoolMatchJudger(&config.BoolMatch{
-		Exact: false,
-	}).Judge(true))
-}
diff --git a/cluster/router/v3router/judger/double_match_judger.go b/cluster/router/v3router/judger/double_match_judger.go
deleted file mode 100644
index c143fba5a..000000000
--- a/cluster/router/v3router/judger/double_match_judger.go
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-// nolint
-type DoubleMatchJudger struct {
-	config.DoubleMatch
-}
-
-// nolint
-func (j *DoubleMatchJudger) Judge(input float64) bool {
-	if j.Exact != 0 {
-		return input == j.Exact
-	}
-	if j.Range != nil {
-		return newDoubleRangeMatchJudger(j.Range).Judge(input)
-	}
-	// todo  mod  match ??
-	//if j.Mode != 0 {
-	//
-	//}
-	return true
-}
-
-// nolint
-func newDoubleMatchJudger(matchConf *config.DoubleMatch) *DoubleMatchJudger {
-	return &DoubleMatchJudger{
-		DoubleMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/double_match_judger_test.go b/cluster/router/v3router/judger/double_match_judger_test.go
deleted file mode 100644
index a2ba18b25..000000000
--- a/cluster/router/v3router/judger/double_match_judger_test.go
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-func TestDoubleMatchJudger(t *testing.T) {
-	assert.True(t, newDoubleMatchJudger(&config.DoubleMatch{
-		Exact: 3.14159,
-	}).Judge(3.14159))
-
-	assert.False(t, newDoubleMatchJudger(&config.DoubleMatch{
-		Exact: 3.14159,
-	}).Judge(3.14155927))
-
-	assert.True(t, newDoubleMatchJudger(&config.DoubleMatch{
-		Range: &config.DoubleRangeMatch{
-			Start: 1.0,
-			End:   1.5,
-		},
-	}).Judge(1.3))
-
-	assert.False(t, newDoubleMatchJudger(&config.DoubleMatch{
-		Range: &config.DoubleRangeMatch{
-			Start: 1.0,
-			End:   1.5,
-		},
-	}).Judge(1.9))
-
-	assert.False(t, newDoubleMatchJudger(&config.DoubleMatch{
-		Range: &config.DoubleRangeMatch{
-			Start: 1.0,
-			End:   1.5,
-		},
-	}).Judge(0.9))
-}
diff --git a/cluster/router/v3router/judger/double_range_match_judger.go b/cluster/router/v3router/judger/double_range_match_judger.go
deleted file mode 100644
index 3e149785a..000000000
--- a/cluster/router/v3router/judger/double_range_match_judger.go
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-// nolint
-type DoubleRangeMatchJudger struct {
-	config.DoubleRangeMatch
-}
-
-// nolint
-func (j *DoubleRangeMatchJudger) Judge(input float64) bool {
-	return input >= j.Start && input < j.End
-}
-
-// nolint
-func newDoubleRangeMatchJudger(matchConf *config.DoubleRangeMatch) *DoubleRangeMatchJudger {
-	return &DoubleRangeMatchJudger{
-		DoubleRangeMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/double_range_match_judger_test.go b/cluster/router/v3router/judger/double_range_match_judger_test.go
deleted file mode 100644
index 9487e404c..000000000
--- a/cluster/router/v3router/judger/double_range_match_judger_test.go
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-func TestDoubleRangeMatchJudger(t *testing.T) {
-	assert.True(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
-		Start: 1.0,
-		End:   1.5,
-	}).Judge(1.3))
-
-	assert.False(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
-		Start: 1.0,
-		End:   1.5,
-	}).Judge(1.9))
-
-	assert.False(t, newDoubleRangeMatchJudger(&config.DoubleRangeMatch{
-		Start: 1.0,
-		End:   1.5,
-	}).Judge(0.9))
-}
diff --git a/cluster/router/v3router/judger/list_double_match_judger.go b/cluster/router/v3router/judger/list_double_match_judger.go
deleted file mode 100644
index b0d5db619..000000000
--- a/cluster/router/v3router/judger/list_double_match_judger.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-// nolint
-type ListDoubleMatchJudger struct {
-	config.ListDoubleMatch
-}
-
-// nolint
-func (j *ListDoubleMatchJudger) Judge(input float64) bool {
-	for _, v := range j.Oneof {
-		if newDoubleMatchJudger(v).Judge(input) {
-			return true
-		}
-	}
-	return false
-}
-
-// nolint
-func newListDoubleMatchJudger(matchConf *config.ListDoubleMatch) *ListDoubleMatchJudger {
-	return &ListDoubleMatchJudger{
-		ListDoubleMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/list_double_match_judger_test.go b/cluster/router/v3router/judger/list_double_match_judger_test.go
deleted file mode 100644
index bc84c7801..000000000
--- a/cluster/router/v3router/judger/list_double_match_judger_test.go
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-func TestListDoubleMatchJudger_Judge(t *testing.T) {
-	assert.True(t, newListDoubleMatchJudger(&config.ListDoubleMatch{
-		Oneof: []*config.DoubleMatch{
-			{
-				Exact: 3.14,
-			},
-			{
-				Range: &config.DoubleRangeMatch{
-					Start: 1.5,
-					End:   1.9,
-				},
-			},
-			{
-				Exact: 1.3,
-			},
-		},
-	}).Judge(1.3))
-
-	assert.False(t, newListDoubleMatchJudger(&config.ListDoubleMatch{
-		Oneof: []*config.DoubleMatch{
-			{
-				Exact: 3.14,
-			},
-			{
-				Range: &config.DoubleRangeMatch{
-					Start: 1.5,
-					End:   1.9,
-				},
-			},
-			{
-				Exact: 1.2,
-			},
-		},
-	}).Judge(1.3))
-
-	assert.True(t, newListDoubleMatchJudger(&config.ListDoubleMatch{
-		Oneof: []*config.DoubleMatch{
-			{
-				Exact: 3.14,
-			},
-			{
-				Range: &config.DoubleRangeMatch{
-					Start: 1.2,
-					End:   1.9,
-				},
-			},
-			{
-				Exact: 1.4,
-			},
-		},
-	}).Judge(1.3))
-
-	assert.False(t, newListDoubleMatchJudger(&config.ListDoubleMatch{
-		Oneof: []*config.DoubleMatch{
-			{
-				Exact: 3.14,
-			},
-			{
-				Range: &config.DoubleRangeMatch{
-					Start: 1.5,
-					End:   1.9,
-				},
-			},
-			{
-				Exact: 1.0,
-			},
-		},
-	}).Judge(1.3))
-}
diff --git a/cluster/router/v3router/judger/list_string_match_judger.go b/cluster/router/v3router/judger/list_string_match_judger.go
deleted file mode 100644
index c7b66ec73..000000000
--- a/cluster/router/v3router/judger/list_string_match_judger.go
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-// nolint
-type ListStringMatchJudger struct {
-	config.ListStringMatch
-}
-
-// nolint
-func (j *ListStringMatchJudger) Judge(input string) bool {
-	for _, v := range j.Oneof {
-		if NewStringMatchJudger(v).Judge(input) {
-			return true
-		}
-	}
-	return false
-}
-
-// nolint
-func newListStringMatchJudger(matchConf *config.ListStringMatch) *ListStringMatchJudger {
-	return &ListStringMatchJudger{
-		ListStringMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/list_string_match_judger_test.go b/cluster/router/v3router/judger/list_string_match_judger_test.go
deleted file mode 100644
index 1816b9503..000000000
--- a/cluster/router/v3router/judger/list_string_match_judger_test.go
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-func TestListStringMatchJudger(t *testing.T) {
-	assert.True(t, newListStringMatchJudger(&config.ListStringMatch{
-		Oneof: []*config.StringMatch{{Exact: "abd"}},
-	}).Judge("abd"))
-
-	assert.False(t, newListStringMatchJudger(&config.ListStringMatch{
-		Oneof: []*config.StringMatch{{Exact: "abc"}},
-	}).Judge("abd"))
-}
diff --git a/cluster/router/v3router/judger/method_match_judger.go b/cluster/router/v3router/judger/method_match_judger.go
deleted file mode 100644
index 3225bea9c..000000000
--- a/cluster/router/v3router/judger/method_match_judger.go
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-)
-
-// nolint
-type MethodMatchJudger struct {
-	config.DubboMethodMatch
-}
-
-// Judge Method Match Judger only judge on
-func (j *MethodMatchJudger) Judge(invocation protocol.Invocation) bool {
-	if j.NameMatch != nil {
-		strJudger := NewStringMatchJudger(j.NameMatch)
-		if !strJudger.Judge(invocation.MethodName()) {
-			return false
-		}
-	}
-
-	// todo now argc Must not be zero, else it will cause unexpected result
-	if j.Argc != 0 && len(invocation.ParameterValues()) != j.Argc {
-		return false
-	}
-
-	if j.Args != nil {
-		params := invocation.ParameterValues()
-		for _, v := range j.Args {
-			index := int(v.Index)
-			if index > len(params) || index < 1 {
-				return false
-			}
-			value := params[index-1]
-			if value.Type().String() != v.Type {
-				return false
-			}
-			switch v.Type {
-			case "string":
-				if !newListStringMatchJudger(v.StrValue).Judge(value.String()) {
-					return false
-				}
-				// FIXME int invoke Float may cause panic
-			case "float", "int":
-				// todo now numbers Must not be zero, else it will ignore this match
-				if !newListDoubleMatchJudger(v.NumValue).Judge(value.Float()) {
-					return false
-				}
-			case "bool":
-				if !newBoolMatchJudger(v.BoolValue).Judge(value.Bool()) {
-					return false
-				}
-			default:
-			}
-		}
-	}
-	// todo Argp match judge ??? conflict to args?
-	//if j.Argp != nil {
-	//
-	//}
-	// todo Headers match judge: reserve for triple
-	//if j.Headers != nil {
-	//
-	//}
-	return true
-}
-
-// nolint
-func NewMethodMatchJudger(matchConf *config.DubboMethodMatch) *MethodMatchJudger {
-	return &MethodMatchJudger{
-		DubboMethodMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/method_match_judger_test.go b/cluster/router/v3router/judger/method_match_judger_test.go
deleted file mode 100644
index 71e90aacb..000000000
--- a/cluster/router/v3router/judger/method_match_judger_test.go
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"reflect"
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/protocol/invocation"
-)
-
-func TestMethodMatchJudger(t *testing.T) {
-	methodArgs := make([]*config.DubboMethodArg, 0)
-	methodArgs = append(methodArgs, &config.DubboMethodArg{
-		Index:     1,
-		Type:      "string",
-		StrValue:  &config.ListStringMatch{Oneof: []*config.StringMatch{{Exact: "hello world"}}},
-		NumValue:  nil,
-		BoolValue: nil,
-	})
-	methodArgs = append(methodArgs, &config.DubboMethodArg{
-		Index:     2,
-		Type:      "bool",
-		StrValue:  nil,
-		NumValue:  nil,
-		BoolValue: &config.BoolMatch{Exact: true},
-	})
-	methodArgs = append(methodArgs, &config.DubboMethodArg{
-		Index:     3,
-		Type:      "float64",
-		StrValue:  nil,
-		NumValue:  &config.ListDoubleMatch{Oneof: []*config.DoubleMatch{{Exact: 10}}},
-		BoolValue: nil,
-	})
-
-	methodMatch := &config.DubboMethodMatch{
-		NameMatch: &config.StringMatch{Exact: "Greet"},
-		Argc:      3,
-		Args:      methodArgs,
-		Argp:      nil,
-		Headers:   nil,
-	}
-
-	stringValue := reflect.ValueOf("hello world")
-	boolValue := reflect.ValueOf(true)
-	numValue := reflect.ValueOf(10.0)
-	ivc := invocation.NewRPCInvocationWithOptions(
-		invocation.WithMethodName("Greet"),
-		invocation.WithParameterValues([]reflect.Value{stringValue, boolValue, numValue}),
-	)
-
-	assert.False(t, NewMethodMatchJudger(&config.DubboMethodMatch{NameMatch: &config.StringMatch{Exact: "Great"}}).Judge(ivc))
-	assert.False(t, NewMethodMatchJudger(&config.DubboMethodMatch{NameMatch: &config.StringMatch{Exact: "Greet"}, Argc: 1}).Judge(ivc))
-	assert.True(t, NewMethodMatchJudger(methodMatch).Judge(ivc))
-}
diff --git a/cluster/router/v3router/judger/string_match_judger.go b/cluster/router/v3router/judger/string_match_judger.go
deleted file mode 100644
index 74302d17f..000000000
--- a/cluster/router/v3router/judger/string_match_judger.go
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"regexp"
-	"strings"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-// nolint
-type StringMatchJudger struct {
-	config.StringMatch
-}
-
-// nolint
-func (j *StringMatchJudger) Judge(input string) bool {
-	if j.Exact != "" {
-		return input == j.Exact
-	}
-	if j.Prefix != "" {
-		return strings.HasPrefix(input, j.Prefix)
-	}
-	if j.Regex != "" {
-		ok, err := regexp.MatchString(j.Regex, input)
-		return ok && err == nil
-	}
-	if j.NoEmpty != "" {
-		return input != ""
-	}
-	if j.Empty != "" {
-		return input == ""
-	}
-	return true
-}
-
-// nolint
-func NewStringMatchJudger(matchConf *config.StringMatch) *StringMatchJudger {
-	return &StringMatchJudger{
-		StringMatch: *matchConf,
-	}
-}
diff --git a/cluster/router/v3router/judger/string_match_judger_test.go b/cluster/router/v3router/judger/string_match_judger_test.go
deleted file mode 100644
index 968eda96f..000000000
--- a/cluster/router/v3router/judger/string_match_judger_test.go
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/config"
-)
-
-func TestNewStringMatchJudger(t *testing.T) {
-	assert.True(t, NewStringMatchJudger(&config.StringMatch{
-		Exact: "abc",
-	}).Judge("abc"))
-
-	assert.False(t, NewStringMatchJudger(&config.StringMatch{
-		Exact: "abcd",
-	}).Judge("abc"))
-
-	assert.True(t, NewStringMatchJudger(&config.StringMatch{
-		Prefix: "abc",
-	}).Judge("abcd"))
-
-	assert.False(t, NewStringMatchJudger(&config.StringMatch{
-		Exact: "abcd",
-	}).Judge("abdc"))
-
-	assert.True(t, NewStringMatchJudger(&config.StringMatch{
-		Empty: "true",
-	}).Judge(""))
-
-	assert.False(t, NewStringMatchJudger(&config.StringMatch{
-		NoEmpty: "true",
-	}).Judge(""))
-}
diff --git a/cluster/router/v3router/judger/url_label_match_judge.go b/cluster/router/v3router/judger/url_label_match_judge.go
deleted file mode 100644
index 161a00d32..000000000
--- a/cluster/router/v3router/judger/url_label_match_judge.go
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common"
-)
-
-// nolint
-func JudgeUrlLabel(url *common.URL, labels map[string]string) bool {
-	for k, v := range labels {
-		if url.GetParam(k, "") != v {
-			return false
-		}
-	}
-	return true
-}
diff --git a/cluster/router/v3router/judger/url_label_match_judge_test.go b/cluster/router/v3router/judger/url_label_match_judge_test.go
deleted file mode 100644
index bb4b4679d..000000000
--- a/cluster/router/v3router/judger/url_label_match_judge_test.go
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package judger
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common"
-)
-
-func TestJudgeUrlLabel(t *testing.T) {
-	url := common.NewURLWithOptions(common.WithParamsValue("a", "A"))
-
-	labels := make(map[string]string)
-	labels["a"] = "A"
-	assert.True(t, JudgeUrlLabel(url, labels))
-
-	labels["a"] = "B"
-	assert.False(t, JudgeUrlLabel(url, labels))
-}
diff --git a/cluster/router/v3router/k8s_api/k8s.go b/cluster/router/v3router/k8s_api/k8s.go
deleted file mode 100644
index c8ee00645..000000000
--- a/cluster/router/v3router/k8s_api/k8s.go
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package k8s_api
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/k8s_crd"
-	"dubbo.apache.org/dubbo-go/v3/config_center"
-)
-
-const (
-	GroupName    = "service.dubbo.apache.org"
-	GroupVersion = "v1alpha1"
-	Namespace    = "dubbo-workplace"
-)
-
-func SetK8sEventListener(listener config_center.ConfigurationListener) error {
-	vsUniformRouterListenerHandler := newVirtualServiceListenerHandler(listener)
-	drUniformRouterListenerHandler := newDestRuleListenerHandler(listener)
-	k8sCRDClient, err := k8s_crd.NewK8sCRDClient(GroupName, GroupVersion, Namespace,
-		vsUniformRouterListenerHandler, drUniformRouterListenerHandler)
-	if err != nil {
-		return err
-	}
-	k8sCRDClient.WatchResources()
-	return nil
-}
diff --git a/cluster/router/v3router/k8s_api/listener_handler_impl.go b/cluster/router/v3router/k8s_api/listener_handler_impl.go
deleted file mode 100644
index 70dc8be2e..000000000
--- a/cluster/router/v3router/k8s_api/listener_handler_impl.go
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package k8s_api
-
-import (
-	metav "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/watch"
-
-	"k8s.io/client-go/kubernetes/scheme"
-
-	"k8s.io/client-go/rest"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/k8s_crd"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/config_center"
-	"dubbo.apache.org/dubbo-go/v3/remoting"
-)
-
-const (
-	VirtualServiceEventKey  = "virtualServiceEventKey"
-	DestinationRuleEventKey = "destinationRuleEventKey"
-
-	VirtualServiceResource = "virtualservices"
-	DestRuleResource       = "destinationrules"
-)
-
-// nolint
-type VirtualServiceListenerHandler struct {
-	listener config_center.ConfigurationListener
-}
-
-// nolint
-func (r *VirtualServiceListenerHandler) AddFunc(obj interface{}) {
-	if vsc, ok := obj.(*config.VirtualServiceConfig); ok {
-		event := &config_center.ConfigChangeEvent{
-			Key:        VirtualServiceEventKey,
-			Value:      vsc,
-			ConfigType: remoting.EventTypeAdd,
-		}
-		r.listener.Process(event)
-	}
-}
-
-// nolint
-func (r *VirtualServiceListenerHandler) UpdateFunc(oldObj, newObj interface{}) {
-	if vsc, ok := newObj.(*config.VirtualServiceConfig); ok {
-		event := &config_center.ConfigChangeEvent{
-			Key:        VirtualServiceEventKey,
-			Value:      vsc,
-			ConfigType: remoting.EventTypeUpdate,
-		}
-		r.listener.Process(event)
-	}
-
-}
-
-// nolint
-func (r *VirtualServiceListenerHandler) DeleteFunc(obj interface{}) {
-	if vsc, ok := obj.(*config.VirtualServiceConfig); ok {
-		event := &config_center.ConfigChangeEvent{
-			Key:        VirtualServiceEventKey,
-			Value:      vsc,
-			ConfigType: remoting.EventTypeDel,
-		}
-		r.listener.Process(event)
-	}
-}
-
-// nolint
-func (r *VirtualServiceListenerHandler) Watch(opts metav.ListOptions, restClient *rest.RESTClient, ns string) (watch.Interface, error) {
-	opts.Watch = true
-	return restClient.
-		Get().
-		Namespace(ns).
-		Resource(VirtualServiceResource).
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Watch()
-}
-
-// nolint
-func (r *VirtualServiceListenerHandler) List(opts metav.ListOptions, restClient *rest.RESTClient, ns string) (runtime.Object, error) {
-	result := config.VirtualServiceConfigList{}
-	err := restClient.
-		Get().
-		Namespace(ns).
-		Resource(VirtualServiceResource).
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Do().
-		Into(&result)
-
-	return &result, err
-}
-
-// nolint
-func (r *VirtualServiceListenerHandler) GetObject() runtime.Object {
-	return &config.VirtualServiceConfig{}
-}
-
-// nolint
-func newVirtualServiceListenerHandler(listener config_center.ConfigurationListener) k8s_crd.ListenerHandler {
-	return &VirtualServiceListenerHandler{
-		listener: listener,
-	}
-}
-
-// nolint
-type DestRuleListenerHandler struct {
-	listener config_center.ConfigurationListener
-}
-
-// nolint
-func (r *DestRuleListenerHandler) AddFunc(obj interface{}) {
-	if drc, ok := obj.(*config.DestinationRuleConfig); ok {
-		event := &config_center.ConfigChangeEvent{
-			Key:        DestinationRuleEventKey,
-			Value:      drc,
-			ConfigType: remoting.EventTypeAdd,
-		}
-		r.listener.Process(event)
-	}
-
-}
-
-// nolint
-func (r *DestRuleListenerHandler) UpdateFunc(oldObj, newObj interface{}) {
-	if drc, ok := newObj.(*config.DestinationRuleConfig); ok {
-		event := &config_center.ConfigChangeEvent{
-			Key:        DestinationRuleEventKey,
-			Value:      drc,
-			ConfigType: remoting.EventTypeUpdate,
-		}
-		r.listener.Process(event)
-	}
-}
-
-// nolint
-func (r *DestRuleListenerHandler) DeleteFunc(obj interface{}) {
-	if drc, ok := obj.(*config.DestinationRuleConfig); ok {
-		event := &config_center.ConfigChangeEvent{
-			Key:        DestinationRuleEventKey,
-			Value:      drc,
-			ConfigType: remoting.EventTypeDel,
-		}
-		r.listener.Process(event)
-	}
-}
-
-// nolint
-func (r *DestRuleListenerHandler) Watch(opts metav.ListOptions, restClient *rest.RESTClient, ns string) (watch.Interface, error) {
-	opts.Watch = true
-	return restClient.
-		Get().
-		Namespace(ns).
-		Resource(DestRuleResource).
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Watch()
-}
-
-// nolint
-func (r *DestRuleListenerHandler) List(opts metav.ListOptions, restClient *rest.RESTClient, ns string) (runtime.Object, error) {
-	result := config.DestinationRuleConfigList{}
-	err := restClient.
-		Get().
-		Namespace(ns).
-		Resource(DestRuleResource).
-		VersionedParams(&opts, scheme.ParameterCodec).
-		Do().
-		Into(&result)
-
-	return &result, err
-}
-
-// nolint
-func (r *DestRuleListenerHandler) GetObject() runtime.Object {
-	return &config.DestinationRuleConfig{}
-}
-
-func newDestRuleListenerHandler(listener config_center.ConfigurationListener) k8s_crd.ListenerHandler {
-	return &DestRuleListenerHandler{
-		listener: listener,
-	}
-}
diff --git a/cluster/router/v3router/k8s_crd/client.go b/cluster/router/v3router/k8s_crd/client.go
deleted file mode 100644
index 0da410cbb..000000000
--- a/cluster/router/v3router/k8s_crd/client.go
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package k8s_crd
-
-import (
-	"sync"
-	"time"
-)
-
-import (
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/schema"
-	"k8s.io/apimachinery/pkg/runtime/serializer"
-	"k8s.io/apimachinery/pkg/util/wait"
-	"k8s.io/apimachinery/pkg/watch"
-
-	"k8s.io/client-go/kubernetes/scheme"
-
-	"k8s.io/client-go/rest"
-
-	"k8s.io/client-go/tools/cache"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-)
-
-type Client struct {
-	rawClient           *rest.RESTClient
-	groupVersion        schema.GroupVersion
-	namespace           string
-	listenerHandlerList []ListenerHandler
-
-	once sync.Once
-}
-
-func (c *Client) addKnownTypes(scheme *runtime.Scheme) error {
-	for _, v := range c.listenerHandlerList {
-		scheme.AddKnownTypes(c.groupVersion,
-			v.GetObject(),
-		)
-	}
-
-	metav1.AddToGroupVersion(scheme, c.groupVersion)
-	return nil
-}
-
-// NewK8sCRDClient create an K8sCRD client, for target  CRD objects:  @objects
-// with given @groupname, @groupVersion, @namespace
-// list and watchFunction would be called by k8s informer
-func NewK8sCRDClient(groupName, groupVersion, namespace string, handlers ...ListenerHandler) (*Client, error) {
-	var config *rest.Config
-	var err error
-
-	config, err = rest.InClusterConfig()
-	if err != nil {
-		logger.Warn("InClusterConfig failed, can't get uniform router config from k8s")
-		return nil, err
-	}
-
-	newClient := &Client{
-		listenerHandlerList: handlers,
-		namespace:           namespace,
-		groupVersion:        schema.GroupVersion{Group: groupName, Version: groupVersion},
-	}
-
-	// register object
-	SchemeBuilder := runtime.NewSchemeBuilder(newClient.addKnownTypes)
-
-	// add to scheme
-	if err = SchemeBuilder.AddToScheme(scheme.Scheme); err != nil {
-		logger.Error("AddToScheme failed in k8s CRD process")
-		return nil, err
-	}
-
-	// init crd config
-	crdConfig := *config
-	crdConfig.ContentConfig.GroupVersion = &newClient.groupVersion
-	crdConfig.APIPath = "/apis"
-	crdConfig.NegotiatedSerializer = serializer.NewCodecFactory(scheme.Scheme)
-	crdConfig.UserAgent = rest.DefaultKubernetesUserAgent()
-
-	newRestClient, err := rest.UnversionedRESTClientFor(&crdConfig)
-	if err != nil {
-		logger.Error("InClusterConfig failed, can't get uniform router config from k8s")
-		return nil, err
-	}
-	newClient.rawClient = newRestClient
-	return newClient, nil
-}
-
-// WatchResources can only be called once
-func (c *Client) WatchResources() []cache.Store {
-	stores := make([]cache.Store, 0)
-	c.once.Do(
-		func() {
-			for _, h := range c.listenerHandlerList {
-				projectStore, projectController := cache.NewInformer(
-					&cache.ListWatch{
-						ListFunc: func(lo metav1.ListOptions) (result runtime.Object, err error) {
-							return h.List(lo, c.rawClient, c.namespace)
-						},
-						WatchFunc: func(lo metav1.ListOptions) (watch.Interface, error) {
-							return h.Watch(lo, c.rawClient, c.namespace)
-						},
-					},
-					h.GetObject(),
-					time.Second*30, //todo can be configured
-					cache.ResourceEventHandlerFuncs{
-						AddFunc:    h.AddFunc,
-						UpdateFunc: h.UpdateFunc,
-						DeleteFunc: h.DeleteFunc,
-					},
-				)
-
-				go projectController.Run(wait.NeverStop)
-				stores = append(stores, projectStore)
-			}
-		})
-	return stores
-}
diff --git a/cluster/router/v3router/k8s_crd/deploy/unifom_router_crd.yml b/cluster/router/v3router/k8s_crd/deploy/unifom_router_crd.yml
deleted file mode 100644
index 9acc7d787..000000000
--- a/cluster/router/v3router/k8s_crd/deploy/unifom_router_crd.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-apiVersion: "apiextensions.k8s.io/v1"
-kind: "CustomResourceDefinition"
-metadata:
-  name: "virtualservices.service.dubbo.apache.org"
-spec:
-  group: "service.dubbo.apache.org"
-  versions:
-    - name: "v1alpha1"
-      served: true
-      storage: true
-      schema:
-        openAPIV3Schema:
-          type: object
-          properties:
-            spec:
-              type: object
-  scope: "Namespaced"
-  names:
-    plural: "virtualservices"
-    singular: "virtualservice"
-    kind: "VirtualService"
----
-apiVersion: "apiextensions.k8s.io/v1"
-kind: "CustomResourceDefinition"
-metadata:
-  name: "destinationrules.service.dubbo.apache.org"
-spec:
-  group: "service.dubbo.apache.org"
-  versions:
-    - name: "v1alpha1"
-      served: true
-      storage: true
-      schema:
-        openAPIV3Schema:
-          type: object
-          properties:
-            spec:
-              type: object
-  scope: "Namespaced"
-  names:
-    plural: "destinationrules"
-    singular: "destinationrule"
-    kind: "DestinationRule"
\ No newline at end of file
diff --git a/cluster/router/v3router/k8s_crd/listener_handler.go b/cluster/router/v3router/k8s_crd/listener_handler.go
deleted file mode 100644
index fa4272e69..000000000
--- a/cluster/router/v3router/k8s_crd/listener_handler.go
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package k8s_crd
-
-import (
-	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/watch"
-
-	"k8s.io/client-go/rest"
-)
-
-// nolint
-type ListenerHandler interface {
-	AddFunc(obj interface{})
-	UpdateFunc(oldObj interface{}, newObj interface{})
-	DeleteFunc(obj interface{})
-	Watch(opts v1.ListOptions, restClient *rest.RESTClient, ns string) (watch.Interface, error)
-	List(opts v1.ListOptions, restClient *rest.RESTClient, ns string) (runtime.Object, error)
-	GetObject() runtime.Object
-}
diff --git a/cluster/router/v3router/router_chain.go b/cluster/router/v3router/router_chain.go
deleted file mode 100644
index fd137ea52..000000000
--- a/cluster/router/v3router/router_chain.go
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package v3router
-
-import (
-	"io"
-	"strings"
-)
-
-import (
-	"gopkg.in/yaml.v2"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router"
-	"dubbo.apache.org/dubbo-go/v3/common"
-	conf "dubbo.apache.org/dubbo-go/v3/common/config"
-	"dubbo.apache.org/dubbo-go/v3/common/constant"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/config_center"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-	"dubbo.apache.org/dubbo-go/v3/remoting"
-)
-
-// RouterChain contains all uniform router logic
-// it has UniformRouter list,
-type RouterChain struct {
-	routers []*UniformRouter
-	notify  chan struct{}
-}
-
-// nolint
-func NewUniformRouterChain() (router.PriorityRouter, error) {
-	// 1. Add mesh route listener
-	r := &RouterChain{}
-	rootConfig := config.GetRootConfig()
-	dynamicConfiguration := conf.GetEnvInstance().GetDynamicConfiguration()
-	if dynamicConfiguration == nil {
-		logger.Infof("[NewUniformRouterChain] Config center does not start, please check if the configuration center has been properly configured in dubbogo.yml")
-		return nil, nil
-	}
-
-	// 2. Try to get mesh rules configuration, default key is "dubbo.io.MESHAPPRULE" with group "dubbo"
-	key := rootConfig.Application.Name + constant.MeshRouteSuffix
-	group := rootConfig.ConfigCenter.Group
-	if group == "" {
-		group = constant.Dubbo
-	}
-	dynamicConfiguration.AddListener(group+constant.PathSeparator+key, r)
-	meshRouteValue, err := dynamicConfiguration.GetProperties(key, config_center.WithGroup(rootConfig.ConfigCenter.Group))
-	if err != nil {
-		// The mesh rules may not be initialized now
-		logger.Warnf("[NewUniformRouterChain]Can not get mesh rules for group=%s, key=%s, error=%+v", rootConfig.ConfigCenter.Group, key, err)
-		return r, nil
-	}
-	logger.Debugf("[NewUniformRouterChain]Successfully get mesh rules:%s", meshRouteValue)
-	routes, err := parseRoute(meshRouteValue)
-	if err != nil {
-		logger.Warnf("[NewUniformRouterChain]Parse mesh rules failed, error=%+v", err)
-		return nil, err
-	}
-	r.routers = routes
-	logger.Infof("[NewUniformRouterChain]Successfully init mesh rules with:\n%s", meshRouteValue)
-	return r, nil
-}
-
-// Route route invokers using RouterChain's routers one by one
-func (r *RouterChain) Route(invokers []protocol.Invoker, url *common.URL, invocation protocol.Invocation) []protocol.Invoker {
-	for _, v := range r.routers {
-		invokers = v.Route(invokers, url, invocation)
-	}
-	return invokers
-}
-
-// Process process route config change event
-func (r *RouterChain) Process(event *config_center.ConfigChangeEvent) {
-	logger.Infof("[RouteChain]Process config change event:%+v", event)
-	if event.ConfigType == remoting.EventTypeDel {
-		r.routers = nil
-		return
-	}
-	routers, err := parseRoute(event.Value.(string))
-	if err != nil {
-		logger.Warnf("[RouteChain]Parse new mesh route config error, %+v "+
-			"and we will use the original mesh rule configuration.", err)
-		return
-	}
-	r.routers = routers
-	logger.Infof("[RouteChain]Parse Mesh Rule Success.")
-}
-
-// Name get name of ConnCheckerRouter
-func (r *RouterChain) Name() string {
-	return name
-}
-
-// Priority get Router priority level
-func (r *RouterChain) Priority() int64 {
-	return 0
-}
-
-// URL Return URL in router
-func (r *RouterChain) URL() *common.URL {
-	return nil
-}
-
-// Notify the router the invoker list
-func (r *RouterChain) Notify(invokers []protocol.Invoker) {
-}
-
-// Deprecated parseFromConfigToRouters parse virtualService and destinationRule yaml file bytes to target router list
-func parseFromConfigToRouters(virtualServiceConfig, destinationRuleConfig []byte) ([]*UniformRouter, error) {
-	var virtualServiceConfigList []*config.VirtualServiceConfig
-	destRuleConfigsMap := make(map[string]map[string]map[string]string)
-
-	vsDecoder := yaml.NewDecoder(strings.NewReader(string(virtualServiceConfig)))
-	drDecoder := yaml.NewDecoder(strings.NewReader(string(destinationRuleConfig)))
-	// 1. parse virtual service config
-	for {
-		virtualServiceCfg := &config.VirtualServiceConfig{}
-
-		err := vsDecoder.Decode(virtualServiceCfg)
-		if err == io.EOF {
-			break
-		}
-
-		if err != nil {
-			logger.Error("parseFromConfigTo virtual service err = ", err)
-			return nil, err
-		}
-		virtualServiceConfigList = append(virtualServiceConfigList, virtualServiceCfg)
-	}
-
-	// 2. parse destination rule config
-	for {
-		destRuleCfg := &config.DestinationRuleConfig{}
-		err := drDecoder.Decode(destRuleCfg)
-		if err == io.EOF {
-			break
-		}
-		if err != nil {
-			logger.Error("parseFromConfigTo destination rule err = ", err)
-			return nil, err
-		}
-
-		// name -> labels
-		destRuleCfgMap := make(map[string]map[string]string)
-		for _, v := range destRuleCfg.Spec.SubSets {
-			destRuleCfgMap[v.Name] = v.Labels
-		}
-
-		// host -> name -> labels
-		destRuleConfigsMap[destRuleCfg.Spec.Host] = destRuleCfgMap
-	}
-
-	routers := make([]*UniformRouter, 0)
-
-	// 3. construct virtual service host to destination mapping
-	for _, v := range virtualServiceConfigList {
-		tempServiceNeedsDescMap := make(map[string]map[string]string)
-		for _, host := range v.Spec.Hosts {
-			// name -> labels
-			targetDestMap := destRuleConfigsMap[host]
-
-			// copy to new Map, FIXME name collision
-			mapCopy(tempServiceNeedsDescMap, targetDestMap)
-		}
-		// transform single config to one rule
-		routers = append(routers, NewUniformRouter(v.Spec.Dubbo, tempServiceNeedsDescMap))
-	}
-	logger.Debug("parsed successfully with router size = ", len(routers))
-	return routers, nil
-}
-
-func parseRoute(routeContent string) ([]*UniformRouter, error) {
-	var virtualServiceConfigList []*config.VirtualServiceConfig
-	destRuleConfigsMap := make(map[string]map[string]map[string]string)
-
-	meshRouteDecoder := yaml.NewDecoder(strings.NewReader(routeContent))
-	for {
-		meshRouteMetadata := &config.MeshRouteMetadata{}
-		err := meshRouteDecoder.Decode(meshRouteMetadata)
-		if err == io.EOF {
-			break
-		} else if err != nil {
-			logger.Error("parseRoute route metadata err = ", err)
-			return nil, err
-		}
-
-		bytes, err := yaml.Marshal(meshRouteMetadata.Spec)
-		if err != nil {
-			return nil, err
-		}
-		specDecoder := yaml.NewDecoder(strings.NewReader(string(bytes)))
-		switch meshRouteMetadata.YamlKind {
-		case "VirtualService":
-			meshRouteConfigSpec := &config.UniformRouterConfigSpec{}
-			err := specDecoder.Decode(meshRouteConfigSpec)
-			if err != nil {
-				return nil, err
-			}
-			virtualServiceConfigList = append(virtualServiceConfigList, &config.VirtualServiceConfig{
-				YamlAPIVersion: meshRouteMetadata.YamlAPIVersion,
-				YamlKind:       meshRouteMetadata.YamlKind,
-				TypeMeta:       meshRouteMetadata.TypeMeta,
-				ObjectMeta:     meshRouteMetadata.ObjectMeta,
-				MetaData:       meshRouteMetadata.MetaData,
-				Spec:           *meshRouteConfigSpec,
-			})
-		case "DestinationRule":
-			meshRouteDestinationRuleSpec := &config.DestinationRuleSpec{}
-			err := specDecoder.Decode(meshRouteDestinationRuleSpec)
-			if err != nil {
-				return nil, err
-			}
-			destRuleCfgMap := make(map[string]map[string]string)
-			for _, v := range meshRouteDestinationRuleSpec.SubSets {
-				destRuleCfgMap[v.Name] = v.Labels
-			}
-
-			destRuleConfigsMap[meshRouteDestinationRuleSpec.Host] = destRuleCfgMap
-		}
-	}
-
-	routers := make([]*UniformRouter, 0)
-
-	for _, v := range virtualServiceConfigList {
-		tempServiceNeedsDescMap := make(map[string]map[string]string)
-		for _, host := range v.Spec.Hosts {
-			targetDestMap := destRuleConfigsMap[host]
-			mapCopy(tempServiceNeedsDescMap, targetDestMap)
-		}
-		routers = append(routers, NewUniformRouter(v.Spec.Dubbo, tempServiceNeedsDescMap))
-	}
-	logger.Debug("parsed successfully with router size = ", len(routers))
-	return routers, nil
-}
-
-func mapCopy(dist map[string]map[string]string, source map[string]map[string]string) {
-	for k, v := range source {
-		dist[k] = v
-	}
-}
diff --git a/cluster/router/v3router/router_chain_test.go b/cluster/router/v3router/router_chain_test.go
deleted file mode 100644
index 31a824e95..000000000
--- a/cluster/router/v3router/router_chain_test.go
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package v3router
-
-import (
-	"fmt"
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/k8s_api"
-	"dubbo.apache.org/dubbo-go/v3/common/yaml"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/config_center"
-)
-
-const (
-	mockVSConfigPath = "./test_file/virtual_service.yml"
-	mockDRConfigPath = "./test_file/dest_rule.yml"
-	mockConfigPath   = "./test_file/mesh_route.yml"
-)
-
-func TestNewUniformRouterChain(t *testing.T) {
-	//rc, err := NewUniformRouterChain()
-	//assert.Nil(t, err)
-	//assert.NotNil(t, rc)
-}
-
-type ruleTestItemStruct struct {
-	name                             string
-	matchMethodNameExact             string
-	RouterDestHost                   string
-	RouterDestSubset                 string
-	RouterFallBackDestHost           string
-	RouterFallBackDestSubset         string
-	RouterFallBackFallBackDestHost   string
-	RouterFallBackFallBackDestSubset string
-	fallbackLevel                    int
-	RouterSize                       int
-}
-
-func TestParseConfigFromFile(t *testing.T) {
-	vsBytes, _ := yaml.LoadYMLConfig(mockVSConfigPath)
-	drBytes, _ := yaml.LoadYMLConfig(mockDRConfigPath)
-	routers, err := parseFromConfigToRouters(vsBytes, drBytes)
-	fmt.Println(routers, err)
-	assert.Equal(t, len(routers), 1)
-	assert.NotNil(t, routers[0].uniformRules)
-	assert.Equal(t, len(routers[0].uniformRules), 2)
-	for i, v := range routers[0].uniformRules {
-		if i == 0 {
-			assert.Equal(t, len(v.services), 2)
-			assert.Equal(t, "com.taobao.hsf.demoService:1.0.0", v.services[0].Exact)
-			assert.Equal(t, "", v.services[0].Regex)
-			assert.Equal(t, "", v.services[0].NoEmpty)
-			assert.Equal(t, "", v.services[0].Empty)
-			assert.Equal(t, "", v.services[0].Prefix)
-
-			assert.Equal(t, "com.taobao.hsf.demoService:2.0.0", v.services[1].Exact)
-			assert.Equal(t, "", v.services[1].Regex)
-			assert.Equal(t, "", v.services[1].NoEmpty)
-			assert.Equal(t, "", v.services[1].Empty)
-			assert.Equal(t, "", v.services[1].Prefix)
-
-			assert.Equal(t, len(v.virtualServiceRules), 4)
-
-			ruleTestItemStructList := []ruleTestItemStruct{
-				{
-					name:                             "sayHello-String-method-route",
-					matchMethodNameExact:             "sayHello",
-					RouterDestHost:                   "demo",
-					RouterDestSubset:                 "v1",
-					RouterFallBackDestHost:           "demo",
-					RouterFallBackDestSubset:         "v2",
-					RouterFallBackFallBackDestHost:   "demo",
-					RouterFallBackFallBackDestSubset: "v3",
-					RouterSize:                       1,
-					fallbackLevel:                    3,
-				},
-				{
-					name:                     "sayHello-method-route",
-					matchMethodNameExact:     "s-method",
-					RouterDestHost:           "demo",
-					RouterDestSubset:         "v2",
-					RouterFallBackDestHost:   "demo",
-					RouterFallBackDestSubset: "v3",
-					RouterSize:               1,
-					fallbackLevel:            2,
-				},
-				{
-					name:                 "some-method-route",
-					matchMethodNameExact: "some-method",
-					RouterDestHost:       "demo",
-					RouterDestSubset:     "v4",
-					RouterSize:           1,
-					fallbackLevel:        1,
-				},
-				{
-					name:                             "final",
-					matchMethodNameExact:             "GetUser",
-					RouterDestHost:                   "demo",
-					RouterDestSubset:                 "v1",
-					RouterFallBackDestHost:           "demo",
-					RouterFallBackDestSubset:         "v2",
-					RouterFallBackFallBackDestHost:   "demo",
-					RouterFallBackFallBackDestSubset: "v3",
-					RouterSize:                       2,
-					fallbackLevel:                    3,
-				},
-			}
-			for i, vsRule := range v.virtualServiceRules {
-				assert.NotNil(t, v.virtualServiceRules[i].routerItem)
-				assert.Equal(t, ruleTestItemStructList[i].name, vsRule.routerItem.Name)
-				assert.Equal(t, 1, len(vsRule.routerItem.Match))
-				assert.NotNil(t, vsRule.routerItem.Match[0].Method)
-				assert.Equal(t, ruleTestItemStructList[i].matchMethodNameExact, vsRule.routerItem.Match[0].Method.NameMatch.Exact)
-				assert.Equal(t, ruleTestItemStructList[i].RouterSize, len(vsRule.routerItem.Router))
-				assert.NotNil(t, vsRule.routerItem.Router[0].Destination)
-				assert.Equal(t, ruleTestItemStructList[i].RouterDestHost, vsRule.routerItem.Router[0].Destination.Host)
-				assert.Equal(t, ruleTestItemStructList[i].RouterDestSubset, vsRule.routerItem.Router[0].Destination.Subset)
-				if vsRule.routerItem.Router[0].Destination.Fallback == nil {
-					assert.Equal(t, 1, ruleTestItemStructList[i].fallbackLevel)
-					continue
-				}
-				newRule := vsRule.routerItem.Router[0].Destination.Fallback
-				assert.NotNil(t, newRule.Destination)
-				assert.Equal(t, ruleTestItemStructList[i].RouterFallBackDestHost, newRule.Destination.Host)
-				assert.Equal(t, ruleTestItemStructList[i].RouterFallBackDestSubset, newRule.Destination.Subset)
-				if newRule.Destination.Fallback == nil {
-					assert.Equal(t, 2, ruleTestItemStructList[i].fallbackLevel)
-					continue
-				}
-
-				newRule = newRule.Destination.Fallback
-				assert.NotNil(t, newRule.Destination)
-				assert.Equal(t, ruleTestItemStructList[i].RouterFallBackFallBackDestHost, newRule.Destination.Host)
-				assert.Equal(t, ruleTestItemStructList[i].RouterFallBackFallBackDestSubset, newRule.Destination.Subset)
-				if newRule.Destination.Fallback == nil {
-					assert.Equal(t, 3, ruleTestItemStructList[i].fallbackLevel)
-				}
-			}
-
-			destMap := v.DestinationLabelListMap
-			v1Val, ok := destMap["v1"]
-			assert.True(t, ok)
-			v1SigmaVal, ok := v1Val["sigma.ali/mg"]
-			assert.True(t, ok)
-			assert.Equal(t, "v1-host", v1SigmaVal)
-			v1Generic, ok := v1Val["generic"]
-			assert.True(t, ok)
-			assert.Equal(t, "false", v1Generic)
-
-			v2Val, ok := destMap["v2"]
-			assert.True(t, ok)
-			v2Generic, ok := v2Val["generic"]
-			assert.True(t, ok)
-			assert.Equal(t, "false", v2Generic)
-
-			v3Val, ok := destMap["v3"]
-			assert.True(t, ok)
-			v3SigmaVal, ok := v3Val["sigma.ali/mg"]
-			assert.True(t, ok)
-			assert.Equal(t, "v3-host", v3SigmaVal)
-
-		}
-	}
-}
-
-func TestRouterChain_Route(t *testing.T) {
-	//rc, err := NewUniformRouterChain()
-	//assert.Nil(t, err)
-	//assert.NotNil(t, rc)
-	//newGoodURL, _ := common.NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0")
-	//newBadURL1, _ := common.NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0")
-	//newBadURL2, _ := common.NewURL("dubbo://127.0.0.1:20000/com.ikurento.user.UserProvider?interface=com.ikurento.user.UserProvider&group=&version=2.6.0")
-	//goodIvk := protocol.NewBaseInvoker(newGoodURL)
-	//b1 := protocol.NewBaseInvoker(newBadURL1)
-	//b2 := protocol.NewBaseInvoker(newBadURL2)
-	//invokerList := make([]protocol.Invoker, 3)
-	//invokerList = append(invokerList, goodIvk)
-	//invokerList = append(invokerList, b1)
-	//invokerList = append(invokerList, b2)
-	//result := rc.Route(invokerList, newGoodURL, invocation.NewRPCInvocation("GetUser", nil, nil))
-	//assert.Equal(t, 0, len(result))
-	//todo test find target invoker
-}
-
-func TestRouterChain_Process(t *testing.T) {
-	vsJson := `{"apiVersion":"service.dubbo.apache.org/v1alpha2", "kind":"VirtualService", "name":"demo-route"}`
-
-	rc := &RouterChain{}
-	mockVirtualServiceConfig := &config.VirtualServiceConfig{
-		ObjectMeta: metav1.ObjectMeta{
-			Annotations: map[string]string{
-				"kubectl.kubernetes.io/last-applied-configuration": vsJson,
-			},
-		},
-	}
-	vsValue, err := yaml.MarshalYML(mockVirtualServiceConfig)
-	assert.Nil(t, err)
-	// test virtual service config chage event
-	mockVirtualServiceChangeEvent := &config_center.ConfigChangeEvent{
-		Key:        k8s_api.VirtualServiceEventKey,
-		Value:      string(vsValue),
-		ConfigType: 0,
-	}
-	rc.Process(mockVirtualServiceChangeEvent)
-
-	// test destination rule config chage event
-	destJson := `{"apiVersion":"service.dubbo.apache.org/v1alpha2", "kind":"VirtualService", "name":"demo-route"}`
-	mockDestinationRuleConfig := &config.DestinationRuleConfig{
-		ObjectMeta: metav1.ObjectMeta{
-			Annotations: map[string]string{
-				"kubectl.kubernetes.io/last-applied-configuration": destJson,
-			},
-		},
-	}
-	drValue, err := yaml.MarshalYML(mockDestinationRuleConfig)
-	assert.Nil(t, err)
-	mockDestinationRuleChangeEvent := &config_center.ConfigChangeEvent{
-		Key:        k8s_api.DestinationRuleEventKey,
-		Value:      string(drValue),
-		ConfigType: 0,
-	}
-	rc.Process(mockDestinationRuleChangeEvent)
-}
diff --git a/cluster/router/v3router/test_file/dest_rule.yml b/cluster/router/v3router/test_file/dest_rule.yml
deleted file mode 100644
index 89bd88f01..000000000
--- a/cluster/router/v3router/test_file/dest_rule.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-apiVersion: service.dubbo.apache.org/v1alpha1
-kind: DestinationRule
-metadata:
-  name: demo-route
-spec:
-  host: demo
-  subsets:
-    - name: v1
-      labels:
-        sigma.ali/mg: v1-host
-        generic: false
-    - name: v2
-      labels:
-        generic: false
-    - name: v3
-      labels:
-        sigma.ali/mg: v3-host
\ No newline at end of file
diff --git a/cluster/router/v3router/test_file/virtual_service.yml b/cluster/router/v3router/test_file/virtual_service.yml
deleted file mode 100644
index 1c6b7513b..000000000
--- a/cluster/router/v3router/test_file/virtual_service.yml
+++ /dev/null
@@ -1,158 +0,0 @@
-apiVersion: service.dubbo.apache.org/v1alpha1
-kind: VirtualService
-metadata:
-  name: demo-route
-spec:
-  hosts:
-    - demo  # app name
-  dubbo:
-    - services:
-        - exact: com.taobao.hsf.demoService:1.0.0
-        - exact: com.taobao.hsf.demoService:2.0.0
-      routedetail:
-        - name: sayHello-String-method-route
-          match:
-            - method:
-                name_match:
-                  exact: "sayHello"
-          #                  argp:
-          #                    - string
-          route:
-            - destination:
-                host: demo
-                subset: v1
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v2
-                    fallback:
-                      destination:
-                        host: demo
-                        subset: v3
-
-        - name: sayHello-method-route
-          match:
-            - method:
-                name_match:
-                  exact: "s-method"
-          route:
-            - destination:
-                host: demo
-                subset: v2
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v3
-        - name: some-method-route
-          match:
-            - method:
-                name_match:
-                  exact: "some-method"
-          route:
-            - destination:
-                host: demo
-                subset: v4
-        - name: final
-          match:
-            - method:
-                name_match:
-                  exact: "GetUser"
-
-          route:
-            - destination:
-                host: demo
-                subset: v1
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v2
-                    fallback:
-                      destination:
-                        host: demo
-                        subset: v3
-            - destination:
-                host: demo
-                subset: v3
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v2
-                    fallback:
-                      destination:
-                        host: demo
-                        subset: v1
-    - services:
-        - exact: com.taobao.hsf.demoService:1.0.0
-        - exact: org.apache.dubbo.UserProvider
-      routedetail:
-        - name: sayHello-String-method-route
-          match:
-            - method:
-                name_match:
-                  exact: "sayHello"
-          #                  argp:
-          #                    - string
-          route:
-            - destination:
-                host: demo
-                subset: v1
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v2
-                    fallback:
-                      destination:
-                        host: demo
-                        subset: v3
-
-        - name: sayHello-method-route
-          match:
-            - method:
-                name_match:
-                  exact: "s-method"
-          route:
-            - destination:
-                host: demo
-                subset: v2
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v3
-        - name: some-method-route
-          match:
-            - method:
-                name_match:
-                  exact: "some-method"
-          route:
-            - destination:
-                host: demo
-                subset: v4
-        - name: final
-          match:
-            - method:
-                name_match:
-                  exact: "GetUser"
-
-          route:
-            - destination:
-                host: demo
-                subset: v1
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v2
-                    fallback:
-                      destination:
-                        host: demo
-                        subset: v3
-            - destination:
-                host: demo
-                subset: v3
-                fallback:
-                  destination:
-                    host: demo
-                    subset: v2
-                    fallback:
-                      destination:
-                        host: demo
-                        subset: v1
\ No newline at end of file
diff --git a/cluster/router/v3router/uniform_route.go b/cluster/router/v3router/uniform_route.go
deleted file mode 100644
index 2b13684ac..000000000
--- a/cluster/router/v3router/uniform_route.go
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package v3router
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/config_center"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-)
-
-const (
-	name = "uniform-router"
-)
-
-// UniformRouter have
-type UniformRouter struct {
-	uniformRules []*UniformRule
-}
-
-// NewUniformRouter construct an NewConnCheckRouter via url
-func NewUniformRouter(dubboRoutes []*config.DubboRoute, destinationMap map[string]map[string]string) *UniformRouter {
-	uniformRules := make([]*UniformRule, 0)
-	for _, v := range dubboRoutes {
-		uniformRules = append(uniformRules, newUniformRule(v, destinationMap))
-	}
-
-	return &UniformRouter{
-		uniformRules: uniformRules,
-	}
-}
-
-// Route gets a list of routed invoker
-func (r *UniformRouter) Route(invokers []protocol.Invoker, url *common.URL, invocation protocol.Invocation) []protocol.Invoker {
-	resultInvokers := make([]protocol.Invoker, 0)
-	for _, v := range r.uniformRules {
-		if resultInvokers = v.route(invokers, url, invocation); len(resultInvokers) == 0 {
-			continue
-		}
-		// once there is a uniformRule successfully get target invoker lists, return it
-		return resultInvokers
-	}
-	// return s empty invoker list
-	return resultInvokers
-}
-
-// Process there is no process needs for uniform Router, as it upper struct RouterChain has done it
-func (r *UniformRouter) Process(event *config_center.ConfigChangeEvent) {
-}
-
-// Name get name of ConnCheckerRouter
-func (r *UniformRouter) Name() string {
-	return name
-}
-
-// Priority get Router priority level
-func (r *UniformRouter) Priority() int64 {
-	return 0
-}
-
-// URL Return URL in router
-func (r *UniformRouter) URL() *common.URL {
-	return nil
-}
-
-// Notify the router the invoker list
-func (r *UniformRouter) Notify(invokers []protocol.Invoker) {
-}
diff --git a/cluster/router/v3router/uniform_rule.go b/cluster/router/v3router/uniform_rule.go
deleted file mode 100644
index 53f940b17..000000000
--- a/cluster/router/v3router/uniform_rule.go
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package v3router
-
-import (
-	"math/rand"
-	"time"
-)
-
-import (
-	perrors "github.com/pkg/errors"
-)
-
-import (
-	"dubbo.apache.org/dubbo-go/v3/cluster/router/v3router/judger"
-	"dubbo.apache.org/dubbo-go/v3/common"
-	"dubbo.apache.org/dubbo-go/v3/common/logger"
-	"dubbo.apache.org/dubbo-go/v3/config"
-	"dubbo.apache.org/dubbo-go/v3/protocol"
-)
-
-// VirtualServiceRule is item of virtual service, it aims at judge if invocation context match it's condition, and
-// if match, get result destination key, which should be defined in DestinationRule yaml file
-type VirtualServiceRule struct {
-	// routerItem store match router list and destination list of this router
-	routerItem *config.DubboRouteDetail
-
-	// uniformRule is the upper struct ptr
-	uniformRule *UniformRule
-}
-
-// match read from VirtualServiceRule's Match config
-// it judges if this invocation matches the router rule request defined in config one by one
-func (r *VirtualServiceRule) match(url *common.URL, invocation protocol.Invocation) bool {
-	for _, v := range r.routerItem.Match {
-		// method match judge
-		if v.Method != nil {
-			methodMatchJudger := judger.NewMethodMatchJudger(v.Method)
-			if !methodMatchJudger.Judge(invocation) {
-				return false
-			}
-		}
-
-		// source label match judge
-		if !judger.JudgeUrlLabel(url, v.SourceLabels) {
-			return false
-		}
-
-		// attachment match judge
-		if v.Attachment != nil {
-			attachmentMatchJudger := judger.NewAttachmentMatchJudger(v.Attachment)
-			if attachmentMatchJudger.Judge(invocation) {
-				return false
-			}
-		}
-		// threshold match judge
-		// todo
-
-		// reserve match judge
-		// todo
-	}
-	return true
-}
-
-// tryGetSubsetFromRouterOfOneDestination is a recursion function
-// try from destination 's header to final fallback destination, when success, it return result destination, else return error
-func (r *VirtualServiceRule) tryGetSubsetFromRouterOfOneDestination(desc *config.DubboDestination, invokers []protocol.Invoker) ([]protocol.Invoker, int, error) {
-	subSet := desc.Destination.Subset
-	labels, ok := r.uniformRule.DestinationLabelListMap[subSet]
-	resultInvokers := make([]protocol.Invoker, 0)
-	if ok {
-		for _, v := range invokers {
-			if judger.JudgeUrlLabel(v.GetURL(), labels) {
-				resultInvokers = append(resultInvokers, v)
-			}
-		}
-		if len(resultInvokers) != 0 {
-			return resultInvokers, desc.Destination.Weight, nil
-		}
-	}
-
-	if desc.Destination.Fallback != nil {
-		return r.tryGetSubsetFromRouterOfOneDestination(desc.Destination.Fallback, invokers)
-	}
-	return nil, 0, perrors.New("No invoker matches and no fallback destination to choose!")
-}
-
-//weightInvokersPair stores weight and invoker list.
-type weightInvokersPair struct {
-	weight      int
-	invokerList []protocol.Invoker
-}
-
-type weightInvokerPairResults struct {
-	pairs []weightInvokersPair
-}
-
-func (w *weightInvokerPairResults) getTargetInvokers() []protocol.Invoker {
-	if len(w.pairs) == 0 {
-		return []protocol.Invoker{}
-	}
-
-	if len(w.pairs) == 1 {
-		return w.pairs[0].invokerList
-	}
-	rand.Seed(time.Now().UnixNano())
-	target := rand.Intn(100)
-	// noweight means all weigh is zero, random choose one invoker list
-	noWeight := true
-	// check if empty
-	for _, v := range w.pairs {
-		if v.weight != 0 {
-			noWeight = false // user defined weight
-			break
-		}
-	}
-	if noWeight {
-		// random choose one list
-		weitUnit := 100/len(w.pairs) + 1
-		return w.pairs[target/weitUnit].invokerList
-	} else {
-		total := 0
-		for _, v := range w.pairs {
-			total += v.weight
-			if total > target {
-				return v.invokerList
-			}
-		}
-	}
-	// invalid weight set: total is smaller than 100, choose first
-	return w.pairs[0].invokerList
-}
-
-func (r *VirtualServiceRule) getRuleTargetInvokers(invokers []protocol.Invoker) ([]protocol.Invoker, error) {
-	// weightInvokerPairResult is the collection routerDesc of all destination fields,
-	weightInvokerPairResult := weightInvokerPairResults{}
-	for _, v := range r.routerItem.Router {
-		// v is one destination 's header e.g.
-		/*
-			   route:
-				 - destination:      # v is here
-					 host: demo
-					 subset: v1
-				   fallback:
-					 destination:
-					   host: demo
-					   subset: v2
-					 fallback:
-					   destination:
-						 host: demo
-						 subset: v3
-				 - destination:
-					 host: demo
-					 subset: v4
-				   fallback:
-					 destination:
-					   host: demo
-					   subset: v5
-					 fallback:
-					   destination:
-						 host: demo
-						 subset: v6
-		*/
-		invokerListOfOneDest, weight, err := r.tryGetSubsetFromRouterOfOneDestination(v, invokers)
-		if err != nil {
-			return nil, err
-		}
-		// combination of all destination field e.g.
-		/*
-			 - destination:
-			   host: demo
-			   subset: na61
-			- destination:
-			   host: demo
-			   subset: na610
-		*/
-		weightInvokerPairResult.pairs = append(weightInvokerPairResult.pairs, weightInvokersPair{
-			weight:      weight,
-			invokerList: invokerListOfOneDest,
-		})
-	}
-
-	return weightInvokerPairResult.getTargetInvokers(), nil
-}
-
-// UniformRule uniform rule
-type UniformRule struct {
-	services                []*config.StringMatch
-	virtualServiceRules     []VirtualServiceRule
-	DestinationLabelListMap map[string]map[string]string
-}
-
-// NewDefaultConnChecker constructs a new DefaultConnChecker based on the url
-func newUniformRule(dubboRoute *config.DubboRoute, destinationMap map[string]map[string]string) *UniformRule {
-	uniformRule := &UniformRule{
-		services:                dubboRoute.Services,
-		DestinationLabelListMap: destinationMap,
-	}
-
-	routeDetail := dubboRoute.RouterDetail
-	virtualServiceRules := make([]VirtualServiceRule, 0)
-	for _, v := range routeDetail {
-		virtualServiceRules = append(virtualServiceRules, VirtualServiceRule{
-			routerItem:  v,
-			uniformRule: uniformRule,
-		})
-	}
-	uniformRule.virtualServiceRules = virtualServiceRules
-	return uniformRule
-}
-
-func (u *UniformRule) route(invokers []protocol.Invoker, url *common.URL, invocation protocol.Invocation) []protocol.Invoker {
-	// service rule + destination -> filter
-	resultInvokers := make([]protocol.Invoker, 0)
-	var err error
-	matchService := false
-	for _, v := range u.services {
-		// check if match service field
-		if judger.NewStringMatchJudger(v).Judge(url.ServiceKey()) {
-			matchService = true
-			break
-		}
-	}
-	if !matchService {
-		// if not match, jump this rule
-		return resultInvokers
-	}
-	// match service field, route Details level(service level) match
-	// then, check all sub rule, if match, get destination rule target invokers, else do fail back logic
-	for _, rule := range u.virtualServiceRules {
-		if rule.match(url, invocation) {
-			// match this rule, do get target logic
-			resultInvokers, err = rule.getRuleTargetInvokers(invokers)
-			if err != nil {
-				logger.Error("getRuleTargetInvokers from rule err = ", err)
-				return nil
-			}
-			return resultInvokers
-		}
-	}
-	logger.Errorf("no match rule for invokers %+v", invokers)
-	return resultInvokers
-}
diff --git a/common/constant/key.go b/common/constant/key.go
index a81b5a24f..9949f427b 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -303,8 +303,6 @@ const (
 	Tagkey                    = "dubbo.tag"               // key of tag
 	AttachmentKey             = DubboCtxKey("attachment") // key in context in invoker
 	TagRouterFactoryKey       = "tag"
-	V3RouterFactoryKey        = "v3router"
-	MeshRouterFactoryKey      = "mesh"
 )
 
 // Auth filter
diff --git a/config/uniform_router_config.go b/config/uniform_router_config.go
deleted file mode 100644
index 93200d9ab..000000000
--- a/config/uniform_router_config.go
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package config
-
-import (
-	"github.com/ghodss/yaml"
-
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-)
-
-type MeshRouteMetadata struct {
-	metav1.TypeMeta   `json:",inline"`
-	metav1.ObjectMeta `json:"metadata,omitempty"`
-
-	YamlAPIVersion string         `yaml:"apiVersion" `
-	YamlKind       string         `yaml:"kind" `
-	MetaData       MetaDataStruct `yaml:"metadata"`
-	Spec           interface{}
-}
-
-type MetaDataStruct struct {
-	Name string `yaml:"name" json:"name"`
-}
-
-// VirtualServiceConfig Config Definition
-type VirtualServiceConfig struct {
-	YamlAPIVersion    string `yaml:"apiVersion"`
-	YamlKind          string `yaml:"kind"`
-	metav1.TypeMeta   `json:",inline"`
-	metav1.ObjectMeta `json:"metadata,omitempty"`
-	MetaData          MetaDataStruct          `yaml:"metadata"`
-	Spec              UniformRouterConfigSpec `yaml:"spec" json:"spec"`
-}
-
-type UniformRouterConfigSpec struct {
-	Hosts []string      `yaml:"hosts" json:"hosts"`
-	Dubbo []*DubboRoute `yaml:"dubbo" json:"dubbo"`
-}
-
-type DubboRoute struct {
-	Name         string              `yaml:"name" json:"name"`
-	Services     []*StringMatch      `yaml:"services" json:"service"`
-	RouterDetail []*DubboRouteDetail `yaml:"routedetail" json:"routedetail"`
-}
-
-type DubboRouteDetail struct {
-	Name   string               `yaml:"name" json:"name"`
-	Match  []*DubboMatchRequest `yaml:"match" json:"match"`
-	Router []*DubboDestination  `yaml:"route" json:"route"`
-	// todo mirror/retries/timeout
-}
-
-type DubboMatchRequest struct {
-	Name         string                  `yaml:"name" json:"name"`
-	Method       *DubboMethodMatch       `yaml:"method" json:"method"`
-	SourceLabels map[string]string       `yaml:"sourceLabels" json:"sourceLabels"`
-	Attachment   *DubboAttachmentMatch   `yaml:"attachments" json:"attachments"`
-	Header       map[string]*StringMatch `yaml:"headers" json:"headers"`
-	Threshold    *DoubleMatch            `yaml:"threshold" json:"threshold"`
-}
-
-type DoubleMatch struct {
-	Exact float64           `yaml:"exact" json:"exact"`
-	Range *DoubleRangeMatch `yaml:"range" json:"range"`
-	Mode  float64           `yaml:"mode" json:"mode"`
-}
-
-type DoubleRangeMatch struct {
-	Start float64 `yaml:"start" json:"start"`
-	End   float64 `yaml:"end" json:"end"`
-}
-
-type DubboAttachmentMatch struct {
-	EagleeyeContext map[string]*StringMatch `yaml:"eagleeyecontext" json:"eagleeyecontext"`
-	DubboContext    map[string]*StringMatch `yaml:"dubbocontext" json:"dubbocontext"`
-}
-
-type DubboMethodMatch struct {
-	NameMatch *StringMatch            `yaml:"name_match" json:"name_match"`
-	Argc      int                     `yaml:"argc" json:"argc"`
-	Args      []*DubboMethodArg       `yaml:"args" json:"args"`
-	Argp      []*StringMatch          `yaml:"argp" json:"argp"`
-	Headers   map[string]*StringMatch `yaml:"headers" json:"headers"`
-}
-
-type DubboMethodArg struct {
-	Index     uint32           `yaml:"index" json:"index"`
-	Type      string           `yaml:"type" json:"type"`
-	StrValue  *ListStringMatch `yaml:"str_value" json:"str_value"`
-	NumValue  *ListDoubleMatch `yaml:"num_value" json:"num_value"`
-	BoolValue *BoolMatch       `yaml:"bool_value" json:"bool_value"`
-	//todo reserve field
-}
-
-type ListStringMatch struct {
-	Oneof []*StringMatch `yaml:"oneof" json:"oneof"`
-}
-
-type ListDoubleMatch struct {
-	Oneof []*DoubleMatch `yaml:"oneof" json:"oneof"`
-}
-
-type BoolMatch struct {
-	Exact bool `yaml:"exact" json:"exact"`
-}
-
-type StringMatch struct {
-	Exact   string `yaml:"exact" json:"exact"`
-	Prefix  string `yaml:"prefix" json:"prefix"`
-	Regex   string `yaml:"regex" json:"regex"`
-	NoEmpty string `yaml:"noempty" json:"noempty"`
-	Empty   string `yaml:"empty" json:"empty"`
-}
-
-type DubboDestination struct {
-	Destination RouterDest `yaml:"destination" json:"destination"`
-	//Subset      string            `yaml:"subset"`
-}
-
-type RouterDest struct {
-	Host     string            `yaml:"host" json:"host"`
-	Subset   string            `yaml:"subset" json:"subset"`
-	Weight   int               `yaml:"weight" json:"weight"`
-	Fallback *DubboDestination `yaml:"fallback" json:"fallback"`
-	// todo port
-}
-
-// DestinationRuleConfig Definition
-type DestinationRuleConfig struct {
-	metav1.TypeMeta   `json:",inline"`
-	metav1.ObjectMeta `json:"metadata,omitempty"`
-	YamlAPIVersion    string              `yaml:"apiVersion" `
-	YamlKind          string              `yaml:"kind" `
-	MetaData          MetaDataStruct      `yaml:"metadata"`
-	Spec              DestinationRuleSpec `yaml:"spec" json:"spec"`
-}
-
-func (drc *DestinationRuleConfig) DeepCopyObject() runtime.Object {
-	data, _ := yaml.Marshal(drc)
-	out := &DestinationRuleConfig{}
-	yaml.Unmarshal(data, out)
-	return out
-}
-
-type DestinationRuleSpec struct {
-	Host    string                  `yaml:"host" json:"host"`
-	SubSets []DestinationRuleSubSet `yaml:"subsets" json:"subsets"`
-}
-
-type DestinationRuleSubSet struct {
-	Name   string            `yaml:"name" json:"name"`
-	Labels map[string]string `yaml:"labels" json:"labels"`
-}
-
-func (urc *VirtualServiceConfig) DeepCopyObject() runtime.Object {
-	data, _ := yaml.Marshal(urc)
-	out := &VirtualServiceConfig{}
-	yaml.Unmarshal(data, out)
-	return out
-}
-
-type DestinationRuleSpecList struct {
-	metav1.TypeMeta `json:",inline"`
-	metav1.ListMeta `json:"metadata,omitempty"`
-	Items           []DestinationRuleSpec `json:"items"`
-}
-
-type VirtualServiceConfigList struct {
-	metav1.TypeMeta `json:",inline"`
-	metav1.ListMeta `json:"metadata,omitempty"`
-	Items           []VirtualServiceConfig `json:"items"`
-}
-
-func (drc *VirtualServiceConfigList) DeepCopyObject() runtime.Object {
-	out := &VirtualServiceConfigList{
-		TypeMeta: drc.TypeMeta,
-		ListMeta: drc.ListMeta,
-	}
-	for _, v := range drc.Items {
-		spec := v.DeepCopyObject().(*VirtualServiceConfig)
-		out.Items = append(out.Items, *spec)
-	}
-	return out
-}
-
-type DestinationRuleConfigList struct {
-	metav1.TypeMeta `json:",inline"`
-	metav1.ListMeta `json:"metadata,omitempty"`
-	Items           []DestinationRuleConfig `json:"items"`
-}
-
-func (drc *DestinationRuleConfigList) DeepCopyObject() runtime.Object {
-	out := &DestinationRuleConfigList{
-		TypeMeta: drc.TypeMeta,
-		ListMeta: drc.ListMeta,
-	}
-	for _, v := range drc.Items {
-		spec := v.DeepCopyObject().(*DestinationRuleConfig)
-		out.Items = append(out.Items, *spec)
-	}
-	return out
-}
diff --git a/config/uniform_router_config_test.go b/config/uniform_router_config_test.go
deleted file mode 100644
index a8d1467ae..000000000
--- a/config/uniform_router_config_test.go
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package config
-
-import (
-	"testing"
-)
-
-import (
-	"github.com/stretchr/testify/assert"
-
-	"k8s.io/apimachinery/pkg/apis/meta/v1"
-)
-
-func TestDestinationRuleConfig(t *testing.T) {
-	config := &DestinationRuleConfig{YamlAPIVersion: "1.0.0", YamlKind: "dubbo"}
-	object := config.DeepCopyObject()
-	assert.NotNil(t, object)
-
-	vsv := &VirtualServiceConfigList{TypeMeta: v1.TypeMeta{Kind: "dubbo"}}
-	object = vsv.DeepCopyObject()
-	assert.NotNil(t, object)
-
-	drc := &DestinationRuleConfigList{TypeMeta: v1.TypeMeta{Kind: "dubbo"}}
-	object = drc.DeepCopyObject()
-	assert.NotNil(t, object)
-}
diff --git a/go.mod b/go.mod
index b6eebebef..683d10332 100644
--- a/go.mod
+++ b/go.mod
@@ -21,7 +21,6 @@ require (
 	github.com/emicklei/go-restful/v3 v3.7.4
 	github.com/envoyproxy/go-control-plane v0.10.1
 	github.com/fsnotify/fsnotify v1.5.4
-	github.com/ghodss/yaml v1.0.0
 	github.com/go-co-op/gocron v1.9.0
 	github.com/go-playground/validator/v10 v10.11.0
 	github.com/go-resty/resty/v2 v2.7.0
@@ -42,6 +41,7 @@ require (
 	github.com/polarismesh/polaris-go v1.0.2
 	github.com/prometheus/client_golang v1.12.1
 	github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b
+	github.com/spf13/afero v1.2.2 // indirect
 	github.com/stretchr/testify v1.7.1
 	github.com/zouyx/agollo/v3 v3.4.5
 	go.etcd.io/etcd/api/v3 v3.5.4
@@ -52,6 +52,4 @@ require (
 	google.golang.org/grpc v1.45.0
 	google.golang.org/protobuf v1.28.0
 	gopkg.in/yaml.v2 v2.4.0
-	k8s.io/apimachinery v0.22.4
-	k8s.io/client-go v0.16.9
 )
diff --git a/go.sum b/go.sum
index 6d26cf429..066e4a761 100644
--- a/go.sum
+++ b/go.sum
@@ -35,13 +35,6 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
 contrib.go.opencensus.io/exporter/prometheus v0.4.1 h1:oObVeKo2NxpdF/fIfrPsNj6K0Prg0R0mHM+uANlYMiM=
 contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
-github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -50,12 +43,7 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob
 github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
 github.com/Julusian/godocdown v0.0.0-20170816220326-6d19f8ff2df8/go.mod h1:INZr5t32rG59/5xeltqoCJoNY7e5x/3xoY9WSWVWg74=
 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
-github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/RoaringBitmap/roaring v0.7.1 h1:HkcLv8q/kwGJnhEWe+vinu+04DGDdQ7nVivMhNhxP2g=
 github.com/RoaringBitmap/roaring v0.7.1/go.mod h1:jdT9ykXwHFNdJbEtxePexlFYH9LXucApeS0/+/g+p1I=
 github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
@@ -94,7 +82,6 @@ github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
-github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
 github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
 github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
@@ -177,14 +164,11 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
 github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls=
 github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY=
-github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
-github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
 github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
 github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 h1:XoR8SSVziXe698dt4uZYDfsmHpKLemqAgFyndQsq5Kw=
 github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
@@ -209,10 +193,6 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
 github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
-github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
-github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw=
-github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful/v3 v3.7.4 h1:PVGUqKvvMzQYiO89TdXrH9EMks+okTaRIMQ3jgMdZ30=
 github.com/emicklei/go-restful/v3 v3.7.4/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
@@ -228,8 +208,6 @@ github.com/envoyproxy/go-control-plane v0.10.1 h1:cgDRLG7bs59Zd+apAWuzLQL95obVYA
 github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
 github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
 github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
@@ -248,7 +226,6 @@ github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwV
 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
 github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JYMGs=
 github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
-github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
@@ -272,18 +249,8 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
 github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=
 github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
-github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc=
-github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
 github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
-github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
-github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
-github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
-github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
 github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
@@ -305,7 +272,6 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
 github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
@@ -329,7 +295,6 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
 github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
 github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g=
 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
-github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -374,10 +339,7 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
-github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -395,10 +357,6 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
 github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
 github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
-github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
-github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
 github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
 github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 h1:twflg0XRTjwKpxb/jFExr4HGq6on2dEOmnL6FV+fgPw=
 github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -408,7 +366,6 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
 github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0=
@@ -481,7 +438,6 @@ github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKe
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
 github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
@@ -500,7 +456,6 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22
 github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
 github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -551,9 +506,6 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q
 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=
 github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
-github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
 github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
@@ -591,11 +543,9 @@ github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
 github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
 github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
 github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
@@ -603,10 +553,8 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
 github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
 github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM=
 github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw=
-github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA=
 github.com/nacos-group/nacos-sdk-go v1.1.1 h1:beczWcOoTaVBMgCgikqvZflrN5Xbw7pWAWpxl+VJGIA=
 github.com/nacos-group/nacos-sdk-go v1.1.1/go.mod h1:UHOtQNQY/qpk2dhg6gDq8u5+/CEIc3+lWmrmxEzX0/g=
@@ -621,22 +569,13 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi
 github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
 github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
-github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
 github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
 github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
@@ -656,7 +595,6 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9
 github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI=
 github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
 github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
-github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
 github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
@@ -668,7 +606,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
-github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/polarismesh/polaris-go v1.0.2 h1:vMPTgO+DKNq9mC5HP7wFnlotIqg2waOAIKQq0qoZchY=
@@ -769,7 +706,6 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
@@ -778,14 +714,12 @@ github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5q
 github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
 github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/stephens2424/writerset v1.0.2/go.mod h1:aS2JhsMn6eA7e82oNmW4rfsgAOp9COBTTl8mzkwADnc=
-github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
 github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
 github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
 github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -887,13 +821,11 @@ go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
 go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
@@ -939,7 +871,6 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -961,9 +892,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
 golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -975,7 +904,6 @@ golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/
 golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
 golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
@@ -985,7 +913,6 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
 golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -1012,7 +939,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1022,7 +948,6 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1034,14 +959,11 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1059,7 +981,6 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1078,7 +999,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1086,9 +1006,7 @@ golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0=
 golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1110,7 +1028,6 @@ golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGm
 golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -1235,7 +1152,6 @@ google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6D
 google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
 google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
 google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247 h1:ZONpjmFT5e+I/0/xE3XXbG5OIvX2hRYzol04MhKBl2E=
@@ -1297,8 +1213,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
 gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
 gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
@@ -1319,7 +1233,6 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
 gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
@@ -1331,35 +1244,10 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-k8s.io/api v0.16.9 h1:3vCx0WX9qcg1Hv4aQ/G1tiIKectGVuimvPVTJU4VOCA=
-k8s.io/api v0.16.9/go.mod h1:Y7dZNHs1Xy0mSwSlzL9QShi6qkljnN41yR8oWCRTDe8=
-k8s.io/apimachinery v0.16.9/go.mod h1:Xk2vD2TRRpuWYLQNM6lT9R7DSFZUYG03SarNkbGrnKE=
-k8s.io/apimachinery v0.22.4 h1:9uwcvPpukBw/Ri0EUmWz+49cnFtaoiyEhQTK+xOe7Ck=
-k8s.io/apimachinery v0.22.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0=
-k8s.io/client-go v0.16.9 h1:6Eh4lMDxFtDzBkqid1AOL3bQ/pPYrulx8l23DXw4mRU=
-k8s.io/client-go v0.16.9/go.mod h1:ThjPlh7Kx+XoBFOCt775vx5J7atwY7F/zaFzTco5gL0=
-k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
-k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
-k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
-k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
-k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
-k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
-k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE=
-k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=
-sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
-sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
-sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
 sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/imports/imports.go b/imports/imports.go
index 5bf466663..4fce97f77 100644
--- a/imports/imports.go
+++ b/imports/imports.go
@@ -32,7 +32,6 @@ import (
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance/p2c"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance/random"
 	_ "dubbo.apache.org/dubbo-go/v3/cluster/loadbalance/roundrobin"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/router/meshrouter"
 	_ "dubbo.apache.org/dubbo-go/v3/common/proxy/proxy_factory"
 	_ "dubbo.apache.org/dubbo-go/v3/config_center/apollo"
 	_ "dubbo.apache.org/dubbo-go/v3/config_center/nacos"
diff --git a/registry/directory/directory_test.go b/registry/directory/directory_test.go
index c42418e2e..33814430a 100644
--- a/registry/directory/directory_test.go
+++ b/registry/directory/directory_test.go
@@ -29,8 +29,7 @@ import (
 
 import (
 	"dubbo.apache.org/dubbo-go/v3/cluster/cluster"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/router"
-	_ "dubbo.apache.org/dubbo-go/v3/cluster/router/v3router"
+	_ "dubbo.apache.org/dubbo-go/v3/cluster/router/tag"
 	"dubbo.apache.org/dubbo-go/v3/common"
 	"dubbo.apache.org/dubbo-go/v3/common/constant"
 	"dubbo.apache.org/dubbo-go/v3/common/extension"
@@ -206,7 +205,6 @@ func TestToGroupInvokers(t *testing.T) {
 		time.Sleep(1e9)
 		assert.True(t, len(registryDirectory.toGroupInvokers()) == 2)
 	})
-
 	t.Run("DifferentGroup", func(t *testing.T) {
 		extension.SetCluster("mock", cluster.NewMockCluster)