1、Dubbo服務簡介前端
Dubbo是一個分佈式服務架構,把核心業務抽取出來做爲獨立的服務,使前端應用能更快速和穩定的響應。java
Dubbo服務工做原理:服務提供方提供接口,並提供接口的實現,提供方註冊服務到Zookeeper註冊中心(也能夠是其它分佈式服務),而後消費者要調用服務時,直接去ZK上訂閱該服務便可,同時由於消費者只能獲得接口,而沒法看到接口的實現,也保證了服務者的安全。spring
2、前期準備工做api
一、服務配置安全
需建立一個配置文件,隨意命名如:config.xml(供腳本調用),文件中配置dubbo服務接口地址及註冊中心地址,文件內容爲:架構
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://code.alibabatech.com/schema/dubbo 8 http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> 9 10 <dubbo:application name="zx-user-service" /> 11 12 <dubbo:consumer timeout="100000" check="false"/> 13 <!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方同樣 --> 14 <dubbo:registry address="zookeeper://192.168.77.123:2181" /> 15 <dubbo:reference interface="com.dubbo.repeat.service.DubboService" id="dubboService" check="false" /> 16 <dubbo:reference interface="com.dubbo.adaption.service.DubboService2" id="dubboService2" check="false" /> 17 </beans>
二、jdk版本併發
因爲LR11-Java vuser協議只支持jdk1.6版本,因此壓力機本地jdk必須安裝1.6版本並配置環境變量。app
3、腳本編寫分佈式
一、協議選擇工具
New→Java Vuser協議
二、腳本編寫
a、Java Vuser協議腳本主要包括三部分:init()、action()、end();
1 import lrapi.lr; 2 public class Actions 3 { 4 //腳本初始化 5 public int init() throws Throwable { 6 return 0; 7 }//end of init 8 //主要功能實現 9 public int action() throws Throwable { 10 System.out.println("Dubbo服務"); 11 return 0; 12 }//end of action 13 //腳本退出 14 public int end() throws Throwable { 15 return 0; 16 }//end of end 17 }
b、配置文件加載及dubbo服務接口調用,須要導入相應服務的jar包;
1 import java.lang.Math; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map;
// 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 import com.xxx.xxx.xxx.DubboService; 8 import lrapi.lr; 9 public class Actions 10 { 11 ClassPathXmlApplicationContext context=null; 12 DubboService dubboService; 13 public int init() throws Throwable 14 {
//配置文件加載--配置文件路徑
// ClassPathXmlApplicationContext使用了file前綴是可使用絕對路徑的 15 context = new ClassPathXmlApplicationContext(new String[] {"file:D:\\config\\config.xml"}); 16 context.start();
//dubbo服務調用--得到Spring中定義的Bean實例(對象) 17 DubboService =(DubboService) context.getBean("dubboService"); 18 return 0; 19 }//end of init
c、LR工具jdk設置及jar包導入;
一、首先,進入Runtime Setting設置選項,Java Environment Setting→Java VM;
二、其次,主服務jar包及相關依賴包導入(注意:主服務jar包必須爲1.6版本,打jar包時必須注意,否正會報jar包版本較高問題,對依賴包版本沒有要求);
Runtime Setting→Java Environment Setting→Classpath
jar包導入及jdk配置完成後,腳本便可正常運行。
d、指定Dubbo服務接口調用及傳參,完成腳本以下:
1 import java.lang.Math; 2 import java.util.ArrayList; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 import com.xxx.xxx.xxx.DubboService; 8 import lrapi.lr; 9 public class Actions 10 { 11 ClassPathXmlApplicationContext context=null; 12 DubboService dubboService; 13 public int init() throws Throwable 14 { 15 context = new ClassPathXmlApplicationContext(new String[] {"file:D:\\config\\config.xml"}); 16 context.start(); 17 dubboService =(DubboService) context.getBean("dubboService"); 18 return 0; 19 }//end of init 20 public int action() throws Throwable 21 { 22 lr.start_transaction("dubbo"); 23 //調用dubbo服務接口並傳參 24 boolean b = dubboService.isVirtualSch("dubbo"); 25 26 System.out.println("++++++++++++++"+b); 27 28 if(b==true | b==false) 29 30 { 31 lr.end_transaction("dubbo", lr.PASS); 32 33 } 34 else 35 { 36 lr.end_transaction("dubbo", lr.FAIL); 37 } 38 39 return 0; 40 }//end of action 41 42 public int end() throws Throwable { 43 return 0; 44 }//end of end 45 }
注:腳本調試過程當中,可能會出現jar包服務不存在的問題,若是肯定jar已經導入,此時只須要在Runtime Setting→classpath中,將報錯缺乏的服務jar包上調至首位便可,從新運行腳本問題解決。
e、運行結果展現:
1 Virtual User Script started at : 2018-11-08 14:20:43 2 Starting action vuser_init. 3 System.err: log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment). Error 4 System.err: log4j:WARN Please initialize the log4j system properly. Error 5 Ending action vuser_init. 6 Running Vuser... 7 Starting iteration 1. 8 Starting action Actions. 9 Notify: Transaction "dubbo" started. 11 System.out: ++++++++++++++false Notify: 12 Notify: Transaction "dubbo" ended with "Pass" status (Duration: 0.1980). 13 Ending action Actions. 14 Ending iteration 1.
4、問題發現-添加負載機失敗及問題解決
性能測試過程當中,LR在處理大併發狀況下,存在因本地壓力機線程及其它資源不足致使沒法施加更大的壓力,此時需添加兩一臺壓力機做爲負載機使用,可是Java Vuser協議與http協議稍有不一樣,會報「Error: Compilation process failed.」。
一、添加負載機;
二、鏈接負載機,status爲ready即爲鏈接成功;
三、運行場景報錯「Error: Compilation process failed.「,初始化失敗。
緣由分析:沒法加載腳本所需jar包致使。
解決方法:
因爲在遠程負載機的本地沒有找到相應的jar包,因此報軟件包不存在錯誤,必須建立相同的lib目錄及配置文件目錄分別用來存放jar包與config.xml配置文件。
配置文件目錄:D:\\config\\config.xml;
jar包目錄:存放jar包的絕對路徑目錄;
注:路徑必須徹底一致,不然LR沒法成功加載配置文件和jar包。
問題解決。