性能工具之 JMeter ActiveMQ 脚本开发实践

ops/2025/1/15 13:29:13/

文章目录

  • 一、ActiveMQ环境搭建
    • 1.1、控制台环境搭建
    • 1.2、控制台配置
  • 二、SpringBoot开发环境搭建
  • 三、JMeter脚本二次开发环境搭建

一、ActiveMQ环境搭建

1.1、控制台环境搭建

下载 ActiveMQ 地址为:
https://activemq.apache.org/components/classic/download/

在这里插入图片描述
注意:

拷贝apache-activemq-6.12-bin.tar.gz到Linux服务器的/opt下
解压缩 tar -zxf apache-activemq-6.12-bin.tar.gz
重命名 mv apache-activemq-6.12 activemq

进入目录后显示:

[root@lw activemq]# ll
总用量 11148
-rwxr-xr-x. 1 root root 11354996 412 01:35 activemq-all-6.1.2.jar
drwxr-xr-x. 4 root root      130 716 14:28 bin
drwxr-xr-x. 2 root root     4096 716 14:28 conf
drwxr-xr-x. 2 root root       26 716 14:28 data
drwxr-xr-x. 2 root root       76 716 14:28 docs
drwxr-xr-x. 7 root root       71 412 01:35 examples
drwxr-xr-x. 6 root root     4096 716 14:29 lib
-rw-r--r--. 1 root root    40581 412 01:35 LICENSE
-rw-r--r--. 1 root root     3334 412 01:35 NOTICE
-rw-r--r--. 1 root root     2611 412 01:35 README.txt
drwxr-xr-x. 6 root root       95 716 14:28 webapps
drwxr-xr-x. 3 root root       18 716 14:28 webapps-demo

配置JDK路径:

[root@lw activemq]#  vim /opt/activemq/bin/activemq
# 添加java_home/java_cmd环境配置如:

在这里插入图片描述

启动服务命令 service activemq start

[root@lw ~]# service activemq start 
INFO: Loading '/opt/activemq//bin/setenv'
INFO: Using java '/usr/local/jdk-17.0.11/bin/java'
INFO: Starting - inspect logfiles specified in logging.properties and log4j2.properties to get details
INFO: pidfile created : '/opt/activemq//data/activemq.pid' (pid '117820')
[root@lw ~]#

打开浏览器验证是否可以打开ActiveMQ控制台:
在这里插入图片描述

1.2、控制台配置

修改配置文件 /opt/activemq/conf/jetty.xml

修发现8161对应的ip地址是127.0.0.1,这个地址一般都是localhost的地址,所以需要把这个地址改成0.0.0.0,即广播地址。

<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"><!-- the default port number for the web console --><property name="host" value="0.0.0.0"/><property name="port" value="8161"/></bean><bean id="Server" depends-on="jettyPort" class="org.eclipse.jetty.server.Server"destroy-method="stop"><property name="handler"><bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"><property name="handlers"><list><ref bean="contexts" /><ref bean="securityHandler" /></list></property></bean></property>

重新启动,打开浏览器地址:
在这里插入图片描述

二、SpringBoot开发环境搭建

新建 maven下项目并且在 pom 文件中输入:

<dependencies><!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-pool --><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId><version>${activemq.version}</version></dependency>
</dependencies>

上面步骤完成后,就可以新建一个成产者进行测试是否可以用队列生产者搭建,代码参考如下:

 public static void main(String[] args) throws JMSException {String brokerURL = "tcp://192.168.24.137:61616";//构造连接工厂实例对象ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);//构造从工厂得到连接对象Connection connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session,注意指定消息队列Queue queue = session.createQueue("7dGroup-test");//消息的目的地,消息发给谁MessageProducer producer = session.createProducer(queue);//消息发送者//构造消息,此处写死,项目就是参数,或者方法获取TextMessage message = session.createTextMessage("我是测试者");producer.send(message);producer.close();session.close();connection.close();}

打开网址点击 Queues :
在这里插入图片描述

执行代码提示成功:
在这里插入图片描述
控制台显示:
在这里插入图片描述
点击 Topics 显示如下:
在这里插入图片描述

如果修改 Topics 发送消息,代码修改一个地方即可,如下图:
在这里插入图片描述
参考代码如下:

  Topic topic = session.createTopic("7dGroup-yace");//消息的目的地,消息发给谁MessageProducer producer = session.createProducer(topic);//消息发送者//构造消息,此处写死,项目就是参数,或者方法获取TextMessage message = session.createTextMessage("我是测试者");

执行代码查看控制台:
在这里插入图片描述
在查看 Queues没有增加数据:

在这里插入图片描述
消费者搭建,参考代码:

String brokerURL = "tcp://192.168.24.137:61616";//构造连接工厂实例对象ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);//构造从工厂得到连接对象Connection connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session,注意指定消息队列Queue queue = session.createQueue("7dGroup-test");// 创建消费者MessageConsumer consumer = session.createConsumer(queue);while (true) {TextMessage message = (TextMessage) consumer.receive();if (null != message) {System.out.println("我收到一条消息" + message.getText());} elsebreak;}consumer.close();session.close();connection.close();}

执行结果显示:
在这里插入图片描述
查看控制台目前已经有一个消费者:
在这里插入图片描述

如果采用监听器方式进行消费参考代码如下:

String brokerURL = "tcp://192.168.24.137:61616";//构造连接工厂实例对象ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);//构造从工厂得到连接对象Connection connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session,注意指定消息队列Queue queue = session.createQueue("7dGroup-test");// 创建消费者MessageConsumer consumer = session.createConsumer(queue);consumer.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {if (null != message && message instanceof TextMessage) {TextMessage textMessage = (TextMessage) message;try {System.out.println("我收到一条消息: " + textMessage.getText());} catch (JMSException e) {e.printStackTrace();}}}});try {//会一直执行获取数据System.in.read();consumer.close();session.close();connection.close();} catch (IOException e) {throw new RuntimeException(e);}}

再次运行生产者,监听器会自动获取数据:
在这里插入图片描述
执行两次生产,执行一次监听器:
在这里插入图片描述

通过上面代码已经把 activemq 环境搭建好,现在开始修改代码为Jmeter 脚本,在修改jmeter脚本之前,需要引入 ApacheJMeter_functions 方法才能使用java 协议进行脚本开发。

<!-- https://mvnrepository.com/artifact/org.apache.jmeter/ApacheJMeter_functions --><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_functions</artifactId><version>${jmeter.version}</version></dependency>

三、JMeter脚本二次开发环境搭建

在代码中新建一个 ActiveMQSampler 类并且继承 AbstractJavaSamplerClient 接口参考如下:

public class ActiveMQSamplerTest extends AbstractJavaSamplerClient {private String brokerURL;private String topic;private String message;// 判断是topic还是队列消息private String isTopMess;@Overridepublic void setupTest(JavaSamplerContext context) {brokerURL = context.getParameter("brokerURL");topic = context.getParameter("topic");message = context.getParameter("message");isTopMess = context.getParameter("isTopMess");}@Overridepublic SampleResult runTest(JavaSamplerContext sampleResult) {// 创建 Jmeter 请求结果SampleResult result = new SampleResult();try {// 创建消息Producer msg = new Producer();msg.SedProducerTopMess(brokerURL, topic, message, isTopMess);// 请求开始result.sampleStart();result.sampleEnd();result.setSuccessful(true);} catch (Exception e) {//e.printStackTrace();result.sampleEnd();result.setSuccessful(false);}return result;}@Overridepublic Arguments getDefaultParameters() {Arguments params = new Arguments();params.addArgument("brokerURL", "tcp://localhost:61616");params.addArgument("topic", "testTopic");params.addArgument("message", "testTag");params.addArgument("isTopMess", "queue");return params;}
}

生成消息改造后的代码,如下:

/*** 是否发送 topic 与队列的区别** @param brokerURL* @param topicStr* @param messageStr* @param isTopMess*/public void SedProducerTopMess(String brokerURL, String topicStr, String messageStr, String isTopMess) {try {//构造连接工厂实例对象ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerURL);//构造从工厂得到连接对象Connection connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session,注意指定消息队列MessageProducer producer;if (isTopMess.equals("queue")) {Queue queue = session.createQueue(topicStr);producer = session.createProducer(queue);} else {Topic topic = session.createTopic(topicStr);//消息的目的地,消息发给谁producer = session.createProducer(topic);}logger.info("目前发送主题为:" + topicStr + ",的消息为:" + messageStr);//消息发送者//构造消息,此处写死,项目就是参数,或者方法获取TextMessage message = session.createTextMessage(messageStr);producer.send(message);producer.close();session.close();connection.close();} catch (JMSException e) {throw new RuntimeException(e);}}

接下来把代码编译成 jar 放入 jmeter 中的 lib/ext下,如果想把依赖都一起打成 jar,请参考pom文件如下:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin><!--            依赖包--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version><configuration><encoding>utf-8</encoding><resources><resource><directory>${basedir}/src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.config</include></includes></resource></resources></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>io.pef.mq</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

编程后如:

在这里插入图片描述
复制包,如下图:

在这里插入图片描述
接下来打开 JMeter 验证脚本是否可以用?
在这里插入图片描述

修改地址,进行发送消息测试:

在这里插入图片描述
开启监听器消费,需要修改当前 JMeter发送的主题如下:
在这里插入图片描述
再次执行 JMeter 进行生存消息,代码执行消息如下:
在这里插入图片描述

结果如下:

在这里插入图片描述
再次打开控制台如:

在这里插入图片描述
到这里脚本已经全部开发完毕,希望对大家有一点帮助。


http://www.ppmy.cn/ops/150294.html

相关文章

yum和vim的使用

目录 一.Linux软件包管理器yum 二.Linux编辑器vim使用 1.vim的基本概念 2.vim的基本操作 3.vim正常模式命令 4.vim末行模式命令 5.vim的配置 一.Linux软件包管理器yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序…

反转字符串力扣--344

目录 题目 思路 双指针法 代码 双指针法 题目 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#…

数字普惠金融对新质生产力的影响研究(2015-2023年)

基于2015—2023年中国制造业上市公司数据&#xff0c;探讨了数字普惠金融对制造业企业新质生产力的影响及作用机理。研究发现&#xff0c;数字普惠金融有助于促进制造业企业新质生产力的发展&#xff0c;尤其是在数字普惠金融的使用深度较大的情况下&#xff0c;其对新质生产力…

Windows图形界面(GUI)-QT-C/C++ - QT信号与槽机制详解

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 Qt消息机制概述 什么是信号与槽 基本概念 信号(Signals)详解 信号的特征 信号的定义方式 槽(Slots)详解 槽的特征 槽的定义方式 信号与槽的连接 基本连接语法 连接类型 高级特…

SQLite 语法快速入门

SQLite 是一个软件库&#xff0c;实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 提供一个免费的在线SQLite编辑器 &#xff08;0&#xff09;常用命令 # 格式化 .header on .mode column .timer on# 查看表格 .tables# 查看表结构(建表语句) .schema …

纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析

一、纯 Python 1.1 基础概念 Python 是一种高级、通用、解释型的编程语言&#xff0c;以其简洁易读的语法和丰富的标准库而闻名。“纯 Python” 在这里指的是不依赖特定的 Web 框架或数据分析工具&#xff0c;仅使用 Python 原生的功能和标准库来开发应用程序或执行任务。 1.…

今年的电商年货节,主流的营销策略是怎样?

随着一年的年关将近&#xff0c;新一年的CNY营销也逐渐拉开帷幕。考虑到此时消费需求的膨胀&#xff0c;这个时间不论对于线上还是线下市场而言&#xff0c;都是重要的营销节点。今年CNY营销&#xff0c;电商平台上的主流营销策略是这样&#xff1f;就让我们来简单了解下概况。…

谷歌浏览器的音视频播放设置与优化

在数字媒体时代&#xff0c;音视频内容已成为人们日常生活中不可或缺的一部分。作为最流行的网络浏览器之一&#xff0c;谷歌浏览器凭借其强大的功能和灵活的设置选项&#xff0c;为用户提供了卓越的音视频播放体验。本文将详细介绍如何通过优化谷歌浏览器设置来提升音视频播放…