jms 如何测试

对于我去过的大多数客户端,使用ActiveMQ扩展JMS消息传递层是一个优先事项。 有多种方法可以实现这一目标,但毫无疑问,创建基准并分析实际硬件上的体系结构(或者正如我的同事Gary Tully所说的“询问机器”)是第一步。 但是,对于创建一套全面的基准测试,您有哪些开源选择?

如果您有一些好的经验,请在评论中让我知道。 我能想到的项目:

  • 阿帕奇Jmeter
  • ActiveMQ性能插件
  • FuseSource JMSTester
  • Hiram Chirino的jms基准

在与Gary谈谈为ActiveMQ设置测试方案时,他回忆起一个非常有趣的项目,似乎停滞在名为JMSTester的FuseSource Forge 存储库中 。 他建议我看看它。 我做到了,它的当前功能给我留下了深刻的印象。 它是由前FuseSource顾问Andres Gies创建的,它通过与客户,航班和业余时间黑客的多次迭代而创建。 从那以后,我将接管它,并且我将添加功能,测试,文档,并继续保持它曾经拥有的动力。

但是,即使在我无法发挥自己的创造力之前,我也想与您分享它目前拥有的力量。

目的

该博客文章的目的是对JMSTester工具进行类似教程的介绍。 该工具的目的是提供一个功能强大的基准框架,以创建灵活的分布式JMS测试,同时在进行调整和调整JMS层之前监视/记录对现有数据至关重要的统计信息。

JMSTester主页上的某些文档有些过时,但是描述某些基准的步骤仍然是准确的。 本教程将要求您下载我一直在努力的SNAPSHOT,该文件可在以下位置找到: jmstester-1.1-20120904.213157-5-bin.tar.gz 。 我将很快部署网站的下一个版本,该网站应具有更多的二进制更新版本。 当我这样做时,我将更新这篇文章。

符合JMSTester工具

JMSTester工具只是发送和接收JMS消息的工具。 您可以使用spring上下文配置文件中定义的配置文件来指定要对消息代理施加什么样的负载。 JMSTester允许您定义想要使用的生产者的数量,使用者的数量,连接工厂,JMS属性(事务,会话ack等)等。但是,最酷的部分是可以运行分布在许多计算机上的基准测试。 这意味着您将机器设置为专门充当生产者,并设置其他机器充当消费者。 至于监视和收集用于基准测试的统计信息,JMSTester捕获三种不同类别的信息:

  1. 基本:每个使用者的邮件数,邮件大小
  2. JMX:在测试运行时监视代理上的所有JMX属性,包括线程数,队列大小,入队时间等
  3. 机器:CPU,系统内存,交换,文件系统指标,网络接口,路由/连接表等

他们的Hyperic SIGAR库用于捕获计算机级别的统计信息(第3组),而RRD4J库用于记录统计信息和输出图形。 目前,我认为这些图表非常基础,希望对此进行改进,但是原始数据始终会转储到csv文件中,您可以使用自己喜欢的电子表格软件来创建自己的图表。

建筑

JMSTester工具由以下概念组成:

  • 控制者
  • 客户群
  • 录音机
  • 前端
  • 基准配置

控制者

控制器是基准的组织者。 它跟踪谁对基准命令感兴趣,启动测试,跟踪使用者数量,生产者数量等。基准在没有控制器的情况下无法运行。 对于您感兴趣的人,JMSTester工具的基础体系结构依赖于消息传递,而ActiveMQ是控制器启动的代理,以使其余体系结构正常工作。

客户群

客户端是接受命令的容器,可以模拟生产者消费者或两者的角色,或两者都不起作用(这在以后很有意义)。 您可以根据需要拥有任意数量的客户。 您可以给它们指定唯一的名称,并在基准配置文件中使用它们的名称。 客户端可以在任何地方运行,包括在单独的计算机上或全部在一台计算机上运行。

录音机

客户端分别记录统计信息并将数据发送到记录器。 记录器最终将统计信息整理好,并整理图表,RRD4J数据库和基准csv文件。

前端

前端向控制器发送命令。 现在只有一个命令行前端,但我的意图是包括一个基于Web的前端和一个基于REST的控制器,该控制器可用于运行基准测试。

基准配置

配置文件是Spring上下文文件,用于指定指示控制器和客户端如何运行基准测试的bean。 在这些配置文件中,您还可以指定要捕获的度量标准以及何时将消息加载类型发送给JMS代理。 展望未来,我的目标是改善这些配置文件,包括添加自定义名称空间支持以使配置不再那么冗长。

我们走吧!

JMSTester网站上有一些很好的入门教程:

  • 简单:http://jmstester.fusesource.org/documentation/manual/TutorialSimple.html
  • JMX探针:http://jmstester.fusesource.org/documentation/manual/TutorialProbes.html
  • 分布式:http://jmstester.fusesource.org/documentation/manual/TutorialDistributed.html

它们大多是最新的,但是当我发现错误时,我将继续对其进行更新。

关于分布式教程的唯一一件事,实际上并没有建立分布式示例。 它分离出客户端,但仅在同一台本地主机上。 只需设置几个其他参数即可分发它,我们将在这里介绍。

本教程的体系结构如下:

让我们真正快速地理解该图。

JMS主机将运行两个进程:我们将测试的ActiveMQ代理,以及名为Monitor的JMSTester客户端容器。 容器既不是生产者也不是容器,而是仅用于监视机器和JMX统计信息。 统计信息将被发送回控制器主机上的记录器,如上面“记录器”部分所述。 ProducerConsumer容器将在分别命名为ProducerConsumer的单独机器上运行。 最后, Controller主机将具有分布式测试的ControllerRecorder组件。

最初设定

在将要参与基准测试的每台计算机上下载并提取JMSTester二进制文件。

启动Controller和Recorder容器

在将承载控制器的机器上,导航至$ JMSTESTER_HOME目录,然后键入以下命令以启动控制器和记录器:

./bin/runBenchmark -controller -recorder -springConfigLocations conf/testScripts

请注意,所有内容都必须与上面完全一样键入,包括“ conf / testScripts”上没有尾随空格
在以后的增强中,我将缓解这种特殊性。

启动控制器和记录器后,就应该准备启动其余的客户端了。 控制器启动客户端最终将连接到的嵌入式代理。

启动生产者容器

在将托管生产者的机器上,导航至$ JMSTESTER_HOME目录,然后键入以下命令:

./bin/runBenchmark -clientNames Producer -hostname domU-12-31-39-16-41-05.compute-1.internal

对于-hostname参数,必须指定启动控制器的主机名。 我在上面使用的是Amazon EC2 ,如果您要这样做,则更愿意为主机使用内部DNS名称。

启动使用者容器

对于使用者容器,除了为其提供客户名称“ Consumer”外,您将执行与生产者相同的操作

./bin/runBenchmark -clientNames Consumer -hostname domU-12-31-39-16-41-05.compute-1.internal

同样, -hostname参数应反映正在运行控制器的主机。

在JMS主机上设置ActiveMQ和监视器

设置ActiveMQ不在本文讨论范围之内。
但是您将需要在代理上启用JMX。 只需按照 Apache ActiveMQ网站上的说明进行操作即可 。

下一部分对于允许机器级别的探测/监视是必需的。 您需要安装SIGAR库。 由于它们的许可证,它们不随JMSTester一起分发,并且它们的JNI库在Maven中不可用。 基本上,您所需要做的就是下载并从此处提取[SIGAR发行版] [sigar-distro],然后将所有库从$SIGAR_HOME/sigar-bin/lib文件夹复制到$ JMSTESTER_HOME / lib文件夹中。

现在,使用针对生产者和消费者的类似命令启动Monitor容器:<

./bin/runBenchmark -clientNames Monitor -hostname domU-12-31-39-16-41-05.compute-1.internal

提交教程测试用例

我们可以从任何计算机上提交测试用例。 我选择从本地计算机上执行此操作。 您会注意到,提交测试用例的计算机未从上方的图中反映出来; 这仅仅是因为我们可以在任何机器上做到。 就像其他命令一样,您仍然需要JMSTester二进制文件。

在运行测试之前,让我们快速看一下指定测试的Spring配置文件。 为此,请在您喜欢的文本编辑器中打开$ JMSTESTER_HOME / conf / testScripts / tutorial / benchmark.xml,最好使用一种对XML文档进行颜色编码的代码,以便于阅读。 该基准文件带有大量注释,这些注释清楚地描述了各个部分。 如果不清楚,请ping我,以便我提供更多详细信息。

在配置中有几个地方,您需要指定自己的值以使此测试成功。 不幸的是,目前这是一个手动过程,但我计划对其进行修复。

看一下JMS代理连接工厂的创建位置。 在这种情况下,将在其中创建ActiveMQ连接工厂(第120和124行)。此处的URL是您在前面的部分之一中启动的ActiveMQ代理的URL。 分发后,其中就有一个EC2主机URL。 您必须指定自己的主机。 同样,如果使用EC2,则首选内部DNS名称。

然后,看一下指定AMQDestinationProbe的第169行。 该探针是针对ActiveMQ的JMX探针。 您必须更改brokerName属性以匹配启动它时命名的代理(通常在代理配置的<broker brokerName='name here'>部分中找到)。

最后,从$ JMSTESTER_HOME目录中,运行以下命令:

./bin/runCommand -command submit:conf/testScripts/tutorial -hostname ec2-107-21-69-197.compute-1.amazonaws.com

同样,请注意,我将-hostname参数设置为运行控制器的主机。 在这种情况下,我们更喜欢EC2的公共DNS,但这将取决于您的环境。

输出量

你有它。 您已将测试用例提交给基准框架。 您应该在每个客户端(生产者,消费者,监视器)以及控制器上看到一些活动。 如果您的测试正常运行,并且所有原始数据和图形均已生成,那么您应该会看到类似于日志记录输出的内容:

Written probe Values to : /home/ec2-user/dev/jmstester-1.1-SNAPSHOT/tutorialBenchmark/benchmark.csv

请注意,所有结果都写入到tutorialBenchmark中 ,该名称是测试的名称,该名称由第18行的Spring配置文件中的BenchmarkId定义:

<property name='benchmarkId' value='tutorialBenchmark'/>

如果您看一看benchmark.csv文件,您将看到收集到的所有统计信息。 收集的本教程的统计信息包括:

  • 邮件数
  • 讯息大小
  • JMX队列大小
  • JMX线程计数
  • SIGAR CpuMonitor
  • SIGAR免费系统内存
  • SIGAR系统总内存
  • SIGAR免费交换
  • SIGAR总掉期
  • SIGAR交换页面
  • SIGAR换页
  • SIGAR磁盘读取(以字节为单位)
  • SIGAR磁盘写入(以字节为单位)
  • SIGAR磁盘读取
  • SGIAR磁盘写入
  • SIGAR Network RX BYTES
  • SIGAR Network RX PACKETS
  • SIGAR Network TX BYTES
  • SIGAR Network RX已删除
  • SiGAR Network TX已删除
  • SIGAR Network RX错误
  • SIGAR Network TX错误

而已

我强烈建议您看一下这个项目。 我已经接手了它,并且会在时间允许的情况下对其进行改进,但是我非常重视关于如何改进它或支持哪些用例的任何想法或建议。 看一下已有的文档,我们将继续添加更多文档。
如果您有问题,或者如上所述无法正常运行,请给我发评论,发电子邮件或在Apache IRC频道中找到我……我通常至少在#activemq和#camel中。

祝您编程愉快,别忘了分享!

参考:在Christian Posta Software博客上,使用来自我们JCG合作伙伴 Christian Posta的FuseSource提供的开源JMSTester工具对JMS层进行基准测试 。

翻译自: https://www.javacodegeeks.com/2012/09/benchmarking-jms-layer-with-jmstester.html

jms 如何测试

jms 如何测试_使用JMSTester对JMS层进行基准测试相关推荐

  1. java c s测试_将Zlib Java与C进行基准测试

    我试图通过切换到C来加快最初用Java编写的TIFF编码器的速度,并已编译了Zlib 1.2.8,其中定义了Z_SOLO并包含最少的C文件集:adler32.c,crc32.c,deflate.c,& ...

  2. 使用JMSTester对JMS层进行基准测试

    对于我去过的大多数客户端,使用ActiveMQ扩展JMS消息传递层是一个优先事项. 有多种方法可以实现这一目标,但毫无疑问,创建基准测试并在实际硬件上分析架构(或者正如我的同事Gary Tully所说 ...

  3. weblogic jms消息 删除_消息队列与消息中间件概述:消息中间件核心概念与技术选型...

    什么是消息? "消息"是在两台计算机间传送的数据单位. 消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 什么是队列? 队列(Queue)队列是一种先进先出 ...

  4. jms面试题_最新的20多个JMS面试问答(2020)

    jms面试题 快速浏览JMS(Java消息服务)常见问题面试问题和答案. 2020年以来的最新问题已添加到列表中. 1.简介 在本教程中,我们将了解2020年经常问到的JMS面试问题.作为面试的一部分 ...

  5. Kafka是什么,JMS是什么,常见的类JMS消息服务器,为什么需要消息队列(来自学习笔记)

    1.Kafka是什么  Apache Kafka是一个开源消息系统,由Scala写成.是由Apache软件基金会开发的一个开源消息系统项目.  Kafka最初是由LinkedIn开发,并于2011 ...

  6. 视觉测试_视觉设计流行测验

    视觉测试 重点 (Top highlight) I often discuss the topic of improving visual design skills with junior and ...

  7. ARX测试_绘制道路横断面

    本文迁移自本人网易博客,写于2011年1月12日,ARX测试_绘制道路横断面 - lysygyy的日志 - 网易博客 (163.com) 1.已提供道路的图形,获取用户输入的两点,并在两点间画一条虚线 ...

  8. pygame的mask测试_作者:李兴球

    """ mask测试,mask就是膜或罩的意思,可以从一个图片创建一个mask,但要转换alpha的,否则就失去了意义. 我们可以想像给一个透明的图片覆一层膜,也就是ma ...

  9. 转:卷积神经网络_(1)卷积层和池化层学习

    博主总结的很好,学习中.转载:http://www.cnblogs.com/zf-blog/p/6075286.htm 卷积神经网络_(1)卷积层和池化层学习 卷积神经网络(CNN)由输入层.卷积层. ...

最新文章

  1. word如何设置标题编号
  2. javascript 循环语句 while、do-while、for-in、for用法区别
  3. VTK:网格用法实战
  4. 【DG】Oracle 19c使用dbca来搭建物理DG
  5. 【教女朋友学网络系列3】之手把手教她明白交换机的基本原理
  6. thinkphp如果表名有下划线需要用Model
  7. 华硕服务器主板型号命名规则,常见主板命名规则
  8. 百度地图demo基础组件演示
  9. ROS 2 index翻译(五)——关于ROS 2客户端库
  10. Swing basic
  11. QT-提示“database not open”
  12. python表格控件_tkinter 控件 Treeview 表格数据
  13. 用DISKGEN恢复硬盘数据
  14. 在谷歌chrome、Firefox等浏览器打开、编辑、保存微软Office、金山WPS文档
  15. Java8实战[1-4]章要义笔记
  16. mysql食堂系统E R图_食堂管理系统E-R图.doc
  17. java kindeditor 上传图片_使用Kindeditor上传图片
  18. 数学建模day1 层次分析法与TOPSIS方法
  19. 软通动力华为项目组Java开发面试总结
  20. ios 高德挪动地图获取经纬度_iOS 高德地图 根据经纬度解析成位置

热门文章

  1. 2022的第一天,立个目标
  2. java实现动态验证码源代码——jsp页面
  3. struts+hibernate+oracle+easyui实现lazyout组件的简单案例——struts.xml配置详情
  4. 2016蓝桥杯省赛---java---B---1(煤球数目)
  5. 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行
  6. linux原有的文件系统扩展,原来linux不用LVM也能扩展文件系统
  7. tomcat中配置jndi数据源以便spring获取
  8. graphql_GraphQL在Wildfly群上
  9. mongodb实验报告_Dropwizard,MongoDB和Gradle实验
  10. c++ lambda 重载_您会后悔对Lambdas应用重载!