RabbitMQ性能测试

来源:互联网 发布:淘宝照片拍摄 编辑:程序博客网 时间:2024/04/28 00:20

    最近手头有一个项目准备使用RabbitMQ作为消息中间件,在正式使用之前准备对其做一次简单的性能测试,以验证下是否符合要求。

    测试环境如下:

           RabbitMQ的版本:3.6.5

       测试程序:使用JAVA编写的测试程序

           消息服务器:申请自公司的IAAS的Red Hat 6.4的虚拟机服务器,具体的配置为 8C的CPU、16G的内存。

           客户端:本人的Win7 32的PC机,具体配置为Inteli5-5590的CPU和4G的内存。

   测试的指标是发送消息的TPS和接收消息的TPS

   下面将分别从这两个指标阐述下具体的测试结果。

  1.     发送消息TPS测试
                 具体的测试流程如下所示:
                 1) 数据准备
                      

消息体:{

appCode:"APP1",

responseCode:"test-queue570_APP1",

reqId:"1234567890123456",

body:{"REQ_ID":"d93fdccad4a88e7df6b51bc4319635e91",

              "IPT_FIL":"",

              "DBS_NAM":"ASQ_DATA_D",

              "TAB_NAM":"",

              "EXP_DIR":"dddddddddddddddddd",

              "EXP_DBS_NAM":"ASQ_DATA_D",

              "EXP_TAB_NAM":"TEMP_DATA",

              "FIL_TYP":"csv",

              "ORDER_BY":"",

              "QRY_DSQL":"c.dsql",

              "OTH_KEY_VALUE":""

    }

}
                       发送的消息总数:2000000
                       测试轮数:64
                       每轮的线程数:10*轮数
                       每个线程一个Connection和Channel
                 2)测试程序示例如下
                       CountDownLatch lock = new CountDownLatch(1);
                       AtomicInteger taskNum = new AtomicInteger(发送消息的总数);
                       long begin = System.currentTimeMillis();
       初始化线程池
                       每个线程池中任务的代码示例为:
while(taskNum.decrementAndGet() >= 0){
                           发送消息
}
                      lock.await();
                      long end = System.currentTimeMillis();
                       计算TPS
                      清空消息队列中的消息
                  测试结果为:
                                          
             
         2.      接收消息TPS测试
  
                具体的测试流程如下所示:
                 1) 数据准备
                      

消息体:

{

success:true,

reqId:"1234567890123456",

body:”12345678901234567890”

}

                       接收的消息总数:1000000
                       测试轮数:10
                       每轮的线程数:10*轮数
                       每10个线程共用一个Connection,每个线程一个Channel
                 2)测试程序示例如下
                       CountDownLatch lock = new CountDownLatch(接收的消息总数);
                       long begin = System.currentTimeMillis();
       初始化线程池
                       每个线程池中任务的代码示例为:
接收消息
                        lock.countDown();
                      lock.await();
                      long end = System.currentTimeMillis();
                       计算TPS
                  测试结果为:

0 0