- 浏览: 1017051 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
本文描述了对ActiveMQ进行性能测试的代码。性能测试用源代码共包含3个文件,分别是: 1. JMS消息发送类 ActiveMQProducer.java 的源码如下: import javax.jms.*; import org.apache.activemq.*; public class ActiveMQProducer { private String user = ActiveMQConnection.DEFAULT_USER; private String password = ActiveMQConnection.DEFAULT_PASSWORD; private String url = ActiveMQConnection.DEFAULT_BROKER_URL; private String subject = "TOOL.DEFAULT"; private Destination destination = null; private Connection connection = null; private Session session = null; private MessageProducer producer = null; /** /** System.out.println("Producer:->Sending message: "); for (int i = 0; i < MAX_SEND_TIMES; i++) { System.out.println("Producer:->Message sent complete!"); /** import javax.jms.*; import org.apache.activemq.*; public class ActiveMQConsumer implements MessageListener { private String user = ActiveMQConnection.DEFAULT_USER; private String password = ActiveMQConnection.DEFAULT_PASSWORD; private String url = ActiveMQConnection.DEFAULT_BROKER_URL; private String subject = "TOOL.DEFAULT"; private Destination destination = null; private Connection connection = null; private Session session = null; private MessageConsumer consumer = null; /** /** /** /** TextMessage txtMsg = (TextMessage) message; // receive the first message RECEIVED_MSG_NUM++; // print one String when received 1000 message // receive the last message } else { 3. JMS消息收发测试主类:ActiveMQTest.java public class ActiveMQTest { /** // 延时5000ms后关闭连接 为了与JBossMQ进行性能对比测试,下面把JBossMQ收发消息的测试代码也一并附上。 1. JMS消息发送类 JBossMQProducer.java 的源码如下: import java.util.Properties; import javax.jms.*; public class JbossMQProducer { private Destination destination = null; private Connection connection = null; private Session session = null; private MessageProducer producer = null; /** InitialContext jmsContext = new InitialContext(props); /** long beginTime = System.currentTimeMillis(); System.out.println("Producer:->Sending message: "); for (int i = 0; i < MAX_SEND_TIMES; i++) { System.out.println("Producer:->Message sent complete!"); /** 2. JMS消息接收类 JBossMQConsumer.java 的源码如下 import java.util.Properties; import javax.jms.*; public class JbossMQConsumer implements MessageListener { private Destination destination = null; private Connection connection = null; private Session session = null; private MessageConsumer consumer = null; /** // get naming context connection = connectionFactory.createConnection(); /** /** /** TextMessage txtMsg = (TextMessage) message; // receive the first message RECEIVED_MSG_NUM++; //print one String when received 1000 message // receive the last message 3. JMS消息收发测试主类:JBossMQTest.java /** public class JbossMQTest { /** 以上是把ActiveMQ集成到JBoss以后,对ActiveMQ和JBossMQ进行性能对比测试的源代码。 参考文献:
JMS消息发送类:ActiveMQProducer.java
JMS消息接收类:ActiveMQConsumer.java
JMS消息收发测试主类:ActiveMQTest.java
下面分别介绍这三个类。
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author mqboss
* @version 1.0
*/
public final static int MAX_SEND_TIMES = 100;
* 初始化
*
* @throws JMSException
* @throws java.lang.Exception
*/
private void initialize() throws JMSException, Exception {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
user, password, url);
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(subject);
producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
connection.start();
}
* 发送消息
*
* @param message
* @throws JMSException
* @throws java.lang.Exception
*/
public void produceMessage(String message) throws JMSException, Exception {
initialize();
TextMessage msg = session.createTextMessage(message);
long beginTime = System.currentTimeMillis();
producer.send(msg);
if ((i + 1) % 1000 == 0) {
System.out.println("This is the " + i + " message!");
}
}
long endTime = System.currentTimeMillis();
long executeTime = endTime - beginTime;
System.out.println("ActiveMQ send" + MAX_SEND_TIMES + " messages used: "
+ executeTime + " ms");
}
* 关闭连接
*
* @throws JMSException
*/
public void close() throws JMSException {
System.out.println("Producer:->Closing connection");
if (producer != null) {
producer.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
}
2. JMS消息接收类 ActiveMQConsumer.java 的源码如下
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author mqboss
* @version 1.0
*/
public static int RECEIVED_MSG_NUM = 0;
long beginReceiveTime = 0;
long endReceiveTime = 0;
long receiveDuringTime = 0;
* 初始化
*
* @throws JMSException
* @throws java.lang.Exception
*/
private void initialize() throws JMSException, Exception {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
user, password, url);
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(subject);
consumer = session.createConsumer(destination);
}
* 接收消息
*
* @throws JMSException
* @throws java.lang.Exception
*/
public void consumeMessage() throws JMSException, Exception {
initialize();
connection.start();
System.out.println("Consumer:->Begin listening...");
// 设置消息监听
consumer.setMessageListener(this);
}
* 关闭连接
*
* @throws JMSException
*/
public void close() throws JMSException {
System.out.println("Consumer:->Closing connection");
if (consumer != null) {
consumer.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
* 收到消息的处理
*
* @param message
*/
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
String msg = txtMsg.getText();
if (RECEIVED_MSG_NUM == 0) {
beginReceiveTime = System.currentTimeMillis();
}
if ((RECEIVED_MSG_NUM + 1) % 1000 == 0) {
System.out.println("Consumer:->Received: "
+ RECEIVED_MSG_NUM);
}
if (RECEIVED_MSG_NUM == ActiveMQProducer.MAX_SEND_TIMES - 1) {
endReceiveTime = System.currentTimeMillis();
receiveDuringTime = endReceiveTime - beginReceiveTime;
System.out.println("ActiveMQ Receive "
+ ActiveMQProducer.MAX_SEND_TIMES
+ " messages used: " + receiveDuringTime + " ms");
}
System.out.println(System.currentTimeMillis()
+ "Consumer:->Received: " + message);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author mqboss
* @version 1.0
*/
import javax.jms.*;
*
* @param args
* @throws JMSException
* @throws java.lang.Exception
*/
public static void main(String[] args) throws JMSException, Exception {
ActiveMQConsumer consumer = new ActiveMQConsumer();
ActiveMQProducer producer = new ActiveMQProducer();
char[] tempChars=new char[1024];
for(int i=0;i<1024;i++){
tempChars[i]='a';
}
String tempMsg=String.valueOf(tempChars);
// 开始监听
consumer.consumeMessage();
producer.produceMessage(tempMsg);
producer.close();
Thread.sleep(5000);
consumer.close();
}
}
为了保证测试代码的一致性,JBossMQ性能测试的代码也包含3个文件,分别是:
JMS消息发送类:JBossMQProducer.java
JMS消息接收类:JBossMQConsumer.java
JMS消息收发测试主类:JBossMQTest.java
下面分别介绍这三个类。
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author mqboss
* @version 1.0
*/
import javax.naming.Context;
import javax.naming.InitialContext;
public final static int MAX_SEND_TIMES = 100;
* 初始化
*
* @throws JMSException
* @throws java.lang.Exception
*/
private void initialize() throws JMSException, Exception {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming");
props.put(Context.PROVIDER_URL, "localhost:1099");
ConnectionFactory connectionFactory = (ConnectionFactory) jmsContext
.lookup("ConnectionFactory");
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = (Queue) jmsContext.lookup("queue/A");
producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
connection.start();
}
* 发送消息
*
* @param message
* @throws JMSException
* @throws java.lang.Exception
*/
public void produceMessage(String message) throws JMSException, Exception {
initialize();
TextMessage msg = session.createTextMessage(message);
if ((i + 1) % 1000 == 0) {
System.out.println("This is the " + i + " message!");
}
producer.send(msg);
}
long endTime = System.currentTimeMillis();
long executeTime = endTime - beginTime;
System.out.println("JbossMQ send" + MAX_SEND_TIMES + " messages used: "
+ executeTime + " ms");
}
* 关闭连接
*
* @throws JMSException
*/
public void close() throws JMSException {
System.out.println("Producer:->Closing connection");
if (producer != null) {
producer.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
}
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author mqboss
* @version 1.0
*/
import javax.naming.*;
public static int RECEIVED_MSG_NUM = 0;
long beginReceiveTime = 0;
long endReceiveTime = 0;
long receiveDuringTime = 0;
* 初始化
*
* @throws JMSException
* @throws java.lang.Exception
*/
private void initialize() throws JMSException, Exception {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming");
props.put(Context.PROVIDER_URL, "localhost:1099");
InitialContext jmsContext = new InitialContext(props);
ConnectionFactory connectionFactory = (ConnectionFactory) jmsContext
.lookup("ConnectionFactory");
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = (Queue) jmsContext.lookup("queue/A");
consumer = session.createConsumer(destination);
}
* 接收消息
*
* @throws JMSException
* @throws java.lang.Exception
*/
public void consumeMessage() throws JMSException, Exception {
initialize();
connection.start();
System.out.println("Consumer:->Begin listening...");
// 设置监听
consumer.setMessageListener(this);
}
* 关闭连接
*
* @throws JMSException
*/
public void close() throws JMSException {
System.out.println("Consumer:->Closing connection");
if (consumer != null) {
consumer.close();
}
if (session != null) {
session.close();
}
if (connection != null) {
connection.close();
}
}
* 处理消息
*
* @param message
*/
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
String msg = txtMsg.getText();
if (RECEIVED_MSG_NUM == 0) {
beginReceiveTime = System.currentTimeMillis();
}
if ((RECEIVED_MSG_NUM + 1) % 1000 == 0) {
System.out.println("Consumer:->Received: "
+ RECEIVED_MSG_NUM);
}
if (RECEIVED_MSG_NUM == JbossMQProducer.MAX_SEND_TIMES - 1) {
endReceiveTime = System.currentTimeMillis();
receiveDuringTime = endReceiveTime - beginReceiveTime;
System.out.println("JbossMQ receive "
+ JbossMQProducer.MAX_SEND_TIMES
+ " messages used: " + receiveDuringTime + " ms");
}
} else {
System.out.println(System.currentTimeMillis()
+ "Consumer:->Received: " + message);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
import javax.jms.JMSException;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author mqboss
* @version 1.0
*/
*
* @param args
* @throws JMSException
* @throws java.lang.Exception
*/
public static void main(String[] args) throws JMSException, Exception {
JbossMQConsumer consumer = new JbossMQConsumer();
JbossMQProducer producer = new JbossMQProducer();
char[] tempChars = new char[1024];
for (int i = 0; i < 1024; i++) {
tempChars[i] = 'a';
}
String tempMsg = String.valueOf(tempChars);
// 启动消息监听
consumer.consumeMessage();
producer.produceMessage(tempMsg);
producer.close();
// 5000ms后关闭连接
Thread.sleep(5000);
consumer.close();
}
}
很显然,以上源代码基本一致,所以性能测试结果可以很好的说明ActiveMQ和JBossMQ的性能对比情况。
[1]ActiveMQ的一个简单示例
发表评论
-
Advanced Message Queuing Protocol ( 3 ) 逻辑模型
2011-05-07 22:04 1177Sessions 建立在不同容器中的两个节点的链接必 ... -
Advanced Message Queuing Protocol ( 2 ) 逻辑模型
2011-05-07 22:04 974Nodes and Links 一个AMQP的网络包 ... -
Advanced Message Queuing Protocol ( 1 ) 概述
2011-05-07 22:03 1205The Advanced Message Queuing ... -
Apache Qpid (1) -- build
2011-05-07 22:02 1946http://qpid.apache.org/index.h ... -
ActiveMQ技术预研报告【转】
2011-04-22 14:44 1913ActiveMQ技术预研报告 研究部朱懋柱 1.文 ... -
ActiveMQ与MSMQ的异同【转】
2011-04-22 14:14 1917.NET下发送和接收ActiveMQ A:下载Act ... -
ActiveMQ在C#中的应用
2011-04-21 16:18 1213ActiveMQ 是个好东东,不必多说。ActiveM ... -
ActiveMQ实战之 Queue点对点消息【转】
2011-04-18 23:15 1210对于此类消息,其实就是指使用JMS中的发P2P(点对点)消息模 ... -
ActiveMQ实战之 Topic发布订阅消息【转】
2011-04-18 23:14 1192对于此类消息,其实就是指使用JMS中的发布订阅消息模型的消息, ... -
ActiveMQ实战(4):JMS的安全性【转】
2011-04-18 22:52 1233对于JMS服务的安全控制,ActiveMQ提供两种方式:简单授 ... -
ActiveMQ实战(3):Web控制台的安全性【转】
2011-04-18 22:52 1340安装好ActiveMQ后,其默认没有任何安全控制,任何人都可以 ... -
ActiveMQ实战(2):测试其是否正常工作【转】
2011-04-18 22:51 1206既然ActiveMQ安装好了并启动成功,接下来我们就编写一个测 ... -
ActiveMQ实战(1):安装与运行【转】
2011-04-18 22:45 1789ActiveMQ的项目主页:http://activemq.a ... -
[转] JMS开源比较
2011-03-30 23:46 1187Java开源JMS消息中间件 ... -
activemq5.2发送和接收BlobMessage简单实例
2011-03-29 23:45 1170package com.work.activemq ... -
ActiveMQ 实例
2011-03-29 23:21 10442009-06-24 ProducerTool.java ... -
activemq持久化配置,设置为主从模式(带复制的主从模式,应用mysql数据库)
2011-03-29 09:12 1824activemq持久化配置,设置为主从模式(带复制的主从模 ... -
ActiveMQ持久化消息的三种方式
2011-03-29 09:11 13691:前言 这一段给公司开发消息总线有机会研究A ... -
什么是JMS(Java消息服务)
2011-03-28 19:28 903在不同系统之间交换信息的一大障碍是如何在精确交换和格式化数据方 ... -
消息中间件和JMS
2011-03-28 19:26 795当前,CORBA、DCOM、RMI等R ...
相关推荐
赠送jar包:activemq-protobuf-1.1.jar; 赠送原API文档:activemq-protobuf-1.1-javadoc.jar; 赠送源代码:activemq-protobuf-1.1-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
ActiveMQ-CPP Library 3.9.5是一款专为C++开发者设计的、用于与Apache ActiveMQ集成的库,它提供了丰富的API接口,使得在C++环境中能够方便地发送和接收消息。这个版本的库文件特别针对Visual Studio 2015和2017进行...
同时,完整的API文档和示例代码可以帮助快速理解和使用ActiveMQ-CPP库。 总之,ActiveMQ-CPP库3.9.5版本为C++开发者提供了强大的消息传递功能,无论是简单的点对点通信还是复杂的发布/订阅模式,都能灵活应对。通过...
这个“apache-activemq-5.9.0-bin”压缩包包含了Apache ActiveMQ 5.9.0版本的完整二进制文件,用于在本地或网络环境中安装和运行。 Apache ActiveMQ的核心功能包括: 1. **消息队列**:ActiveMQ支持多种消息模式,...
这个"apache-activemq-5.15.8-bin.zip"文件包含了ActiveMQ的可执行版本,用于在本地计算机上安装和运行ActiveMQ服务。 首先,我们需要了解ActiveMQ的核心概念。它是一个消息代理,扮演着消息生产者与消费者之间的...
activemq-all-5.2.0.JAR包,欢迎下载。编写java中间件的时候会用到。这是activemq实现的jms中间件。希望能帮助到你。
其实activemq-web-console完全可以和activemq-broker分开来部署。 activemq-web-console包含3个apps, 1.一个是admin,用来显示和管理所有的queue、topic、connection等等。 2.一个是demo,有一些使用jms和activemq...
这个压缩包"apache-activemq-5.8.0-bin.zip"包含了ActiveMQ 5.8.0版本的二进制发行版,供用户在本地计算机上安装和运行。 1. **Apache ActiveMQ简介** - Apache ActiveMQ是业界广泛使用的消息代理,提供可靠的消息...
赠送jar包:activemq-core-5.7.0.jar; 赠送原API文档:activemq-core-5.7.0-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
这个"apache-activemq-5.14.3-bin.zip"压缩包包含了在Windows环境下部署和运行ActiveMQ所需的所有文件。让我们深入探讨一下这个版本的ActiveMQ及其在Java消息服务中的应用。 首先,Java消息服务(JMS)是一种标准...
解压后,你会得到一个名为`apache-activemq-5.13.2`的目录,里面包含了所有必要的可执行文件和配置文件。这个目录结构包括了`bin`、`conf`、`lib`等子目录,分别用于存放可执行脚本、配置文件和依赖库。 在`bin`...
在提供的压缩包"activemq-web-4.0-M3.jar.zip"中,有两个主要文件:"activemq-web-4.0-M3.jar"和"license.txt"。"activemq-web-4.0-M3.jar"是核心的Java档案文件,包含了运行ActiveMQ Web UI所需的所有类和资源。这...
activemq-protobuf-1.1.jar;activemq-protobuf-1.1.jar
赠送jar包:activemq-core-5.7.0.jar; 赠送原API文档:activemq-core-5.7.0-javadoc.jar; 赠送源代码:activemq-core-5.7.0-sources....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载 activemq-all-5.8.0.jar 下载
activemq-all-5.6.0.jar activemq-all-5.6.0.jar activemq-all-5.6.0.jar activemq-all-5.6.0.jar
使用`activemq-all-5.2.0.jar`,开发者可以通过JMS API来创建连接、生产者、消费者和消息。此外,ActiveMQ还提供了XML配置文件,用于设置服务器、网络连接、安全策略等。 **部署和运行** 在Java环境中,将`activemq...
赠送jar包:activemq-protobuf-1.1.jar; 赠送原API文档:activemq-protobuf-1.1-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
标题中的"activemq-rar-5.10.0.rar"指的是Apache ActiveMQ的RAR资源包,版本为5.10.0。ActiveMQ是业界广泛使用的开源消息中间件,它遵循Java Message Service (JMS) 规范,提供高可靠的消息传递服务,能够帮助应用...
activemq-all-5.2.0-sources.jar