接上次http://www.javashuo.com/article/p-gnjacrbl-du.htmlweb
目前dubbo支持的路由類型分三種conditon,script,file
此次說conditon路由規則的設置方法和存儲方式
向註冊中心寫路由規則,dubbo目前提供兩種方式,
1,經過api代碼寫路由規則
以下:以zookeeper爲註冊中心爲例
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.c
lass).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:
2181"));
registry.register(URL.valueOf("condition://0.0.0.0/com.foo.BarService?category=routers
&dynamic=false&rule=" + URL.encode("host = 10.20.153.10 => host = 10.20.153.11") + "));
這種方式靈活,三種類型的路由規則均可以寫
2,經過dubbo-admin項目(管理控制檯爲阿里內部裁剪版本)裏的頁面寫路由規則,但目前只能寫condtion類型路由規則
下面具體看看經過管理頁面寫路由規則的方法以及路由規則的存儲方式
dubbo-admin是dubbo開源項目的一個子模塊,用webx框架寫的。
把dubbo-admin打包後放在tomcat容器裏(要配置好註冊中心),http://localhost:8008/就能訪問(root/root)
打開以下頁面api
能夠看到已存在的路由規則,經過單擊,新增按鈕,打開新增頁面以下tomcat
這裏能夠新路由的名稱,路由做用的服務名稱(接口全名),還能指定做用於某個特定方法
而後是設置,
消費端,哪些(ip,應用,集羣)能夠訪問服務(匹配),哪些不能訪問服務(不匹配)
服務端,哪些(ip,集羣,協議,端口)能夠提供此服務(匹配),哪些不能提供此服務(不匹配)
好比咱們配置了,以下一個例子,框架
保存後,其實會把數據保存到zookeeper(註冊中心),
/dubbo/demo.dubbo.api.DemoService/routers,路徑中。路徑中dubbo,和routers是固定的,中間是服務名。
具體是這樣的,ide
是urlencode後的字串。
圖中能夠看到,咱們設置的路由名稱和condition類型。
deconde後是這樣的
route://0.0.0.0/demo.dubbo.api.DemoService?category=routers&dynamic=false&enabled=true&force=false&name=test_rt&priority=0&router=condition&rule=consumer.host = 10.nn.nn.40 & consumer.host != 10.nn.16.41 => provider.host = 10.nn.16.* & provider.host != 10.nn.15.*&runtime=falseurl
還能夠在管理列表中設置禁用/啓用一條規則,就是設置enabled=false/true.net
除了路由規則頁面,還能夠在,服務治理->訪問控制 頁面設置一種特殊的路由規則:黑/白名單,以下圖中,單擊新增按鈕後code
能夠對指定服務名,設置能訪問他們的白名單和禁止訪問他們的黑名。
咱們簡單配置了以下例子router
保存後能夠看到zk routers節點中的結果,有這麼一條路由規則記錄blog
也是condition類型的。deconde後是這樣的 route://0.0.0.0/demo.dubbo.api.DemoService?category=routers&dynamic=false&enabled=false&force=true&name=demo.dubbo.api.DemoService blackwhitelist&priority=0&router=condition&rule=consumer.host != 192.168.64.128 => false&runtime=false, 經過上面提到的api寫到路由的規則,decode後時這樣的 condition://0.0.0.0/demo.dubbo.api.DemoService?category=routers&dynamic=false&name=test&rule=host = 10.20.153.10 => host = 10.20.153.11