Jmeter簡単テストdubboインタフェース

4778 ワード

最近Disruptorフレームワークを見て、
公式には1つのスレッドで毎秒6百万の注文を処理できると言われています.
4台のサーバにしか配備されていないサービスで、1秒間に100万行以上のデータをデータベースに書き込み、毎分1 G以上のデータを生成します.
自分で圧力測定をしたいのですが、過程は少し曲がりくねっています.
ダイレクトコード
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.7 java普通mavenプロジェクトでspring bootプロジェクトではありません

    
      
        org.apache.maven.plugins
        maven-dependency-plugin
        3.0.1
        
          
            
              
              
              
            
          
          target/lib
        
        
          
            copy-dependencies
            package
            
              copy-dependencies
            
          
        
      
    

    
      
        
          maven-clean-plugin
          3.0.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.7.0
        
        
          maven-surefire-plugin
          2.20.1
        
        
          maven-jar-plugin
          3.0.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2