接上次
目前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) 打开如下页面可以看到已存在的路由规则,通过单击,新增按钮,打开新增页面如下
这里可以新路由的名称,路由作用的服务名称(接口全名),还能指定作用于某个特定方法
然后是设置, 消费端,哪些(ip,应用,集群)可以访问服务(匹配),哪些不能访问服务(不匹配) 服务端,哪些(ip,集群,协议,端口)可以提供此服务(匹配),哪些不能提供此服务(不匹配) 比如我们配置了,如下一个例子,保存后,其实会把数据保存到zookeeper(注册中心),
/dubbo/demo.dubbo.api.DemoService/routers,路径中。路径中dubbo,和routers是固定的,中间是服务名。 具体是这样的,是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.还可以在管理列表中设置禁用/启用一条规则,就是设置enabled=false/true
除了路由规则页面,还可以在,服务治理->访问控制 页面设置一种特殊的路由规则:黑/白名单,如下图中,单击新增按钮后
可以对指定服务名,设置能访问他们的白名单和禁止访问他们的黑名。
我们简单配置了如下例子保存后可以看到zk routers节点中的结果,有这么一条路由规则记录
也是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