前言


JMS介绍:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。(百度 )

本文只测试ActiveMQ,其他消息中间件应该同理.

ActiveMQ介绍


JMS常见2种消息模型:

  1. 点对点(Queues队列)
    生产者产生消息,仍1条消息给ActiveMQ,消费者监听ActiveMQ,从ActiveMQ中取走1条消息,并销毁这个消息,且只会有一个监听的消费者取走.其他消费者不会取走信息
  2. 广播/订阅(Topics 队列)
    广播出1条消息给ActiveMQ,订阅监听ActiveMQ,所有当时监听ActiveMQ的订阅都可以取到这条消息,并销毁这个消息,

3 . 虚拟Topics
为什么说2种消息模型,这里会有第三种,因为Topics队列的性质决定,当我要发消息给很多订阅,但是如果订阅监听服务挂掉,就不能收到这个消息,导致消息未发布到这个订阅,所以引申出第三个消息模型,虚拟Topics.
广播出1条消息给ActiveMQ Topics队列,ActiveMQ会自动转换给要分发消息的订阅 Queues 队列.然后订阅监听Queues队列去取走消息.这2种消息模型的结合,产生出第三种消息模型,虚拟Topics.

准备工作


以ActiveMQ为例子,使用jmeter测试JMS.

  • Jmeter版本:3.2
  • ActiveMQ版本5.14.5
编写jndi.properties添加到ApacheJMeter.jar 中
  • 新建jndi.properties到jmeter/bin目录下
  • 复制内容为:
java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://IP:61616 connectionFactoryNames = connectionFactory queue.T_MDM_Q = Queue.T_MDM
queue.T_IPS_Q= Queue.T_IPS topic.T_MDM_T= VirtualTopic.T_MDM
topic.T_IPS_T= VirtualTopic.T_IPS

java.naming.factory.initial:ActiveMQ jar包中 init 所需的 类名
java.naming.provider.url:ActiveMQ的地址
connectionFactoryNames:链接工厂名称
queue.T_MDM_Q:队列名称
queue:说明是queue队列
T_MDM_Q:自定义字段,在后面用来指向队列名称
同理topic.T_MDM_T

  • 把配置文件打到ApacheJMeter.jar 中 在jmeter/bin目录下运行 
    jar uf ApacheJMeter.jar jndi.properties
下载ActiveMQ

把ActiveMQ下 activemq-all-x.x.x.jar放到Jmeter/lib下

配置Jmeter进行测试 点对点(Queues队列)


  1. 待测消息模型:点对点(Queues队列)
  2. 待测队列名称:Queue.T_MDM

右键》添加》sampler》JMS point-to-point 添加一个队列的界面

 

 

QueueConnection Factory:jndi.properties中connectionFactoryNames 字段
JNDI Name Request queue:生产者向哪个队列插入消息,jndi.properties中对应待测队列名称的queue.xxxxx
JNDI Name Reply queue:消费者从哪个队列取消息,jndi.properties中对应待测队列名称的queue.xxxxx
Content:消息内容
InitialContextFactory:org.apache.activemq.jndi.ActiveMQInitialContextFactory
Provider URL:ActiveMQ地址

配置Jmeter进行测试 发布/订阅(Topic队列)


  1. 待测消息模型:发布/订阅(Topic队列)
  2. 待测队列名称:VirtualTopic.T_MDM
配置发布 Publisher

右键》添加》sampler》JMS Publisher 添加一个Publisher界面

 

InitialContextFactory:org.apache.activemq.jndi.ActiveMQInitialContextFactory
Provider URL:ActiveMQ地址
QueueConnection Factory:jndi.properties中connectionFactoryNames 字段
Destination:发布往队列的名称,jndi.properties中对应Topic队列名称的topic.xxxx
Text Massage:发布的消息

配置订阅 Subscriber

右键》添加》sampler》JMS Subscriber添加一个Publisher界面

 

总结


上面只介绍了ActiveMQ的配置方法,因为我也只调了ActiveMQ,其他JMS中间件没有试过,如果你们项目中需要,可以试一下.

Jmeter测试JMS中涉及的其他参数设置,可能会用到的,查看Jmeter说明http://jmeter.apache.org/usermanual/build-jms-point-to-point-test-plan.html

Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能的更多相关文章

  1. 17) JMS: java Message Service(Java消息服务)

         JMS是一个标准,就像EJB,有很多开源的,商业的实现,ms技术对应的规范是jsr914,规范的实现称为jms provider,常见的实现有ActiveMQ.JBoss MQ.IBM We ...

  2. Java Message Service学习(一)

    一,背景 近期需要用到ActiveMQ接收Oozie执行作业之后的返回结果.Oozie作为消息的生产者,将消息发送给ActiveMQ,然后Client可以异步去ActiveMQ取消息. ActiveM ...

  3. 认识 Java Message Service

    1. Java Message Service : 是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建.发送.接收和读取消息. 实现Java 程序与MQ Server 之间互相 ...

  4. Java Message Service

    en.wikipedia.org/wiki/Java_Message_Service Messaging is a form of loosely coupled distributed commun ...

  5. Simple guide to Java Message Service (JMS) using ActiveMQ

    JMS let’s you send messages containing for example a String, array of bytes or a serializable Java o ...

  6. Jmeter测试普通java类说明

    概述 Apache JMeter是Apache组织开发的基于Java的压力测试工具.本文档主要描述用Jmeter工具对基于Dubbo.Zookeeper框架的Cassandra接口.区块链接口进行压力 ...

  7. JMS Java消息服务(Java Message Service)

    JMS 在一些场景下RPC的同步方式可能不太适合业务逻辑的处理,并且这种方式在某些场景下会导致业务的紧耦合. 基于异步交互模型的JMS解决了RPC产生的紧耦合问题,它提供了一个可以通过网络访问的抽象消 ...

  8. Spring的消息 Java Message Service (JMS)

     Spring有两种方法提供对EJB的支持: Spring能让你在Spring的配置文件里,把EJB作为Bean来声明.这样,把EJB引用置入到其他Bean的属性里就成为可能了,好像EJB就是另一个P ...

  9. 【转】JMeter测试有无数据库连接池的性能

    使用JMeter测试一下有无数据库连接池的性能: 1.下载JMeter 2.无连接池的servlet Java代码 public void doGet(HttpServletRequest reque ...

随机推荐

  1. Vue中子组件调用父组件的方法

    Vue中子组件调用父组件的方法 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. [转]C# 理解lock

    原文:http://www.cnblogs.com/apsnet/archive/2012/07/08/2581475.html 一. 为什么要lock,lock了什么? 当我们使用线程的时候,效率最 ...

  3. 【C#小知识】C#中一些易混淆概念总结(四)---------解析Console.WriteLine() 分类: C# 2014-02-05 17:18 1060人阅读 评论(0) 收藏

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) [C#小知识]C#中一些易混淆概念总结(三) ------------------------------ ...

  4. 极光推送android sdk集成步骤

    推送,用极光,大家都说好,哈哈. 进入正题: 1.确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持.(基本上现在都已经支持了,循例说一下)  , ...

  5. javascript快速入门1--JavaScript前世今生,HelloWorld与开发环境

    JavaScript历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C--(C-minus-minus,简称Cmm)的嵌入式脚本语言. Cmm背后的理念很简单:一个足够强大可以替代宏 ...

  6. XML CData 处理

    调研了 JAXB.XMLMapper(jackson) 具体方式 实现 优势 JAXB 1. 需要增加 CDATA 的Adaptor 2. 需要增加对非CDATA 的 CharacterEscapeH ...

  7. LeetCode【第1题】Two Sum

    准备刷一刷LeetCode了. 题目: ''' Given an array of integers, return indices of the two numbers such that they ...

  8. 如何在.Net Core MVC中为动态表单开启客户端验证

    非Core中的请参照: MVC的验证 jquery.validate.unobtrusive mvc验证jquery.unobtrusive-ajax 参照向动态表单增加验证 页面引入相关JS: &l ...

  9. nginx学习笔记(7)Nginx如何处理一个请求---转载

    如何防止处理未定义主机名的请求基于域名和IP混合的虚拟主机一个简单PHP站点配置 基于名字的虚拟主机 Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口 ...

  10. Dubbo2.7源码分析-Dubbo是如何整合spring-framework的

    这篇文章是Dubbo源码分析的开端,与其说这篇文章是Dubbo源码分析,不如是spring源码分析,因为大部分都是在分析spring如何解析xml配置文件的,为了与后面的Dubbo源码分析保持一致,姑 ...