更新时间:2024-03-07 GMT+08:00
分享

使用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依赖。
<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文件全路径传入。

    传空时,会按照以下顺序尝试补参:

    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 "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;
}
}

相关文档