ActiveMQ入门实例



1.下载的ActiveMQ的

去官方网站下载:http//activemq.apache.org/

2.运行的ActiveMQ的

解压缩apache-activemq-5.5.1-bin.zip,然后双击Apache的ActiveMQ的-5.5.1 \ BIN \ activemq.bat运行ActiveMQ的程序。

启动ActiveMQ以后,登陆:http:// localhost:8161 / admin /,创建一个Queue,命名为FirstQueue。

3.创建Eclipse中的项目并运行

创建项目:ActiveMQ的-5.5,并导入Apache的ActiveMQ的-5.5.1 \ LIB目录下需要用到的JAR文件,项目结构如下图所示:

ActiveMQ入门实例

3.1.Sender.java

ActiveMQ入门实例
 com.xuwei.activemq; 

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
private static final int SEND_NUMBER = 5;

public static void main(String [] args){
// ConnectionFactory:连接工厂,JMS用它创建连接 ConnectionFactory connectionFactory; // Connection:JMS客户端到JMS Provider的连接 Connection connection = null ; // Session:一个发送或接收消息的线程 Session session; // Destination:消息的目的地;消息发送给谁。 目标目的地; // MessageProducer:消息发送者 MessageProducer producer; // TextMessage消息; // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER,













ActiveMQConnection.DEFAULT_PASSWORD,
“TCP://本地主机:61616”);
尝试 {
// 构造从工厂得到连接对象 连接= connectionFactory.createConnection(); // 启动 connection.start(); // 获取操作连接 session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 获取会话注意参数值xingbo.xu-queue是一个服务器的队列,必须在ActiveMq的控制台中配置 destination = session.createQueue(“FirstQueue”); //得到消息生成者【发送者】 producer = session.createProducer(destination); // 设置不持久化,此处学习,实际根据项目决定











producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 构造消息,此处写死,项目就是参数,或者方法获取 的sendMessage(会话,制作人); session.commit(); } 捕获(例外五){ e.printStackTrace(); } finally { try { ifnull!= connection) connection.close(); } catch(Throwable ignore){ } } } public static void sendMessage(Session session,MessageProducer producer)throws例外{















forint i = 1; 我<= SEND_NUMBER; {
TextMessage message = session
.createTextMessage(“ActiveMq发送的消息”+ i);
// 发送消息到目的地方 System.out.println(“发送消息:”+“ActiveMq发送的消息”+ i); producer.send(消息); } } }




ActiveMQ入门实例

3.2.Receiver.java

ActiveMQ入门实例
 com.xuwei.activemq; 

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Receiver {
public static void main(String [] args){
// ConnectionFactory:连接工厂,JMS用它创建连接
ConnectionFactory connectionFactory;
//连接:JMS客户端到JMS Provider的连接
Connection connection = null ;
// Session:一个发送或接收消息的线程
Session session;
// Destination:消息的目的地;消息发送给谁。
目标目的地;
// 消费者,消息接收者
MessageConsumer consumer;
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
“tcp:// localhost:61616”);
尝试 {
// 构造从工厂得到连接对象
connection = connectionFactory.createConnection();
// 启动
connection.start();
// 获取操作连接
session = connection.createSession(Boolean.FALSE,
Session.AUTO_ACKNOWLEDGE);
// 获取session注意参数值xingbo.xu-queue是一个服务器的队列,必须在ActiveMq的控制台中配置
destination = session.createQueue(“FirstQueue”);
consumer = session.createConsumer(destination);
whiletrue){
// 设置接收者接收消息的时间,为了便于测试,这里谁定为100s
TextMessage message =(TextMessage)consumer.receive(100000);
如果null!= message){
System.out.println(“收到消息”+ message.getText());
}else {
break ;
}
}
} catch(Exception e){
e.printStackTrace();
} finally {
try {
ifnull!= connection)
connection.close();
} catch(Throwable ignore){
}
}
}
}
ActiveMQ入门实例

4.注意事项

  1. 最后接收者跟发送者在不同的机器上测试
  2. 项目所引用的JAR最后在ActiveMQ的下的LIB中找,这样不会出现版本冲突。

5.测试过程

因为是在单机上测试,所以需要开启两个蚀,每一个蚀都有自身的工作区。我们在eclipse1中运行的接收机,在eclipse2中运行发件人。

刚开始eclipse1中运行接收机以后控制台介面没有任何信息,在eclipse2中运行发件人以后,eclipse2中的控制台显示如下信息:

发送消息:ActiveMQ的发送的消息1
发送消息:ActiveMQ的发送的消息2
发送消息:ActiveMQ的发送的消息3
发送消息:ActiveMQ的发送的消息4
发送消息:ActiveMQ的发送的消息5

而回到eclipse1中发现控制台界面出现如下信息:

收到消息的ActiveMQ发送的消息1
收到消息的ActiveMQ发送的消息2
收到消息的ActiveMQ发送的消息3
收到消息的ActiveMQ发送的消息4
收到消息的ActiveMQ发送的消息5

 PS:2012-2-27

今天发现测试并不需要开启两个蚀,在一个蚀下页可以启动多个程序,并且有多个控制台,在上面的Receiver.java中,设置一个较大的时间,比如接收(500000),如下代码所示:

的TextMessage消息=(的TextMessage)consumer.receive(500000);

这个时候运行Receiver.java的话,会使得这个Receiver.java一直运行500秒,在蚀中可以发现:

ActiveMQ入门实例

点击那个红色方块可以手动停止运行程序。

运行玩接收机以后我们在运行发件人,在运行完发件人以后,我们要切换到接收器的控制台,如下图所示: