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包。
问题解决。