一、微服務簡介
微服務英文名稱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微服務架構下兩個節點的調用圖,當從第一層入口組件訪問後,入口組件向後調用下一層節點的時候,後一層節點的運行線程自動取到了前一層節點的用戶信息,而且加入到了第二層節點的運行線程控件,這樣經過精準測試示波器(登陸用戶標識和請求標識一致)就能夠收到兩個節點的數據。而且實如今多個用戶同時訪問分佈式應用得時候,不一樣用戶出發的數據會自動分離並路由到對應的示波器並最終對應到用例上。