您可以使用标签路由的方式实现任务的灰度调度,通过指定标签来指定每个任务调度到哪个label的Executor上。本文将介绍标签路由的架构原理、任务灰度的最佳实践和标签路由配置步骤详情。
基于标签路由的架构原理
任务调度XXL-JOB版支持基于label的路由策略,在Executor向Server心跳汇报时,可以附加当前Executor的label信息,每个任务通过指定标签来配置标签路由,指定每个任务调度到哪个label的Executor上。
任务灰度最佳实践
如何做任务灰度
比如我们想灰度userId=2xx开头的数据,我们可以复制一个任务,比如一个叫jobA-base,一个叫jobA-gray。分别给两个任务配置任务参数,jobA-base的任务参数是userId=-2xx,jobA-gray的任务参数是userId=2xx。jobA-gray执行任务的时候,拿到任务参数,只会去处理userId=2xx开头的数据,jobA-base执行任务的时候去处理userId不等于2xx开头的数据。
如何进行全链路灰度
通过标签路由可以做到单跳灰度,即可以把灰度任务调度到label=gray的机器上,如果该任务还需要调用下游的微服务或消息等服务,并且也希望调用灰度的节点,则可以使用MSE微服务治理把所有服务加入到灰度泳道里,会自动进行全链路的灰度,如下图所示。
标签路由配置步骤
步骤一:用户侧节点如何配置label
通过SDK插件增强(需要修改代码)
在pom文件中添加以下依赖,并将其置于
xxl-job-core
之上,具体版本号详情,请参见插件版本说明。<dependency> <groupId>com.aliyun.schedulerx</groupId> <artifactId>schedulerx3-plugin-xxljob</artifactId> <version>${最新版本号}</version> </dependency>
应用程序启动时,添加jvm参数
-Dxxl.job.executor.label
来设置标签。例如:通过如下示例命令启动配置标签。java -Dxxl.job.admin.addresses=http://xxljob-xxxx -Dxxl.job.executor.appname=app1 -Dxxl.job.accessToken=xxx -Dxxl.job.executor.label=gray app.jar
通过MSE服务治理Agent增强(不需要修改代码)
敬请期待
步骤二:验证接入成功
在左侧导航栏的应用管理页面,查看执行器数量,可以看到接入的机器的标签,代表接入成功。
步骤三:配置标签路由
在左侧导航栏的任务管理页面,单击目标任务操作列下
,指定类型选择标签,则该任务只会运行在指定的标签上。文档内容是否对您有帮助?