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

在这里插入图片描述

3.1 JS脚本

各个项目,各个服务需要根据自身的需求,定义如下脚本:

/**

  • DemoService router,针对不同的方法,可能需要各自提供,主要是参数的获取,不同的过滤规则

  • 针对参数进行路由过滤

  • 本示例针对 DemoSerivce# ResponseResult createUser(User user) 方法,根据user的orgId进行路由选择

  • @param invokers

  • @param invocation

  • @param context

  • @returns

*/

function demoService_createUser_router(invokers, invocation, context) {

if(invokers == null || invokers.size() < 1) {

return invokers;

}

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()));

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

找小编(vip1024c)领取
44883)]

[外链图片转存中…(img-M2KOSQkO-1721630244884)]

[外链图片转存中…(img-6ZDn4jzx-1721630244884)]

[外链图片转存中…(img-p39ATSmr-1721630244885)]

找小编(vip1024c)领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值