下載安裝ActiveMQ
ActiveMQ下載:https://activemq.apache.org/
解壓:tar -zxvf apache-activemq-5.16.2-bin.tar.gz
切換到activemq的bin目錄:cd apache-activemq-5.16.2/bin
啟動MQ:./activemq start
檢查MQ是否正常啟動:ps -ef|grep activemq|grep -v grep

瀏覽器打開:http://localhost:8161 admin/admin 登錄查看

JMS腳本開發
jms(java message service):java消息服務器應用程序接口,是一個Java平台面向消息中間件的api,用於在兩個應用程序之間,或分布式系統中發送信息,進行異步通信
Connection Factory:創建一個連接,向消息服務器發送消息以及從消息服務器接收信息均是通過此連接進行
Connection:是客戶端與消息服務器的活動連接
Session:是用於生產和使用消息的單線程上下文
MessageProduce:指定的物理目標發送消息
MessageConsumer:客戶端是使用Message Consumer對象從指定的目錄目標接收信息
jmeter開發jms腳本的步驟
1、創建 jndi.properties文件
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url=tcp://localhost:61616
# 指定 connectionFactory 的 jndi名字,多個名字之間可以逗號隔開
connectionFactoryNames=connectionFactory
# 注冊queue,格式:
# queue.[jndiName]=[physicalName]
#使用時:(Queue)context.lookup("jndiName"),此處是MyQueuePerPertest自定義命名
queue.MyQueuePerPertest=MyQueuePerPertest
# 注冊 topic,格式:
# topic.[jndiName]=[physicalName]
# 使用時:(Topic)context.lookup("jndiName"),此處是MyTopicPerPertest自定義命名
queue.MyTopicPerPertest=MyTopicPerPertest
2、把這個文件夾加入到ApacheJMeter.jar這里
保存並把這個文件復制到 JMETER_HOME/bin (JMETER_HOME為 jmeter 的安裝目錄)目錄中。
由於 bin 目錄並不在 jmeter 的 classpath 中,所以需要執行一些額外的工作來把 jndi.properties 添加到 jmeter 的classpath 中。
這兒使用一種最簡單的辦法:把 jndi.properties 打包到 jmeter 的啟動 jar 包中。 jmeter 的啟動 jar 包為 JMETER_HOME/bin/ApacheJMeter.jar,所以需要把 jndi.properties 添加到這個 jar 文件中。執行如下操作,打開命令行窗口,並定位到 JMETER_HOME/bin 目錄,運行如下命令 jar uf ApacheJMeter.jar jndi.properties 就可以,
命令行:jar uf ApacheJMeter.jar jndi.properties
3、拷貝Active所需用到的包文件到jMeter的lib下面
jmeter 在測試 jms 的時候會使用到 activemq 提供的 jms 的實現類,這些類並沒有隨 jmeter 一起分發,所以需要把這些類添加到 jmeter 的 classpath 中。只要把 ACTIVE_HOME/activemq-all-5.2.0.jar 文件復制到 JMETER_HOME/lib 目錄中即可。
重啟JMeter,添加取樣器列表可以看到有JMS的選擇




這里,發送MQ的腳本就完成了
三種方式:
1、jms to jms
tcp://localhost:61616
測試JMS的PUB/SUB模式
步驟:
jms的訂閱(消費)

在這里添加響應的信息,進行請求,會一直等待狀態
jms的發送者:


請求消息,再來看訂閱者,就會看到消息接收

面試題:
MQ是起什么作用,為什么使用MQ?
1、作用:消息隊列的寫入和讀取,來做異步處理
2、原因:
解藕:將消息寫入隊列,需要消息的系統自己從消息隊列中訂閱,從而系統不需要修改
異步:將消息寫入消息隊列,非必要的業務邏輯以異步的方式運行,加快響應速度
削峰:系統A慢慢的按照數據庫處理的並發量,從消息隊列中拉取數據,在生產環境中短暫的高峰期擠壓是允許的
