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

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


The following commit(s) were added to refs/heads/develop by this push:
     new bd0c8ed93 refactor(router): replace config package (#3186)
bd0c8ed93 is described below

commit bd0c8ed93fa14cf9e6e2e9029cf6bd9b89541e32
Author: zbchi <[email protected]>
AuthorDate: Wed Feb 11 21:22:13 2026 +0800

    refactor(router): replace config package (#3186)
    
    * refactor(router): replace config package
    
    ---------
    
    Co-authored-by: Copilot <[email protected]>
---
 cluster/router/condition/dynamic_router.go | 15 ++++++++++-----
 cluster/router/condition/factory.go        |  4 ++--
 cluster/router/condition/route.go          | 14 +++++++-------
 cluster/router/condition/router_test.go    | 20 ++++++++++----------
 cluster/router/script/router.go            |  6 +++---
 global/router_config.go                    | 26 ++++++++++++++++++++++++++
 6 files changed, 58 insertions(+), 27 deletions(-)

diff --git a/cluster/router/condition/dynamic_router.go 
b/cluster/router/condition/dynamic_router.go
index 7b52e5353..4bdc34c3e 100644
--- a/cluster/router/condition/dynamic_router.go
+++ b/cluster/router/condition/dynamic_router.go
@@ -35,8 +35,8 @@ import (
        "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/config"
        "dubbo.apache.org/dubbo-go/v3/config_center"
+       "dubbo.apache.org/dubbo-go/v3/global"
        "dubbo.apache.org/dubbo-go/v3/protocol/base"
        "dubbo.apache.org/dubbo-go/v3/remoting"
 )
@@ -322,14 +322,19 @@ type ApplicationRouter struct {
        currentApplication string
 }
 
-func NewApplicationRouter() *ApplicationRouter {
-       applicationName := config.GetApplicationConfig().Name
+func NewApplicationRouter(url *common.URL) *ApplicationRouter {
+       // get application name from url param
+       applicationName := url.GetParam(constant.ApplicationKey, "")
+       if applicationName == "" && url.SubURL != nil {
+               applicationName = url.SubURL.GetParam(constant.ApplicationKey, 
"")
+       }
+
        a := &ApplicationRouter{
                currentApplication: applicationName,
        }
 
        dynamicConfiguration := conf.GetEnvInstance().GetDynamicConfiguration()
-       if dynamicConfiguration != nil {
+       if dynamicConfiguration != nil && applicationName != "" {
                
dynamicConfiguration.AddListener(strings.Join([]string{applicationName, 
constant.ConditionRouterRuleSuffix}, ""), a)
        }
        return a
@@ -382,7 +387,7 @@ func (a *ApplicationRouter) Notify(invokers []base.Invoker) 
{
        }
 }
 
-func removeDuplicates(rules []*config.ConditionRule) {
+func removeDuplicates(rules []*global.ConditionRule) {
        for i := 0; i < len(rules); i++ {
                if rules[i] == nil {
                        continue
diff --git a/cluster/router/condition/factory.go 
b/cluster/router/condition/factory.go
index c297f59c9..16f5b957a 100644
--- a/cluster/router/condition/factory.go
+++ b/cluster/router/condition/factory.go
@@ -52,6 +52,6 @@ func NewAppConditionRouterFactory() 
router.PriorityRouterFactory {
 }
 
 // NewPriorityRouter constructs a new ApplicationRouter
-func (a *AppConditionRouterFactory) NewPriorityRouter(_ *common.URL) 
(router.PriorityRouter, error) {
-       return NewApplicationRouter(), nil
+func (a *AppConditionRouterFactory) NewPriorityRouter(url *common.URL) 
(router.PriorityRouter, error) {
+       return NewApplicationRouter(url), nil
 }
diff --git a/cluster/router/condition/route.go 
b/cluster/router/condition/route.go
index 63e7e284f..8c89cd2ef 100644
--- a/cluster/router/condition/route.go
+++ b/cluster/router/condition/route.go
@@ -37,7 +37,7 @@ import (
        "dubbo.apache.org/dubbo-go/v3/cluster/router/condition/matcher"
        "dubbo.apache.org/dubbo-go/v3/common"
        "dubbo.apache.org/dubbo-go/v3/common/constant"
-       "dubbo.apache.org/dubbo-go/v3/config"
+       "dubbo.apache.org/dubbo-go/v3/global"
        "dubbo.apache.org/dubbo-go/v3/protocol/base"
 )
 
@@ -289,9 +289,9 @@ func (a byPriority) Len() int           { return len(a) }
 func (a byPriority) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
 func (a byPriority) Less(i, j int) bool { return a[i].Priority() < 
a[j].Priority() }
 
-func parseConditionRoute(routeContent string) (*config.RouterConfig, error) {
+func parseConditionRoute(routeContent string) (*global.RouterConfig, error) {
        routeDecoder := yaml.NewDecoder(strings.NewReader(routeContent))
-       routerConfig := &config.RouterConfig{}
+       routerConfig := &global.RouterConfig{}
        err := routeDecoder.Decode(routerConfig)
        if err != nil {
                return nil, err
@@ -439,9 +439,9 @@ func NewConditionMultiDestRouter(url *common.URL) 
(*MultiDestRouter, error) {
        if !ok {
                return nil, errors.Errorf("Condition Router can't get the rule 
key")
        }
-       condConf, ok := rawCondConf.(*config.ConditionRule)
+       condConf, ok := rawCondConf.(*global.ConditionRule)
        if !ok {
-               return nil, errors.Errorf("Condition Router get the rule key 
invaild , got %T", rawCondConf)
+               return nil, errors.Errorf("Condition Router get the rule key 
invalid , got %T", rawCondConf)
        }
        // ensure config effective
        if (len(condConf.To) == 0) && condConf.From.Match == "" {
@@ -469,9 +469,9 @@ func NewConditionMultiDestRouter(url *common.URL) 
(*MultiDestRouter, error) {
        return c, nil
 }
 
-func parseMultiConditionRoute(routeContent string) (*config.ConditionRouter, 
error) {
+func parseMultiConditionRoute(routeContent string) (*global.ConditionRouter, 
error) {
        routeDecoder := yaml.NewDecoder(strings.NewReader(routeContent))
-       routerConfig := &config.ConditionRouter{}
+       routerConfig := &global.ConditionRouter{}
        err := routeDecoder.Decode(routerConfig)
        if err != nil {
                return nil, err
diff --git a/cluster/router/condition/router_test.go 
b/cluster/router/condition/router_test.go
index 14938baae..0750a5df9 100644
--- a/cluster/router/condition/router_test.go
+++ b/cluster/router/condition/router_test.go
@@ -32,9 +32,9 @@ import (
        commonConfig "dubbo.apache.org/dubbo-go/v3/common/config"
        "dubbo.apache.org/dubbo-go/v3/common/constant"
        "dubbo.apache.org/dubbo-go/v3/common/extension"
-       "dubbo.apache.org/dubbo-go/v3/config"
        "dubbo.apache.org/dubbo-go/v3/config_center"
        "dubbo.apache.org/dubbo-go/v3/config_center/configurator"
+       "dubbo.apache.org/dubbo-go/v3/global"
        "dubbo.apache.org/dubbo-go/v3/protocol/base"
        "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
        "dubbo.apache.org/dubbo-go/v3/remoting"
@@ -800,7 +800,7 @@ conditions:
        dc, _ := mockFactory.GetDynamicConfiguration(ccURL)
        commonConfig.GetEnvInstance().SetDynamicConfiguration(dc)
 
-       router := NewApplicationRouter()
+       router := NewApplicationRouter(consumerURL)
        router.Notify(invokerList)
 
        rpcInvocation := invocation.NewRPCInvocation("sayHello", nil, nil)
@@ -874,7 +874,7 @@ func Test_parseMultiConditionRoute(t *testing.T) {
        tests := []struct {
                name    string
                args    args
-               want    *config.ConditionRouter
+               want    *global.ConditionRouter
                wantErr assert.ErrorAssertionFunc
        }{
                {name: "testParseConfig", args: args{`configVersion: v3.1
@@ -898,21 +898,21 @@ conditions:
   - from:
       match: version=v1
     to:
-      - match: version=v1`}, want: &config.ConditionRouter{
+      - match: version=v1`}, want: &global.ConditionRouter{
                        Scope:   "service",
                        Key:     "org.apache.dubbo.samples.CommentService",
                        Force:   false,
                        Runtime: true,
                        Enabled: true,
-                       Conditions: []*config.ConditionRule{
+                       Conditions: []*global.ConditionRule{
                                {
-                                       From: config.ConditionRuleFrom{Match: 
"tag=tag1"},
+                                       From: global.ConditionRuleFrom{Match: 
"tag=tag1"},
                                        To:   nil,
                                }, {
-                                       From: config.ConditionRuleFrom{
+                                       From: global.ConditionRuleFrom{
                                                Match: `tag=gray`,
                                        },
-                                       To: []config.ConditionRuleTo{{
+                                       To: []global.ConditionRuleTo{{
                                                Match:  `tag!=gray`,
                                                Weight: 100,
                                        }, {
@@ -920,10 +920,10 @@ conditions:
                                                Weight: 900,
                                        }},
                                }, {
-                                       From: config.ConditionRuleFrom{
+                                       From: global.ConditionRuleFrom{
                                                Match: `version=v1`,
                                        },
-                                       To: []config.ConditionRuleTo{{
+                                       To: []global.ConditionRuleTo{{
                                                Match:  `version=v1`,
                                                Weight: 0,
                                        }},
diff --git a/cluster/router/script/router.go b/cluster/router/script/router.go
index 856e63e56..a65fac354 100644
--- a/cluster/router/script/router.go
+++ b/cluster/router/script/router.go
@@ -33,8 +33,8 @@ import (
        "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/config"
        "dubbo.apache.org/dubbo-go/v3/config_center"
+       "dubbo.apache.org/dubbo-go/v3/global"
        "dubbo.apache.org/dubbo-go/v3/protocol/base"
        "dubbo.apache.org/dubbo-go/v3/remoting"
 )
@@ -56,9 +56,9 @@ func NewScriptRouter() *ScriptRouter {
        }
 }
 
-func parseRoute(routeContent string) (*config.RouterConfig, error) {
+func parseRoute(routeContent string) (*global.RouterConfig, error) {
        routeDecoder := yaml.NewDecoder(strings.NewReader(routeContent))
-       routerConfig := &config.RouterConfig{}
+       routerConfig := &global.RouterConfig{}
        err := routeDecoder.Decode(routerConfig)
        if err != nil {
                return nil, err
diff --git a/global/router_config.go b/global/router_config.go
index 948cb5631..ff0a50495 100644
--- a/global/router_config.go
+++ b/global/router_config.go
@@ -17,6 +17,10 @@
 
 package global
 
+import (
+       "reflect"
+)
+
 import (
        "dubbo.apache.org/dubbo-go/v3/common"
 )
@@ -53,6 +57,28 @@ type ConditionRule struct {
        To   []ConditionRuleTo `yaml:"to" json:"to,omitempty" property:"to"`
 }
 
+// Equal checks if two ConditionRule instances are equal.
+func (x *ConditionRule) Equal(t *ConditionRule) bool {
+       if x == nil || t == nil {
+               return x == t
+       }
+       if !reflect.DeepEqual(x.From, t.From) {
+               return false
+       }
+       if len(x.To) != len(t.To) {
+               return false
+       }
+       if len(x.To) == 0 {
+               return true
+       }
+       for i := range x.To {
+               if !reflect.DeepEqual(x.To[i], t.To[i]) {
+                       return false
+               }
+       }
+       return true
+}
+
 type ConditionRuleFrom struct {
        Match string `yaml:"match" json:"match,omitempty" property:"match"`
 }

Reply via email to