dubbo路由机制分析2(路由设置存储)

接上次 https://cloud.tencent.com/developer/article/1109552

目前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.nn.nn.40 & consumer.host != 10.nn.16.41 => provider.host = 10.nn.16.* & provider.host != 10.nn.15.*&runtime=false

还可以在管理列表中设置禁用/启用一条规则,就是设置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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【专业技术】如何在Linux中添加新的系统调用

系统调用是应用程序和操作系统内核之间的功能接口。其主要目的是使得用户可以使用操作系统提供的有关设备管理、输入/输入系统、文件系统和进程控制、通信以及存储管理等方...

2634
来自专栏mwangblog

Linux文件操作

1864
来自专栏专注数据中心高性能网络技术研发

linux查看系统信息

---- 1.uname uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等) -a或--all:显示全部的信息; -m或-...

3725
来自专栏Java帮帮-微信公众号-技术文章全总结

Redis实现参数的集中式管理【面试+工作】

分布式缓存Redis也提供了类似的发布订阅功能,并且Redis本身提供了缓存和持久化的功能,本文将介绍通过Redis实现简单的参数集中式管理。

1212
来自专栏蓝天

mooon调度器设计的考量因素

2、支持业务独占进程,这是保证高可用性的前提,也是解业务与业务间,和业务和平台间耦合的前提

892
来自专栏开源优测

性能测试必备监控技能jvm之jdk命令行工具篇16

前言 对于JVM的性能监控,主要注意以下关键参数,通过jdk自带的命令行工具,即可查看相关参数,从而分析系统或目标服务程序中存在的性能瓶颈 jps JVM Pr...

30812
来自专栏钟绍威的专栏

linux常用命令之文件管理默认情况选项参数注意用法选项用法选项用法参数注意用法选项用法选项注意用法选项注意

LS ls:list directory contents 默认情况 默认情况下显示的是mtime 选项 -a 列出全部文件及目录包括隐藏的 -l 列出详细...

1789
来自专栏轮子工厂

你真的了解Linux系统吗?

现在很多公司项目部署都使用的是 Linux 服务器,互联网公司更是如此。对于大一些的互联网公司,系统可能会非常复杂,本地无法启动,一般都会采用专门的开发机给开发...

1104
来自专栏企鹅号快讯

数据权限通用设计方案

问题引出 最近,许多学员反馈项目中需要处理数据权限,但是不知道怎么处理比较合适。这篇文章将针对这个问题,给出一种比较通用且容易扩展的数据权限设计方案。 现状 目...

1K5
来自专栏HaHack

化繁为简的企业级 Git 管理实践(一):多分支子模块依赖管理

1632

扫码关注云+社区

领取腾讯云代金券