《FusionStage CSE 开发实践.pdf》由会员分享,可在线阅读,更多相关《FusionStage CSE 开发实践.pdf(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、FusionStage CSE 开发实践开发实践FusionStage CSE 开发开发实践实践iFusionStage CSE 开发实践1 开发简介文档版本 01(2019-02-25)版权所有 11开发简介开发简介CSE(Cloud Service Engine)Java SDK 是推出的产品级微服务开发框架,已经在内部多个大型产品上得到了使用和验证。使用 CSE Java SDK 开发微服务,可以最大化的简化开发门槛,提升产品上线速度。同时可以获得微服务运行时高可靠性保证、运行时动态治理等一系列开箱即用的能力。本文档以本文档以 BMI 体质指数为体质指数为 DEMO,介绍,介绍 BMI
2、服务的开发、调用和部署流程,该文档服务的开发、调用和部署流程,该文档读者适用于读者适用于 CSE Java SDK 进行微服务开发的开发人员。进行微服务开发的开发人员。本文档中涉及的本文档中涉及的 CSE-SDK、本地轻量化服务中心版本,均为示例版本,实际开发过程、本地轻量化服务中心版本,均为示例版本,实际开发过程中请使用最新版本。中请使用最新版本。基本概念基本概念:服务中心:是一个基于 Restful,提供服务注册、发现和微服务管理的服务管理中心。具有高性能的缓存设计和微服务及其实例的单独实体管理。配置中心:实现微服务相关配置的动态下发,做到服务不重启即可进行配置更改。配置中心的配置优先级高
3、于环境变量的配置,环境变量的配置高于文件配置。应用结构BMI 应用的开发包括服务端(一个基于一个基于 CSE Java SDK 开发开发,一个,一个 SpringCloud 应用应用改造接入改造接入)和客户端开发,BMI 应用结构图如下所示:FusionStage CSE 开发实践2 准备环境文档版本 01(2019-02-25)版权所有 22准备环境准备环境在开发应用之前,您需要准备相关环境。步骤 1 准备本地开发环境,如图所示:表 2-1 准备环境组件说明JDK使用 CSE Java SDK 开发要求 JDK 1.8 及以上,目前暂不支持 JDK 1.9。从官网下载 JDK 安装包,下载地
4、址:http:/ JDK。2.设置 JAVA_HOME 环境变量,指向 Java 安装目录。3.将%JAVA_HOME%bin 添加到系统路径 path 中。4.使用 win+R 快捷键并输入 cmd 打开 windows 命令行,使用 java-version 命令验证是否安装成功。MavenMaven 版本要求 3.3.0 以上,从官网下载 maven,下载地址:http:/maven.apache.org/download.cgi1.选择合适的本地安装路径安装 Maven。2.设置 MAVEN_HOME 环境变量,指向 Maven 安装目录。3.将%MAVEN_HOME%bin 添加到系
5、统路径 path 中。4.使用 win+R 快捷键并输入 cmd 打开 windows 命令行,使用 mvn-v 命令验证是否安装成功EclipseEclipse 版本要求 4.5.0 以上,从官网下载,安装到本机。启动 Eclipse,配置 jre、maven settings 以及默认编码格式为 utf-8。下载地址:https:/www.eclipse.org/downloads/步骤 2下载本地服务中心。本案例本案例以以 2.2.35 为为例子说明,实际版本例子说明,实际版本以以实际实际情况情况为基准。为基准。FusionStage CSE 开发实践2 准备环境文档版本 01(2019
6、-02-25)版权所有 31、登录 FusionStage 平台,选择“应用开发 微服务开发 工具下载”。2、选择“本地轻量化服务中心”页签,单击,下载 tar.gz 包到本机。步骤 3下载 CSE SDK 相关 jar 包。本案例以本案例以 2.2.39 为例子说明,实际版本以实际情况为基准。为例子说明,实际版本以实际情况为基准。1、登录 FusionStage 平台,选择“应用开发 微服务开发 工具下载”。2、选择“CSE-SDK”页签,单击,下载 zip 包到本机,然后解压到本地 Maven 仓库,如图:FusionStage CSE 开发实践2 准备环境文档版本 01(2019-02-
7、25)版权所有 4举例,比如当前的本地 maven setting 文件配置如下:C:Usersusername.m2repository其中,C:Usersusername.m2repository 表示为本地 maven 仓库地址,请把 cse-java-chassis-2.2.39.zip 解压后的文件都拷贝到 C:Usersusername.m2repositor 目录下面。注意,注意,每个机器的每个机器的 maven setting 文件文件中中的的本地本地 maven 仓库地址仓库地址都不一样都不一样,请以实际,请以实际情况为准。情况为准。FusionStage CSE 开发实践3
8、 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 53开发开发 BMI 的服务端的服务端通过微服务框架进行 BMI 应用的开发,BMI 即衡量人体的体制指数,包括身高、体重等指标。BMI 应用开发包含实体类、业务层和控制层的开发。3.1 开发服务端(基于 CSE Java SDK 开发)步骤 1 登录 FusionStage 平台,选择“应用开发 微服务开发 本地工程”。步骤 2创建并下载一个本地工程至本机。本案例以本案例以 2.2.39 为例子说明,实际版本以实际情况为基准。为例子说明,实际版本以实际情况为基准。1.配置本地工程名称,例如:bmiprovider2.选择
9、 SDK 版本为 2.2.39。3.在“高级设置”中使用默认开发风格“Spring-MVC”,其他均使用默认值。4.单击“创建并下载”。步骤 3将下载的本地工程解压,并在 Eclipse 中导入已下载的本地工程。1.右键单击空白处,选择“Import Import.”。2.选择“Existing Maven Projects”,单击“Next”。3.在“Root Directory”处选择解压的本地工程路径,单击“Finish”完成导入。步骤 4新建一个包 com.service.bmiprovider.entity,用于存放实体类,开发实体类并设置一下时间格式,用于封装返回给客户端的信息。p
10、ackage com.service.bmiprovider.entity;import java.text.SimpleDateFormat;import java.util.Date;public class BMIViewObject private double result;private String instanceId;private String callTime;FusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 6public BMIViewObject(double result,String instanc
11、eId,Date now)this.result=result;this.instanceId=instanceId;this.callTime=new SimpleDateFormat(HH:mm:ss).format(now);public BMIViewObject()public double getResult()return result;public void setResult(double result)this.result=result;public String getInstanceId()return instanceId;public void setInstan
12、ceId(String instanceId)this.instanceId=instanceId;public String getCallTime()return callTime;public void setCallTime(String callTime)this.callTime=callTime;步骤 5 开发完实体类后添加计算体质指数业务层接口,新建一个包com.service.bmiprovider.service,用于存放业务类。package com.service.bmiprovider.service;public interface CalculatorServic
13、e double calculate(double height,double weight);添加接口实现类,放在 com.service.bmiprovider.service 包下:package com.service.bmiprovider.service;import java.math.BigDecimal;import java.math.RoundingMode;import org.springframework.stereotype.Service;ServiceFusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所
14、有 7public class CalculatorServiceImpl implements CalculatorServicepublic double calculate(double height,double weight)if(height=0|weight=0)throw new IllegalArgumentException(Arguments must be above 0);double heightInMeter=height/100;double bmi=weight/(heightInMeter*heightInMeter);return roundToOnePr
15、ecision(bmi);private double roundToOnePrecision(double value)return new BigDecimal(value).setScale(1,RoundingMode.HALF_UP).doubleValue();步骤 6添加控制层接口放在 com.service.bmiprovider.controller 包下。package com.service.bmiprovider.controller;import com.service.bmiprovider.entity.BMIViewObject;public interface
16、 CalculatorController BMIViewObject calculate(double height,double weight);String theadDelay(int timesleep);添加接口实现类放在 com.service.bmiprovider.controller 包下:package com.service.bmiprovider.controller;import java.util.Date;import mon.RestSchema;import org.springframework.beans.factory.annotation.Autow
17、ired;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.service.bmiprovider.entity.BMIViewObject;import com.service.bmiprovider.service.CalculatorService;RestSchema(schemaId=b
18、mi)RequestMapping(path=/bmi,produces=MediaType.APPLICATION_JSON_VALUE)public class CalculatorControllerImpl implements CalculatorController AutowiredCalculatorService calculatorService;private int timesleep=0;OverrideRequestMapping(path=/calculate,method=RequestMethod.GET)public BMIViewObject calcul
19、ate(double height,double weight)double bmiResult=calculatorService.calculate(height,weight);return new BMIViewObject(bmiResult,bmiprovider-0.0.2,new Date();OverrideFusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 8RequestMapping(path=/timesleep,method=RequestMethod.GET)public String theadDel
20、ay(int timesleep)this.timesleep=timesleep;return succeed putting delayTime:+String.valueOf(this.timesleep);步骤 7修改微服务的相关配置。打开 src/main/resources 下的 microservice.yaml 文件,修改后的 microservice.yaml 如下所示:APPLICATION_ID:springmvcservice_description:name:bmiproviderversion:0.0.2properties:allowCrossApp:falsec
21、se:service:registry:address:http:/127.0.0.1:30100instance:watch:falseconfig:client:serverUri:https:/127.0.0.1:30103refreshMode:1refresh_interval:5000monitor:client:serverUri:https:/127.0.0.1:30109enable:truerest:address:0.0.0.0:8087credentials:accessKey:aksecretKey:skakskCustomCipher:defaultproject:
22、kube-systemhandler:chain:Provider:default:qps-flowcontrol-provider,tracing-provider,bizkeeper-providertracing:enabled:truesamplingRate:1.0步骤 8在 bmiprovider 项目中的 pom 文件中,添加以下依赖:com.huawei.paas.csecse-handler-tracingFusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 9步骤 9配置 bmiprovider 的日志格式,包括日
23、记和调用链日志格式,并合并在一个文件log4j.bmipv.properties。若无 log4j.bmipv.properties,请在 src/main/resources/config 目录下新建一个log4j.bmipv.properties。如下所示:paas.logs.dir=/var/paas/sys/log/bmiprovider/paas.logs.file=csebmiprovider.loglog4j.rootLogger=INFO,paas,stdout#.huawei.paas.cse.sla.fileslasender=ERROR,.huawei.paas.cse.
24、sla.fileslasender=falselog4j.appender.sla=com.huawei.paas.cse.tracing.sla.SLAFileAppenderlog4j.appender.sla.layout=org.apache.log4j.PatternLayoutlog4j.appender.sla.Append=truelog4j.appender.sla.bufferedIO=falselog4j.appender.sla.immediateFlush=truelog4j.appender.sla.layout.ConversionPattern=%m%nlog4
25、j.appender.sla.Encoding=UTF-8log4j.appender.sla.File=/var/paas/sys/log/bmiprovider/csebmiprovider_metrics.datlog4j.appender.sla.MaxFileSize=20MBlog4j.appender.sla.MaxBackupIndex=10#.huawei.paas.cse.tracing.filespansender=ERROR,.huawei.paas.cse.tracing.filespansender=falselog4j.appender.talc=com.huaw
26、ei.paas.cse.tracing.span.SpanFileAppenderlog4j.appender.talc.layout=org.apache.log4j.PatternLayoutlog4j.appender.talc.Append=truelog4j.appender.talc.bufferedIO=falselog4j.appender.talc.immediateFlush=truelog4j.appender.talc.layout.ConversionPattern=%m%nlog4j.appender.talc.Encoding=UTF-8log4j.appende
27、r.talc.File=/var/paas/sys/log/bmiprovider/csebmiprovider_talc.datlog4j.appender.talc.MaxFileSize=20MBlog4j.appender.talc.MaxBackupIndex=10-结束结束FusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 10注册服务端步骤 1 已在准备环境的章节中获取到本地服务中心的包,进行本地解压之后,进入解压目录双击 start.bat 文件启动本地服务中心,在浏览器访问http:/localhost:30103
28、/#!/sc/services/,结果如下所示:表明,本地服务中心启动成功。注意注意,若若在本地已启动在本地已启动本地本地服务中心,请勿重复启动。服务中心,请勿重复启动。步骤 2启动微服务本地调试之前,修改微服务的相关配置。修改后的 microservice.yaml 如下所示:APPLICATION_ID:springmvcservice_description:name:bmiproviderversion:0.0.2properties:allowCrossApp:falsecse:service:registry:address:http:/127.0.0.1:30100instanc
29、e:watch:falserest:address:0.0.0.0:8087步骤 3在 Eclipse 中启动 com.service.bmiprovider.BmiproviderApplication.java 中的 main 方法。步骤 4在浏览器访问 http:/localhost:30103/#!/sc/services/,结果如下所示:FusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 11可以看到版本为 0.0.2,应用为 springmvc 的服务已经注册成功。也可以使用浏览器作为客户端访问http:/127.0.0
30、.1:8087/bmi/calculate?height=170&weight=60,访问结果如下:3.2 开发服务端(SpringCloud 应用改造接入)步骤 1 获取原始 Spring Cloud 的应用,项目名称为 bmiprovider-springcloud。步骤 2将获取到的 bmiprovider-springcloud 项目进行本地工程解压,并在 Eclipse 中导入该本地工程。1.右键单击空白处,选择“Import Import.”。2.选择“Existing Maven Projects”,单击“Next”。3.在“Root Directory”处选择解压的本地工程路径
31、,单击“Finish”完成导入。步骤 3 修改 pom 文件。改造前“bmiprovider-springcloud”中的“pom.xml”文件配置如下:4.0.0com.servicebmiprovider-springcloud0.0.1-SNAPSHOTjarUTF-81.81.8org.springframework.bootspring-boot-starter-webFusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 121.5.9.RELEASEorg.springframework.cloudspring-cloud
32、-starter-eurekaorg.springframework.cloudspring-cloud-dependenciesEdgware.RELEASEpomimportorg.springframework.bootspring-boot-maven-plugin改造后“bmiprovider-springcloud”中的“pom.xml”文件配置,加红加粗部分为差异点:加红加粗部分为差异点:4.0.0com.servicebmiprovider-springcloud0.0.1-SNAPSHOTjarUTF-81.81.8org.springframework.bootspring
33、-boot-starter-web1.5.9.RELEASEFusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 13!-org.springframework.cloudspring-cloud-starter-eureka-org.apache.servicecombspring-boot-starter-transportcom.huawei.paas.csecse-solution-service-engineorg.slf4jslf4j-log4j12org.springframework.cloudspring-cloud
34、-dependenciesEdgware.RELEASEpomimportcom.huawei.paas.csecse-dependency2.2.39pomimportorg.springframework.bootspring-boot-maven-plugin步骤 4在 src/main/resources 目录下新建一个 microservice.yaml,内容如下:APPLICATION_ID:springmvcservice_description:FusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 14name:bmi
35、providerversion:1.0.4properties:allowCrossApp:falsecse:service:registry:address:http:/127.0.0.1:30100instance:watch:falseconfig:client:serverUri:https:/127.0.0.1:30103refreshMode:1refresh_interval:5000monitor:client:serverUri:https:/127.0.0.1:30109enable:truerest:address:0.0.0.0:8086credentials:acce
36、ssKey:aksecretKey:skakskCustomCipher:defaultproject:kube-systemservicecomb:rest:servlet:urlPattern:/bmiprovider/*步骤 5修改 src/main/resources 下的 application.yml 文件,保持服务端口配置和“microservice.yaml”的一致,即 server.port=cse.rest.address。步骤 6在项目代码中添加注解。对 CalculatorControllerImpl 类中进行改造,删除RestController 及添加RestSch
37、ema(schemaId=bmi),加红加红加粗加粗部分部分为为差异点差异点:/RestControllerRestSchema(schemaId=bmi)RequestMapping(path=/bmi,produces=MediaType.APPLICATION_JSON_VALUE)public class CalculatorControllerImpl implements CalculatorController AutowiredCalculatorService calculatorService;private int timesleep=0;RequestMapping(p
38、ath=/calculate,method=RequestMethod.GET)public BMIViewObject calculate(RequestParam(name=height)double height,RequestParam(name=weight)double weight)double bmiResult=calculatorService.calculate(height,weight);return new BMIViewObject(bmiResult,bmiprovider-springcloud-cse-1.0.2,newDate();FusionStage
39、CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 15OverrideRequestMapping(path=/timesleep,method=RequestMethod.GET)public String theadDelay(int timesleep)this.timesleep=timesleep;return succeed putting delayTime cloud:+String.valueOf(this.timesleep);对 BmiproviderApplication 类中进行改造,删除EnableDiscoveryClien
40、t 及添加SpringBootApplication 和EnableServiceComb,加红加粗为差异点:SpringBootApplication(exclude=DispatcherServletAutoConfiguration.class,DataSourceAutoConfiguration.class)/EnableDiscoveryClientEnableServiceCombpublic class BmiproviderApplication public static void main(String args)throws Exception SpringApplic
41、ation.run(BmiproviderApplication.class,args);注意,启动冲突,因此需要添加 exclude=DispatcherServletAutoConfiguration.class,DataSourceAutoConfiguration.class。注册服务端步骤 1 已在准备环境的章节中获取到本地服务中心的包,进行本地解压之后,进入解压目录双击 start.bat 文件启动本地服务中心,在浏览器访问http:/localhost:30103/#!/sc/services/,结果如下所示:表明,本地服务中心启动成功。注意注意,若若在本地已启动在本地已启动本地
42、本地服务中心,请勿重复启动。服务中心,请勿重复启动。步骤 2启动微服务本地调试之前,修改微服务的 microservice.yaml 文件,修改后的microservice.yaml 如下所示:APPLICATION_ID:springmvcservice_description:name:bmiproviderversion:1.0.2properties:FusionStage CSE 开发实践3 开发 BMI 的服务端文档版本 01(2019-02-25)版权所有 16allowCrossApp:falsecse:service:registry:address:http:/127.0.
43、0.1:30100instance:watch:falserest:address:0.0.0.0:8086步骤 3在 Eclipse 中启动 com.service.bmiprovider.BmiproviderApplication.java 中的 main 方法。步骤 4在浏览器访问 http:/localhost:30103/#!/sc/services/,结果如下所示:可以看到版本为 1.0.2,应用为 springmvc 的服务已经注册成功。也可以使用浏览器作为客户端访问http:/127.0.0.1:8086/bmi/calculate?height=170&weight=60,
44、访问结果如下:-结束结束FusionStage CSE 开发实践4 开发 BMI 的客户端文档版本 01(2019-02-25)版权所有 174开发开发 BMI 的客户端的客户端操作步骤步骤 1 登录 FusionStage 平台,选择“应用开发 微服务开发 本地工程”。步骤 2创建并下载一个本地工程至本机。本案例以本案例以 2.2.39 为例子说明,实际版本以实际情况为基准。为例子说明,实际版本以实际情况为基准。1.配置本地工程名称,例如:bmiconsumer2.选择 SDK 版本为 2.2.39。3.在“高级设置”中使用默认开发风格“Spring-MVC”,其他均使用默认值。4.单击“创
45、建并下载”。步骤 3将下载的本地工程解压,并在 Eclipse 中导入已下载的本地工程。1.右键单击空白处,选择“Import Import.”。2.选择“Existing Maven Projects”,单击“Next”。3.在“Root Directory”处选择解压的本地工程路径,单击“Finish”完成导入。步骤 4将服务端的实体类 com.service.bmiprovider.entity.BMIViewObject.java 拷贝到客户端。步骤 5在 com.service.bmiprovider.controller 包下面,修改 BmiconsumerImpl 内容,如下:p
46、ackage com.service.bmiconsumer.controller;import javax.ws.rs.core.MediaType;import org.springframework.web.bind.annotation.*;import org.springframework.web.client.RestTemplate;import mon.RestSchema;import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;import com.service.bmip
47、rovider.entity.BMIViewObject;javax.annotation.Generated(value=io.swagger.codegen.languages.CseSpringDemoCodegen,date=2019-02-20T18:02:12.747+08:00)RestSchema(schemaId=bmiconsumer)RequestMapping(path=/bmiconsumer,produces=MediaType.APPLICATION_JSON)public class BmiconsumerImpl FusionStage CSE 开发实践4 开
48、发 BMI 的客户端文档版本 01(2019-02-25)版权所有 18RequestMapping(value=/helloworld,produces=application/json,method=RequestMethod.GET)public BMIViewObject helloworld(RequestParam(value=height,required=true)String height,RequestParam(value=weight,required=true)String weight)RestTemplate invoker=RestTemplateBuilder
49、.create();String url=cse:/bmiprovider/bmi/calculate?height=+height+&weight=+weight;BMIViewObject bmi=invoker.getForEntity(url,BMIViewObject.class).getBody();return bmi;RequestMapping(value=/theaddelay,produces=application/json,method=RequestMethod.GET)public String theaddelay(RequestParam(value=time
50、sleep,required=true)int timesleep)RestTemplate invoker=RestTemplateBuilder.create();String url=cse:/bmiprovider/bmi/timesleep?timesleep=+timesleep;String bmi=invoker.getForEntity(url,String.class).getBody();return bmi;步骤 6修改 src/main/resources 下的 microservice.yaml 文件。修改如下:APPLICATION_ID:springmvcser