引用http://www.cnblogs.com/qianyiliushang/p/4348584.html?utm_source=tuicool&utm_medium=referral
JMS參考http://blog.csdn.net/jiuqiyuliang/article/details/46701559
MOM 作爲消息數據交換的平臺,也是影響應用執行效率的潛在環節。在 Java 程序中,是通過 JMS 與 MOM 進行交互的。作爲 Java 實現的壓力測試工具,JMeter 也能使用 JMS對應用的消息交換和相關的數據處理能力進行測試。這一點應該不難理解,因爲在整個測試過程中,JMeter 測試的重點應該是消息的產生者和消費者的本身能力,而不是 MOM本身。
根據 JMS 規範,消息交換有2種方式:發佈/訂閱和點對點。JMeter針對這兩種情形,分別提供了不同的Sampler進行支持。
目的
以下MOM我們使用ActiveMQ ,分別描述發佈/訂閱和點對點這兩種消息交換方式是如何使用 JMeter 進行測試。
1. 測試前的準備(兩種情況都適用)
- JMeter 雖然能使用 JMS 對 MOM 進行測試,但是它本身並沒有提供JMS需要使用的包。下載解壓Activemq 將 activemq-all-5.13.3.jar複製至apache-jmeter-2.13\lib目錄下(http://activemq.apache.org/download.html)。運行時發現提示如下類衝突的錯誤,解決方法:用壓縮工具打開apche-all-*.jav....staticloggerbinder.class所在目前,將該類重命名。
- JMeter 在測試時使用了 JNDI,爲了提供 JNDI 提供者的信息,需要提供 jndi.properties。同時需要將 jndi.properties 放到 JMeter 的 bin下的 ApacheJMeter.jar 打包在一起。執行如下操作,打開命令行窗口,並定位到 JMETER_HOME/bin 目錄,運行如下命令 jar uf ApacheJMeter.jar jndi.properties(直接修改ApacheJMeter_core.jar中的jemeter.properties文件,這種方式比較麻煩,涉及重新打包,直接在Jmeter GUI中配置JNDI的屬性也可以)
對於 ActiveMQ,jndi.properties 的示例內容如下:
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
#指定connectionFactory的jndi名字,多個名字之間可以逗號分隔。
#以下爲例:
#對於topic,使用(TopicConnectionFactory)context.lookup("connectionFactry")
#對於queue,(QueueConnectionFactory)context.lookup("connectionFactory")
connectionFactoryNames = connectionFactory
#註冊queue,格式:
#queue.[jndiName] = [physicalName]
#使用時:(Queue)context.lookup("jndiName"),此處是MyQueue
queue.MyQueue = example.MyQueue
#註冊topic,格式:
# topic.[jndiName] = [physicalName]
#使用時:(Topic)context.lookup("jndiName"),此處是MyTopic
topic.MyTopic = example.MyTopic
2、測試步驟
- 啓動ActiveMQ:打開dos窗口,進入ActiveMQ解壓目錄下的bin目錄,輸入命令:activemq.bat start
- Tips:在啓動ActiveMQ前,修改conf目錄下的activemq.xml中的配置
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=65535&wireFormat.maxFrameSize=104857600"/>
上面標記的這個數字爲最大連接數,自己設置,如果太小的話會導致發送的請求都被拒絕
- Tips:在啓動ActiveMQ前,修改conf目錄下的activemq.xml中的配置
- 啓動Jmeter
- 添加一個線程組
- 添加Samper:選擇JMS POINT TO POINT
- 配置Sampler
-
- QueueConnection Factory:連接名
- JNDI name Request queue:JNDI請求發送隊列名
- JNDI name Recieve queue:JNDI接收隊列
- TimeOut:超時時長
- Expiration:過期時間
- Communication style:Request only(只發送請求,如果選擇Request Response模式,會驗證收到消息的JMS Header中的JMSCorrelationID,以判斷是否是對請求消息的響應。需要設置CorrelationId,並且需要服務端調用getReplyTo()方法來監聽請求)
- Content:發送消息內容,這裏調用Jmeter的函數助手發送512個字符
- Initial Context Factory:org.apache.activemq.jndi.ActiveMQInitialContextFactory(這個在之前從AMQ中拷貝到Jmeter\lib中的jar包裏,Jmeter會自動掃描到)
- JNDI Properties,queue.Test.Request和queue.Test.Reply,這裏定義前面用到的兩個變量
- Provider URL:tcp://localhost:61616,這個是消息服務器的ip和端口,本地