availableInvokers.add(invokers.get(i));
}
}
var invArguments = invocation.getArguments();
if(invArguments == null || invArguments.length == 0) { // 如果参数为空,无法根据参数进行路由选择
return availableInvokers;
}
// 获取需要进行路由的参数,这里使用第一个参数 ,这里各自根据各自的业务 进行获取,本实例默认使用第一个参数
var firstArgument = invArguments[0];
var orgId = firstArgument == null ? “” : firstArgument.getOrgId();
if(orgId == 1 || orgId == “1”) { // 如果orgId == 1 ,只走最后一个节点,其余的走其他节点
var selectInvokers = new java.util.ArrayList(1);
selectInvokers.add(availableInvokers.get(availableInvokers.size()-1));
return selectInvokers;
} else {
var selectInvokers = new java.util.ArrayList(availableInvokers.size()-1);
for(var i=0;i<availableInvokers.size()-1; i++) {
selectInvokers.add(availableInvokers.get(i));
}
return selectInvokers;
}
}
3.2 向注册中心注册JS脚本路由规则
上文已经说明,目前的dubbo-admin不支持在界面上注册路由规则,现给出基于JAVA代码来编写注册程序:
public static void main(String[] args) throws Exception{
URL registryUrl = URL.valueOf(“zookeeper://127.0.0.1:2181”);
ZookeeperRegistryFactory zookeeperRegistryFactory = new
ZookeeperRegistryFactory();
zookeeperRegistryFactory.setZookeeperTransporter(new
CuratorZookeeperTransporter());
Registry zookeeperRegistry = (ZookeeperRegistry)
zookeeperRegistryFactory.createRegistry(registryUrl);
URL routerURL =
URL.valueOf("script://0.0.0.0/com.alibaba.dubbo.demo.Demo
Service?category=routers&dynamic=false&enabled=true&fo
rce=false&name=demoService_createUser_router&priority=
0&runtime=true");
routerURL = routerURL.addParameter(“rule”,
URL.encode(get_demoService_createUser_router()));
zookeeperRegistry.register(routerURL); // 注册
// zookeeperRegistry.unregister(routerURL); // 取消注册
}
一旦运行上述代码,将会动态注册URL,服务提供者无需重启,下次服务调用后会自动生效(其背后原理是基于注册中心的动态发现)。
上述示例代码,我已经在本地环境,已能成功运行,并达到预期效果,公司项目需要根据自身的特点,特别服务方法的参数(例如合作伙伴ID的获取方式),以及路由需求来定制编写其路由脚本(js脚本)。
3.3 总结
上述展示了Dubbo服务基于业务灰度发布的方案,以及基于合作伙伴的服务隔离机制(根据服务调用业务参数来决定服务调用者的筛选)。主要是展示了基于脚步的路由规则,其条件表达式的路由规则请参考其Demo,其核心理论支持是Dubbo提供的Router,在进行负载均衡前,根据路由规则对服务提供者列表进行筛选。
欢迎加笔者微信号(dingwpmz),加群探讨,笔者优质专栏目录:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/3228298f7a629940d5c785317ec172db.jpeg)
最后
面试题文档来啦,内容很多,485页!
由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。
1111道Java工程师必问面试题
MyBatis 27题 + ZooKeeper 25题 + Dubbo 30题:
Elasticsearch 24 题 +Memcached + Redis 40题:
Spring 26 题+ 微服务 27题+ Linux 45题:
Java面试题合集:
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
44)]
Java面试题合集:
[外链图片转存中…(img-m1lH73Ks-1712099043244)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!