一、微服务简介
微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务。这些小的Web服务能够独立地编译及部署,并经过各自暴露的API接口相互通信。它们彼此相互协做,做为一个总体为用户提供功能,却能够独立地运行。
二、Spring Cloud项目简介
Spring Cloud是基于Spring Boot的一整套实现微服务的框架。提供了微服务开发所需的配置管理、服务发现、断路器、只能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。
三、前期准备工做
3.1配置jdk
3.2配置tomcat
3.3配置maven
注:本文中Jetbrain的IDEA工具是集成了Maven的,以下图所示:
如若作修改,请按本地maven实际路径填写。
四、Spring Cloud的环境
Spring Cloud源码
IntelliJ IDEA(如下简称“idea”)
MySQL
JDK8
Tomcat7
Maven
4.1安装环境
注:IntelliJ IDEA和JDK的安装和安装包就用本身现有的就能够,星云测试将提供MySQL和Nodejs的安装包,但必须前提是用户本身的本机上不存在安装的MySQL和Nodejs。
4.1.1脚本一键安装mysql和nodejs
一、 打开TT_Soft文件夹
二、以管理员身份运行TeststarsSoftInstall.exe
三、等待自动安装完成,关闭窗口
四、使用net start mysql 命令启动MySQL服务
五、使用node –v查看node版本
五、配置Spring Cloud
5.1 idea建立eureka服务注册中心
如下简称“8000”项目。
新建项目:
idea新建spring boot项目,选择Spring Initializr,也能够在https://start.spring.io上建立再导入本地:
修改group等相关信息:
注意右上角的spring boot的版本选择:
直接点击完成便可:
到此,一个springboot项目就完成了。
接下来要作的是配置一个eureka服务注册中心。
此项目的pom.xml添加如下内容:java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
启动代码中添加@EnableEurekaServer注解和import...,以下所示:node
package com.teststars.springclouddemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class SpringcloudDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudDemoApplication.class, args); } }
修改application.properties(加eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false意思是不让服务中心注册本身):
mysql
server.port=8000 eureka.instance.hostname=localhost eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.service-url.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动该eureka server:
看到下面的LOG代表Eureka服务端启动成功:
打开谷歌浏览器(因IDEA中的默认设置),访问https://localhsot:8000/可看到微服务的查看面板:
至此,服务注册中心已配置完成,接下来进行服务的注册操做。
5.2 idea建立服务提供者
如下简称“8001”项目。
建立一个Eureka-Client客户端也就是服务提供者客户端在向注册中心会提供一些元数据,例如主机和端口,URL,主页等。Eureka server从每一个client实例接收心跳消息。若是心跳超时,则一般将该实例从注册server中删除。
按照上面的建立方式建立项目springcloud-provider-demo:
启动代码中添加@EnableDiscoveryClient和import...,以下所示:web
package com.teststars.springcloudproviderdemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient @SpringBootApplication public class SpringcloudProviderDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudProviderDemoApplication.class, args); } }
修改application.properties:redis
server.port=8001 spring.application.name=springcloud-server eureka.client.service-url.defaultZone: http://localhost:8000/eureka/
编写一个简单的controller。注意编写的controller必定要在启动类目录级别或下层。否则不会加载。
项目启动类的同级目录下新建包:controller,添加类:HelloWorld,以下所示:spring
package com.teststars.springcloudproviderdemo.controller; import org.springframework.web.bind.annotation.*; @RestController public class HelloWorld { @GetMapping("/test/{id}") public String test(@PathVariable String id){ return "hello"+id.toString(); } }
启动项目SpringcloudProviderDemoApplication;
在浏览器中刷新界面:https://localhsot:8000/ 查看Eureka信息面板服务信息,可看到已显示存在一个8001的服务:
点击图中绿色字体部分,显示以下图:
8001接口后加参数/test/test访问,注:test可为任意字符,显示以下图所示:
5.3 idea建立消费者
如下简称“8002”项目。
如下是在https://start.spring.io上建立再导入idea中的方式:
pom.xml添加如下内容:
sql
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>
修改application.properties:
bootstrap
server.port=8002 spring.application.name=springcloud-customer eureka.client.service-url.defaultZone: http://localhost:8000/eureka/
启动代码中添加@EnableDiscoveryClient,并加入RestTemplate的bean,RestTemplate是spring用来操做rest资源的类,使用了模板模式。同时注意注解@LoadBalanced,只须要这个注解就能够为RestTemplate整合ribbon,从而实现负载均衡。而eureka和ribbon配合使用时会将服务名自动映射成微服务的网络地址。使得可伸缩性加强。以下所示: windows
package com.teststars.springcloudcustomerdemo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient @SpringBootApplication public class SpringcloudCustomerDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringcloudCustomerDemoApplication.class, args); } @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }
编写controller,这里restTemplate.getForObject中的url换成http://localhost:8001/test也是能够的,可是这样的话耦合度是比较高的,若是服务提供者的地址发生了变化那这个消费者就不能正常运行了。因为集成了ribbon,因此这里能够换成服务名。
项目启动类的同级目录下新建包:controller,添加类:Test,以下所示:
浏览器
package com.teststars.springcloudcustomerdemo.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class Test { @Autowired private RestTemplate restTemplate; @GetMapping("/test/{id}") public String test(@PathVariable String id){ return this.restTemplate.getForObject("http://SPRINGCLOUD-SERVER/test/"+id,String.class); } }
启动项目SpringcloudCustomerDemoApplication;
在浏览器中的刷新页面:https://localhsot:8000/ 查看Eureka信息面板服务信息可看到多了一个服务,以下图8002绿色字体部分所示:
点击图中绿色字体部分:
添加参数/test/aaa,注:aaa可为任意字符:
六、测试项目
6.1下载工具及工具配置
6.1.1从官网上下载星云测试工具:http://www.teststars.cc/
下载之后进行配置。
6.1.2星云测试服务端的配置
TTLangage.config配置项说明:
一、 运行下的星云测试server目录中ThreadingTestServer.exe,在右下的图表中点注册信息,查看其时间,星云测试有两个月的体验,若超过两个月,发生KEY过时,请联系星云测试的工做人员,并提交服务端中的序列码。
二、联系星云工做人员获取当前服务器的key.key文件,替换到星云的server目录下;
三、启动server目录下的ThreadingTestServer.exe后会自动打开同级目录下的ThreadingTestServerFront.exe,看到自动弹出下面窗口后,表示链接正常。
6.1.3星云测试客户端的配置
注:星云测试在线客户端的链接须要访问端口17262/17263.登录以前须要保证网络链接不存在限制。
打开客户端以前须要修改TTClient文件夹下的Server.cfg文件,配置localIP项为能够与服务端正常数据通讯的本机IP地址。配置localIP缘由是:在客户端须要接收来自服务端传来的动态数据,配置本地的IP地址服务端才能把数据传到客户端中。
配置IP地址完成后双击运行TTClient\TT.exe文件进入星云测试客户端。选择文件->登陆,输入星云测试服务端的IP地址以及本身的用户名和密码便可登陆。以下图所示:
6.1.4星云测试云报表平台服务启动
一、运行星云测试TTWeb目录下的bin\redis-2.4.5-win32-win64\32bit中的redis-server.exe:
二、运行星云测试TTWeb目录下的startTTwebserver.bat:
访问网页报表网页IP地址:3000
6.2建立工程和版本并编译
一、登陆客户端
二、选中待插装的空版本,版本处于解锁状态(解锁状态:右键-解锁状态)
三、修改javaForWindows目录下的Server.cfg配置文件,[SERVER] ip填写实际ip地址,修改[PROPERTY]字段,与客户端目录下的Server.cfg同步:
四、修改javaForWindows目录下的ComplierPath.xml配置文件:
同一个版本下可添加多个子模块即proname,proname不能重复,一个子模块下能够配置多个工程路径。
proName:子模块名称
project_path:测试程序源码文件路径
class_path:测试程序class文件路径
注:由于项目8002关联着8001,因此这里须要编译8001和8002两个模块。以下图:
五、修改javaForWindows目录下tt_windows文件夹下Server.ini配置文件,
ip设置为客户端所在的ip地址:
六、在javaForWindows文件根目录,打开命令行运行autoCompiler.jar进行编译:
jre\bin\java.exe -jar autoCompile.jar –e D:\J2EE_Enterprise_key_64bit0814\CompileToolsPkg\javaForWindows
注:-e后面的参数为ComplierPath.xml文件的目录。
编译成功以下图所示:
七、在客户端查看数据,选中以前新建的空版本,右键点击从新加载版本数据。
因为测试的时候须要运行插装后的代码(编译完成后会在java目录同层生成src-instru目录,src-instru目录即为编译插装后的源码);
具体操做:先将源码目录下未插装的java目录重命名为pre_java,再将编译插装生成的src-instru目录命名为java。
为使函数覆盖率可视视图代码部分显示正常,须要手动修改源码路径:右键版本,点击修改源码路径,选择到pre_java目录便可。
6.3测试前准备
6.3.1添加数据传输配置文件
数据传输配置文件是保证运行的数据能够回传到星云服务器的。配置方法是在具体的客户测试环境下的usr/local/bin文件夹下新建配置文件config.cfg 文件内容以下:
state=1
IP=(IP值写星云测试服务端IP,注意要大写)
(若是发布环境是windows环境,须要在C盘根目录下配置上述文件)
6.3.2 agent启动项目
使用星云测试提供的agent包启动项目有如下两种方式:
6.3.2.1 idea开发工具的项目启动项中添加agent参数
注:8001项目和8002项目中均须要做以下配置:
VM options一项添加以下配置,jar文件按星云测试提供的agent解压缩文件的绝对路径填写:
修改点击Apply、OK;
插桩代码的运行须要添加星云测试提供的jar包,须要修改pom.xml文件来引入jar,加入到两个<dependencies>之间,加入的代码以下:
systemPath按JavaParser-j2ee.jar和jeromq-0.3.0-SNAPSHOT.jar的绝对路径填写:
<dependency> <groupId>com.zoa</groupId> <artifactId>JavaParser-ZMQ</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>D:\J2EE_Enterprise_key_64bit0814\client\MQ\JavaParser-j2ee.jar</systemPath> </dependency> <dependency> <groupId>com.zoa</groupId> <artifactId>jeromq</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>D:\J2EE_Enterprise_key_64bit0814\client\MQ\jeromq-0.3.0-SNAPSHOT.jar</systemPath></dependency>
8001和8002项目作完以上操做修改后,idea中依次运行8000、800一、8002项目,启动项目成功以下图:
6.3.2.2 jar包的启动命令中添加agent参数
首先正常启动8000项目;
插桩代码的运行须要添加星云测试提供的jar包:
idea中直接引入星云测试提供的jar包,操做以下图所示:
引入jar包后,在idea中对8001和8002项目进行打包:clean->package:
其次分别打开两个DOS窗口,输入如下带有agent参数的命令,启动8001和8002项目:
java -javaagent:D:\0823zoa-agent-1.6.2\zoa-bootstrap-1.6.2.jar -jar D:\springcloud-provider-demo\springcloud-provider-demo\target\springcloud-provider-demo-0.0.1-SNAPSHOT.jar
java -javaagent:D:\0823zoa-agent-1.6.2\zoa-bootstrap-1.6.2.jar -jar D:\springcloud-customer-demo\target\springcloud-customer-demo-0.0.1-SNAPSHOT.jar
D:\0823zoa-agent-1.6.2\zoa-bootstrap-1.6.2.jar =agent路径;
D:\springcloud-provider-demo\springcloud-provider-demo\target\springcloud-provider-demo-0.0.1-SNAPSHOT.jar =项目路径;
出现如下界面表示项目启动成功:
6.3.3设置cookie
打开谷歌浏览器(因idea中默认设置的是谷歌浏览器),输入网址:http://localhost:8000打开eureka服务注册中心;能够看到已经面板上已显示8001和8002:
点击8002对应的绿色字体部分进入8002对应的界面:
一、在项目URL后加参数teststars.jsp,访问页面进行cookie设置:
二、点击setcookie进行设置,设置成功页面以下:
注:为了区分测试,设置的用户名与星云客户端当前登陆用户名要保持一致。
查看控制台打印信息可知,username设置成功:
七、测试结果
7.1示波器波形展现
先选中测试用例,再点击开始后就能够进行相应的测试工做了,测试的时候示波器能够收到动态数据并以波形图的方式展现出来。
刷新数据,由于8002关联着8001,因此这里能够看到,测试8002,8001也被覆盖到:
上图是一个spring cloud微服务架构下两个节点的调用图,当从第一层入口组件访问后,入口组件向后调用下一层节点的时候,后一层节点的运行线程自动取到了前一层节点的用户信息,而且加入到了第二层节点的运行线程控件,这样经过精准测试示波器(登陆用户标识和请求标识一致)就能够收到两个节点的数据。而且实如今多个用户同时访问分布式应用得时候,不一样用户出发的数据会自动分离并路由到对应的示波器并最终对应到用例上。