Skip to content
Snippets Groups Projects
Commit 6d5d8498 authored by 邹毅贤's avatar 邹毅贤
Browse files

add to routers method

parent af32a05a
No related branches found
No related tags found
No related merge requests found
...@@ -36,12 +36,3 @@ func GetRouterFactory(name string) cluster.RouterFactory { ...@@ -36,12 +36,3 @@ func GetRouterFactory(name string) cluster.RouterFactory {
return routers[name]() return routers[name]()
} }
func GetRouterFactories() []cluster.RouterFactory {
var factorys []cluster.RouterFactory
for _, value := range routers {
factorys = append(factorys, value())
}
return factorys
}
...@@ -18,7 +18,9 @@ ...@@ -18,7 +18,9 @@
package directory package directory
import ( import (
gxset "github.com/dubbogo/gost/container/set"
"reflect" "reflect"
"strings"
"sync" "sync"
"time" "time"
) )
...@@ -127,23 +129,23 @@ func (dir *registryDirectory) refreshInvokers(res *registry.ServiceEvent) { ...@@ -127,23 +129,23 @@ func (dir *registryDirectory) refreshInvokers(res *registry.ServiceEvent) {
} }
switch res.Action { switch res.Action {
case remoting.EventTypeAdd: case remoting.EventTypeAdd:
//dirUrl := &res.Service dirUrl := &res.Service
//var urls []*common.URL var urls []*common.URL
//
//for _, v := range dirUrl.GetBackupUrls() { for _, v := range dirUrl.GetBackupUrls() {
// p := v.Protocol p := v.Protocol
// category := v.GetParam(constant.CATEGORY_KEY, constant.PROVIDERS_CATEGORY) category := v.GetParam(constant.CATEGORY_KEY, constant.PROVIDERS_CATEGORY)
// if strings.EqualFold(category, constant.ROUTERS_CATEGORY) || strings.EqualFold(constant.ROUTE_PROTOCOL, p) { if strings.EqualFold(category, constant.ROUTERS_CATEGORY) || strings.EqualFold(constant.ROUTE_PROTOCOL, p) {
// urls = append(urls, v) urls = append(urls, v)
// } }
//} }
//
//if len(urls) > 0 { if len(urls) > 0 {
// routers := toRouters(urls) routers := toRouters(urls)
// if len(routers) > 0 { if len(routers) > 0 {
// dir.SetRouters(routers) dir.SetRouters(routers)
// } }
//} }
//dir.cacheService.EventTypeAdd(res.Path, dir.serviceTTL) //dir.cacheService.EventTypeAdd(res.Path, dir.serviceTTL)
dir.cacheInvoker(url) dir.cacheInvoker(url)
...@@ -163,7 +165,34 @@ func (dir *registryDirectory) refreshInvokers(res *registry.ServiceEvent) { ...@@ -163,7 +165,34 @@ func (dir *registryDirectory) refreshInvokers(res *registry.ServiceEvent) {
} }
func toRouters(urls []*common.URL) []cluster.Router { func toRouters(urls []*common.URL) []cluster.Router {
return nil if urls == nil || len(urls) == 0 {
return nil
}
routerMap := gxset.NewSet()
for _, url := range urls {
if url.Protocol == constant.EMPTY_PROTOCOL {
continue
}
routerKey := url.GetParam(constant.ROUTER_KEY, "")
if routerKey == "" {
continue
}
url.Protocol = routerKey
factory := extension.GetRouterFactory(url.GetParam(constant.ROUTER_KEY, "condition"))
router, e := factory.Router(url)
if e != nil {
logger.Error("factory.Router(url){%s} , error : %s", url, e)
}
routerMap.Add(router)
}
routers := make([]cluster.Router, 0)
for _, v := range routerMap.Values() {
routers = append(routers, v.(cluster.Router))
}
return routers
} }
func (dir *registryDirectory) toGroupInvokers() []protocol.Invoker { func (dir *registryDirectory) toGroupInvokers() []protocol.Invoker {
......
...@@ -19,6 +19,8 @@ package directory ...@@ -19,6 +19,8 @@ package directory
import ( import (
"context" "context"
"encoding/base64"
gxnet "github.com/dubbogo/gost/net"
"net/url" "net/url"
"strconv" "strconv"
"testing" "testing"
...@@ -31,6 +33,7 @@ import ( ...@@ -31,6 +33,7 @@ import (
import ( import (
"github.com/apache/dubbo-go/cluster/cluster_impl" "github.com/apache/dubbo-go/cluster/cluster_impl"
_ "github.com/apache/dubbo-go/cluster/router"
"github.com/apache/dubbo-go/common" "github.com/apache/dubbo-go/common"
"github.com/apache/dubbo-go/common/constant" "github.com/apache/dubbo-go/common/constant"
"github.com/apache/dubbo-go/common/extension" "github.com/apache/dubbo-go/common/extension"
...@@ -201,3 +204,20 @@ func normalRegistryDir(noMockEvent ...bool) (*registryDirectory, *registry.MockR ...@@ -201,3 +204,20 @@ func normalRegistryDir(noMockEvent ...bool) (*registryDirectory, *registry.MockR
} }
return registryDirectory, mockRegistry.(*registry.MockRegistry) return registryDirectory, mockRegistry.(*registry.MockRegistry)
} }
func TestToRouter(t *testing.T) {
localIP, _ := gxnet.GetLocalIP()
rule := base64.URLEncoding.EncodeToString([]byte("host = " + localIP + " => " + " host = 10.20.3.3"))
url, _ := common.NewURL(
context.TODO(),
"dubbo://0.0.0.0/com.foo.BarService",
common.WithParamsValue(constant.RULE_KEY, rule),
common.WithParamsValue(constant.ROUTER_KEY, "condition"),
)
urls := make([]*common.URL, 0)
urls = append(urls, &url)
routers := toRouters(urls)
assert.Equal(t, 1, len(routers))
router := routers[0]
assert.Equal(t, "condition", router.Url().Protocol)
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment