下载安装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
![](https://i-blog.csdnimg.cn/blog_migrate/f542317f44f7165699e0b1b9d10bb280.png)
浏览器打开: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慢慢的按照数据库处理的并发量,从消息队列中拉取数据,在生产环境中短暂的高峰期挤压是允许的