最近看了Disruptor框架,
官方号称它能够在一个线程里每秒处理6百万订单.
一个仅仅部署在4台服务器上的服务,每秒向Database写入数据超过100万行数据,每分钟产生超过1G的数据
自己就想搞个压测测一下,但是过程有点曲折
直接上代码
public class Caller extends AbstractJavaSamplerClient {
private static DubboInit dubboInit;
private static OperateRecordServiceFacade facade;
@Override
public void setupTest(JavaSamplerContext context) {
getLogger().info("start....");
dubboInit = DubboInit.getInstance();
dubboInit.initApplicationContext();
facade = (OperateRecordServiceFacade) dubboInit.getBean("operateRecordServiceFacade");
}
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
getLogger().info("start...");
OperateRecordDTO dto = new OperateRecordDTO();
dto.setOperateType(OperateTypeEnum.MODIFY_CREDIT_RESULT.getCode());
dto.setOperateDesc("test");
dto.setOperator("tests");
facade.saveAndUpdate(dto);
SampleResult sr = new SampleResult();
sr.sampleStart();
sr.setSuccessful(true);
sr.sampleEnd();
getLogger().info("end...");
return sr;
}
public static void main(String[] args) {
dubboInit = DubboInit.getInstance();
dubboInit.initApplicationContext();
facade = (OperateRecordServiceFacade) dubboInit.getBean("operateRecordServiceFacade");
OperateRecordDTO dto = new OperateRecordDTO();
dto.setOperateType(OperateTypeEnum.MODIFY_CREDIT_RESULT.getCode());
dto.setOperateDesc("test");
dto.setOperator("tests");
facade.saveAndUpdate(dto);
}
}
public class DubboInit {
private static DubboInit init = null;
private DubboInit(){}
private static ApplicationContext context;
public synchronized static DubboInit getInstance(){
if(init == null){
init = new DubboInit();
}
return init;
}
public static void initApplicationContext(){
context = new ClassPathXmlApplicationContext("classpath:/dubbo.xml");
if(context==null)
{
throw new IllegalArgumentException("Load dubbo-client.xml fail");
}
}
public Object getBean(String beanName) {
return context.getBean(beanName);
}
}
主要的坑就是打包的时候 依赖包的问题
打包的时候把所有的dependencies都打到lib文件夹里面,但是不能直接把jar都复制到Jmeter的lib/ext里面,不然会导致启动不了
建议手动筛选必要的jar到ext下,这个折腾了好久,手动筛选之后就可以启动了。
ps:该实例是1.7java 普通maven项目,不是spring boot项目
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<!--<artifactItems>-->
<!--<artifactItem>-->
<!--<groupId>junit</groupId>-->
<!--<artifactId>junit</artifactId>-->
<!--<version>4.11</version>-->
<!--</artifactItem>-->
<!--</artifactItems>-->
<outputDirectory>target/lib</outputDirectory>
</configuration>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>