
# 使用Gray SDK
本文介绍如何在NUWA框架下使用Gray SDK，Spring Cloud框架下暂时不支持使用Gray SDK。
使用Gray SDK时，需要先在AppStage运维中心SLB服务中配置好灰度规则，再启动Gray SDK，否则灰度规则不生效。
#### 引入Gray SDK
通过NUWA的nuwa-apaas-graysdk间接集成，集成该SDK之后，可以使用Gray SDK。
在pom.xml中添加STS依赖。
将${nuwa-sdk-version}替换成实际所使用的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>
```
#### 初始化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文件全路径传入。    | 传空时，会按照以下顺序尝试补参： 1. 尝试以系统参数指定的路径找文件System.getProperty("graysdk.properties.file_path")。  2. 尝试从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 "the name is empty, no need send to backend 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;
}
}
```
