diff --git a/before_ut.bat b/before_ut.bat index 5296d0f8769b7b9f521f82e68bf3b10f4b5d16b4..a5557ae1ab32e80b077d22c2c006a084288549cf 100644 --- a/before_ut.bat +++ b/before_ut.bat @@ -15,7 +15,8 @@ :: limitations under the License. set zkJar=zookeeper-3.4.9-fatjar.jar -md remoting\zookeeper\zookeeper-4unittest\contrib\fatjar config_center\zookeeper\zookeeper-4unittest\contrib\fatjar registry\zookeeper\zookeeper-4unittest\contrib\fatjar +md remoting\zookeeper\zookeeper-4unittest\contrib\fatjar config_center\zookeeper\zookeeper-4unittest\contrib\fatjar registry\zookeeper\zookeeper-4unittest\contrib\fatjar cluster\router\chain\zookeeper-4unittest\contrib\fatjar curl -L https://github.com/dubbogo/resources/raw/master/zookeeper-4unitest/contrib/fatjar/%zkJar% -o remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/%zkJar% xcopy /f "remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/%zkJar%" "config_center/zookeeper/zookeeper-4unittest/contrib/fatjar/" -xcopy /f "remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/%zkJar%" "registry/zookeeper/zookeeper-4unittest/contrib/fatjar/" \ No newline at end of file +xcopy /f "remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/%zkJar%" "registry/zookeeper/zookeeper-4unittest/contrib/fatjar/" +xcopy /f "remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/%zkJar%" "cluster/router/chain/zookeeper-4unittest/contrib/fatjar/" \ No newline at end of file diff --git a/before_ut.sh b/before_ut.sh old mode 100644 new mode 100755 index 323173bcc64c3cbe9916747e10dd3ea8538457ea..185c05274baff906e3f1dbef9b6c9fb2276c7533 --- a/before_ut.sh +++ b/before_ut.sh @@ -15,7 +15,8 @@ # limitations under the License. -mkdir -p remoting/zookeeper/zookeeper-4unittest/contrib/fatjar config_center/zookeeper/zookeeper-4unittest/contrib/fatjar registry/zookeeper/zookeeper-4unittest/contrib/fatjar +mkdir -p remoting/zookeeper/zookeeper-4unittest/contrib/fatjar config_center/zookeeper/zookeeper-4unittest/contrib/fatjar registry/zookeeper/zookeeper-4unittest/contrib/fatjar cluster/router/chain/zookeeper-4unittest/contrib/fatjar wget -P "remoting/zookeeper/zookeeper-4unittest/contrib/fatjar" https://github.com/dubbogo/resources/raw/master/zookeeper-4unitest/contrib/fatjar/zookeeper-3.4.9-fatjar.jar cp remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/zookeeper-3.4.9-fatjar.jar config_center/zookeeper/zookeeper-4unittest/contrib/fatjar/ -cp remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/zookeeper-3.4.9-fatjar.jar registry/zookeeper/zookeeper-4unittest/contrib/fatjar/ \ No newline at end of file +cp remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/zookeeper-3.4.9-fatjar.jar registry/zookeeper/zookeeper-4unittest/contrib/fatjar/ +cp remoting/zookeeper/zookeeper-4unittest/contrib/fatjar/zookeeper-3.4.9-fatjar.jar cluster/router/chain/zookeeper-4unittest/contrib/fatjar \ No newline at end of file diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go index d65f6d201970d955ee97202664faf4ef1de3d45b..1107e854a8220d3e8d298d40e96f29a66f931c74 100644 --- a/cluster/router/chain/chain.go +++ b/cluster/router/chain/chain.go @@ -52,16 +52,16 @@ func (c Chain) AddRouters(routers []router.Router) { c.routers = newRouters } -func NewRouterChain(url common.URL) *Chain { +func NewRouterChain(url *common.URL) *Chain { routerFactories := extension.GetRouters() if len(routerFactories) == 0 { return nil } routers := make([]router.Router, 0) for _, routerFactory := range routerFactories { - r, err := routerFactory().Router(&url) - if err != nil { - logger.Errorf("router chain build router fail! error:%v", err) + r, err := routerFactory().Router(url) + if r == nil || err != nil { + logger.Errorf("router chain build router fail! error:%s", err.Error()) continue } routers = append(routers, r) diff --git a/cluster/router/chain/chain_test.go b/cluster/router/chain/chain_test.go index 6825ddfd3ac22518a50453e8cc76cc50952659bf..228c700d905cfd57a5f5373321fd74264d52d5c6 100644 --- a/cluster/router/chain/chain_test.go +++ b/cluster/router/chain/chain_test.go @@ -16,3 +16,42 @@ */ package chain + +import ( + "context" + "github.com/apache/dubbo-go/common" + "github.com/apache/dubbo-go/common/extension" + _ "github.com/apache/dubbo-go/config_center/zookeeper" + "github.com/apache/dubbo-go/remoting/zookeeper" + "github.com/stretchr/testify/assert" + "testing" + "time" +) + +import ( + _ "github.com/apache/dubbo-go/cluster/router/condition" +) + +func TestNewRouterChain(t *testing.T) { + ts, z, _, err := zookeeper.NewMockZookeeperClient("test", 15*time.Second) + assert.NoError(t, err) + defer ts.Stop() + defer z.Close() + + t.Log(z.ZkAddrs) + + zkUrl, _ := common.NewURL(context.TODO(), "zookeeper://127.0.0.1:2181") + configuration, err := extension.GetConfigCenterFactory("zookeeper").GetDynamicConfiguration(&zkUrl) + assert.Nil(t, err) + assert.NotNil(t, configuration) + + chain := NewRouterChain(getRouteUrl("test")) + t.Log(chain.routers) +} + +func getRouteUrl(applicationKey string) *common.URL { + url, _ := common.NewURL(context.TODO(), "condition://0.0.0.0/com.foo.BarService") + url.AddParam("application", applicationKey) + url.AddParam("force", "true") + return &url +} diff --git a/cluster/router/condition/app_router.go b/cluster/router/condition/app_router.go index d5af0c36c9661d3b7a176e6e4f16a1b0d2aa0d09..2b07f8fd714aa639ded20cd8e37f3792a62766a2 100644 --- a/cluster/router/condition/app_router.go +++ b/cluster/router/condition/app_router.go @@ -31,8 +31,7 @@ type AppRouter struct { } func NewAppRouter(url *common.URL) (*AppRouter, error) { - appRouter := &AppRouter{} - err := appRouter.newListenableRouter(url, url.GetParam(constant.APPLICATION_KEY, "")) + appRouter, err := newListenableRouter(url, url.GetParam(constant.APPLICATION_KEY, "")) if err != nil { return nil, err } diff --git a/cluster/router/condition/listenable_router.go b/cluster/router/condition/listenable_router.go index 2beb60227e3221586ff293b03f48e18f97a3d3c1..8d8de42eb314de03bdba026b853f7c5335d448e5 100644 --- a/cluster/router/condition/listenable_router.go +++ b/cluster/router/condition/listenable_router.go @@ -49,28 +49,34 @@ type listenableRouter struct { priority int64 } -func (l *listenableRouter) newListenableRouter(url *common.URL, ruleKey string) error { - l.url = url - l.priority = DEFAULT_PRIORITY +func newListenableRouter(url *common.URL, ruleKey string) (*AppRouter, error) { if ruleKey == "" { - return nil + return nil, perrors.Errorf("newListenableRouter ruleKey is nil, can't create Listenable router") } + l := &AppRouter{} + + l.url = url + l.priority = DEFAULT_PRIORITY routerKey := ruleKey + RULE_SUFFIX //add listener dynamicConfiguration := config.GetEnvInstance().GetDynamicConfiguration() + if dynamicConfiguration == nil { + return nil, perrors.Errorf("get dynamicConfiguration fail, dynamicConfiguration is nil, init config center plugin please") + } + dynamicConfiguration.AddListener(routerKey, l) //get rule rule, err := dynamicConfiguration.GetRule(routerKey, config_center.WithGroup(config_center.DEFAULT_GROUP)) if len(rule) == 0 || err != nil { - return perrors.Errorf("get rule fail, config rule{%s}, error{%v}", rule, err) + return nil, perrors.Errorf("get rule fail, config rule{%s}, error{%v}", rule, err) } l.Process(&config_center.ConfigChangeEvent{ Key: routerKey, Value: rule, ConfigType: remoting.EventTypeUpdate}) - return nil + return l, nil } func (l *listenableRouter) Process(event *config_center.ConfigChangeEvent) {