Dubbo服务治理之灰度发布方案(版本发布控制影响范围)

}

if(!“createUser”.equals(invocation.getMethodName())) { // 如果方法不匹配,默认无条件通过该路由规则

return invokers;

}

var availableInvokers = new java.util.ArrayList(invokers.size());

for (var i=0;i<invokers.size(); i++) { // 先选择可用的服务提供者列表

if(invokers.get(i).isAvailable()) {

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),加群探讨,笔者优质专栏目录:

1、源码分析RocketMQ专栏(40篇+)

2、源码分析Sentinel专栏(12篇+)

3、源码分析Dubbo专栏(28篇+)

4、源码分析Mybatis专栏

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

image

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-txFOVJIi-1712784855282)]

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值