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 {
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 @@
package directory
import (
gxset "github.com/dubbogo/gost/container/set"
"reflect"
"strings"
"sync"
"time"
)
......@@ -127,23 +129,23 @@ func (dir *registryDirectory) refreshInvokers(res *registry.ServiceEvent) {
}
switch res.Action {
case remoting.EventTypeAdd:
//dirUrl := &res.Service
//var urls []*common.URL
//
//for _, v := range dirUrl.GetBackupUrls() {
// p := v.Protocol
// category := v.GetParam(constant.CATEGORY_KEY, constant.PROVIDERS_CATEGORY)
// if strings.EqualFold(category, constant.ROUTERS_CATEGORY) || strings.EqualFold(constant.ROUTE_PROTOCOL, p) {
// urls = append(urls, v)
// }
//}
//
//if len(urls) > 0 {
// routers := toRouters(urls)
// if len(routers) > 0 {
// dir.SetRouters(routers)
// }
//}
dirUrl := &res.Service
var urls []*common.URL
for _, v := range dirUrl.GetBackupUrls() {
p := v.Protocol
category := v.GetParam(constant.CATEGORY_KEY, constant.PROVIDERS_CATEGORY)
if strings.EqualFold(category, constant.ROUTERS_CATEGORY) || strings.EqualFold(constant.ROUTE_PROTOCOL, p) {
urls = append(urls, v)
}
}
if len(urls) > 0 {
routers := toRouters(urls)
if len(routers) > 0 {
dir.SetRouters(routers)
}
}
//dir.cacheService.EventTypeAdd(res.Path, dir.serviceTTL)
dir.cacheInvoker(url)
......@@ -163,7 +165,34 @@ func (dir *registryDirectory) refreshInvokers(res *registry.ServiceEvent) {
}
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 {
......
......@@ -19,6 +19,8 @@ package directory
import (
"context"
"encoding/base64"
gxnet "github.com/dubbogo/gost/net"
"net/url"
"strconv"
"testing"
......@@ -31,6 +33,7 @@ import (
import (
"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/constant"
"github.com/apache/dubbo-go/common/extension"
......@@ -201,3 +204,20 @@ func normalRegistryDir(noMockEvent ...bool) (*registryDirectory, *registry.MockR
}
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