使用Gray SDK
本文介绍如何在NUWA框架下使用Gray SDK,Spring Cloud框架下暂时不支持使用Gray SDK。
使用Gray SDK时,需要先在AppStage运维中心SLB服务中配置好灰度规则,再启动Gray SDK,否则灰度规则不生效。
引入Gray SDK
通过NUWA的nuwa-apaas-graysdk间接集成,集成该SDK之后,可以使用Gray SDK。
<dependency> <groupId>com.huawei.wisecloud.nuwa</groupId> <artifactId>nuwa-apaas-graysdk</artifactId> <version>${nuwa-sdk-version}</version> <scope>system</scope> <systemPath>${project.basedir}/lib/nuwa-apaas-graysdk-3.1.5.100.jar</systemPath> </dependency>
将${nuwa-sdk-version}替换成实际所使用的Gray SDK版本。
初始化SLB
- 业务自行解析好配置,作为Properties入参传入。
GraySDKManager.getInstance().init(Properties params, Object lbsServiceFactory)。
表1 参数说明 参数
说明
传空说明
Properties params
将Properties对象传入
将不能使用Gray SDK功能。
不能传空。
Object lbsServiceFactory
lbsServiceFactory对象传入
不能使用LBS国家省市IP库功能。
在业务不使用LBS国家省市灰度时,可传空。
- 业务指定好Properties路径,properties文件路径传入。
GraySDKManager.getInstance().initWithPropertiesPath (String path, Object lbsServiceFactory)。
表2 参数说明 参数
说明
传空说明
String path
将Properties文件全路径传入。
传空时,会按照以下顺序尝试补参:
- 尝试以系统参数指定的路径找文件System.getProperty(“graysdk.properties.file_path”)。
- 尝试从classpath的文件系统路径下找graysdk.properties或者graysdk-config.properties。
Object lbsServiceFactory
LbsServiceFactory对象传入。
不能使用LBS国家省市ip库功能。
在业务不使用LBS国家省市灰度时,可传空。
开启灰度过滤器
在消费端的微服务上配置好properties文件中以下开关:
# enable CseGrayServerListFilter or not wgp.enableCseGrayFilter=true
服务消费端集成示例
照常通过CSE调用服务提供者,无需额外编码。
例如,参考CSE的消费端开发,从消费端调用服务提供端(demoB),无需额外修改。
package com.service.demo.controller; import org.springframework.stereotype.Component; import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder; import org.springframework.web.client.RestTemplate; @Component publicclass DemoDelegate { public String helloworld(String name){ if ( null == name || "".equals(name)) { return "thename is empty, no need send to beckend MS"; } RestTemplate restTemplate = RestTemplateBuilder.create(); String rslt = ""; String qryStr = ""; qryStr = "name=" + name; // to call another MicroService, name is demoB. path:/demo,interface:helloworld rslt = restTemplate .getForObject("cse://demoB/demo/helloworld?" + qryStr, String.class); return rslt; } }