一、下载ActiveMQ
先下载apache-activemq-5.5-SNAPSHOT.rar,如果没有,请点击到资源下载页面进行下载
二、配置ActiveMQ
解压apache-activemq-5.5-SNAPSHOT.rar,进入conf目录,找到activemq.xml文件,找到如下行进行配置消息队列服务端口
<transportConnectors>@b@ <transportConnector name="openwire" uri="tcp://127.0.0.1:9999"/>@b@</transportConnectors>
然后启动bin目录下activemq.bat文件,效果如下图
三、测试工程
创建一个ActiveMQ测试工程,引入依赖jar包如下(复制lib目录、lib目录的web子目录及optional子目录的所有jar包到测试工程中),具体如下图所示
发送消息类Sender.java
import javax.jms.Connection;@b@import javax.jms.ConnectionFactory;@b@import javax.jms.DeliveryMode;@b@import javax.jms.Destination;@b@import javax.jms.MessageProducer;@b@import javax.jms.Session;@b@import javax.jms.TextMessage;@b@import org.apache.activemq.ActiveMQConnection;@b@import org.apache.activemq.ActiveMQConnectionFactory;@b@@b@public class Sender {@b@ @b@ private static final int SEND_NUMBER = 3;@b@@b@ public static void main(String[] args) {@b@ // ConnectionFactory :连接工厂,JMS 用它创建连接@b@ ConnectionFactory connectionFactory;@b@ // Connection :JMS 客户端到JMS Provider 的连接@b@ Connection connection = null;@b@ // Session: 一个发送或接收消息的线程@b@ Session session;@b@ // Destination :消息的目的地;消息发送给谁.@b@ Destination destination;@b@ // MessageProducer:消息发送者@b@ MessageProducer producer;@b@ // TextMessage message;@b@ // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar@b@ connectionFactory = new ActiveMQConnectionFactory(@b@ ActiveMQConnection.DEFAULT_USER,@b@ ActiveMQConnection.DEFAULT_PASSWORD,@b@ "tcp://localhost:9999");@b@ try {@b@ // 构造从工厂得到连接对象@b@ connection = connectionFactory.createConnection();@b@ // 启动@b@ connection.start();@b@ // 获取操作连接@b@ session = connection.createSession(Boolean.TRUE,@b@ Session.AUTO_ACKNOWLEDGE);@b@ // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置@b@ destination = session.createQueue("messageQueue");@b@ // 得到消息生成者【发送者】@b@ producer = session.createProducer(destination);@b@ // 设置不持久化,此处学习,实际根据项目决定@b@ producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);@b@ // 构造消息,此处写死,项目就是参数,或者方法获取@b@ sendMessage(session, producer);@b@ session.commit();@b@ } catch (Exception e) {@b@ e.printStackTrace();@b@ } finally {@b@ try {@b@ if (null != connection)@b@ connection.close();@b@ } catch (Throwable ignore) {@b@ }@b@ }@b@ }@b@@b@ @b@ public static void sendMessage(Session session, MessageProducer producer)@b@ throws Exception {@b@ for (int i = 1; i <= SEND_NUMBER; i++) {@b@ TextMessage message = session@b@ .createTextMessage("消息内容" + i);@b@ // 发送消息到目的地方@b@ System.out.println("发送消息:" + "消息内容" + i);@b@ producer.send(message);@b@ }@b@ }@b@ @b@@b@}
接受消息类Receiver.java
import javax.jms.Connection;@b@import javax.jms.ConnectionFactory;@b@import javax.jms.Destination;@b@import javax.jms.MessageConsumer;@b@import javax.jms.Session;@b@import javax.jms.TextMessage;@b@import org.apache.activemq.ActiveMQConnection;@b@import org.apache.activemq.ActiveMQConnectionFactory;@b@@b@public class Receiver {@b@ @b@ public static void main(String[] args) {@b@ // ConnectionFactory :连接工厂,JMS 用它创建连接@b@ ConnectionFactory connectionFactory;@b@ // Connection :JMS 客户端到JMS Provider 的连接@b@ Connection connection = null;@b@ // Session: 一个发送或接收消息的线程@b@ Session session;@b@ // Destination :消息的目的地;消息发送给谁.@b@ Destination destination;@b@ // 消费者,消息接收者@b@ MessageConsumer consumer;@b@ connectionFactory = new ActiveMQConnectionFactory(@b@ ActiveMQConnection.DEFAULT_USER,@b@ ActiveMQConnection.DEFAULT_PASSWORD,@b@ "tcp://localhost:9999");@b@ try {@b@ // 构造从工厂得到连接对象@b@ connection = connectionFactory.createConnection();@b@ // 启动@b@ connection.start();@b@ // 获取操作连接@b@ session = connection.createSession(Boolean.FALSE,@b@ Session.AUTO_ACKNOWLEDGE);@b@ // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置@b@ destination = session.createQueue("messageQueue");@b@ consumer = session.createConsumer(destination);@b@ while (true) {@b@ //设置接收者接收消息的时间,为了便于测试,这里谁定为100s@b@ TextMessage message = (TextMessage) consumer.receive(100000);@b@ if (null != message) {@b@ System.out.println("收到消息" + message.getText());@b@ } else {@b@ break;@b@ }@b@ }@b@ } catch (Exception e) {@b@ e.printStackTrace();@b@ } finally {@b@ try {@b@ if (null != connection)@b@ connection.close();@b@ } catch (Throwable ignore) {@b@ }@b@ }@b@ }@b@ @b@}
首先运行Sender.java类,日志脚本如下:
发送消息:消息内容1@b@发送消息:消息内容2@b@发送消息:消息内容3
再运行Receiver.java类,结果如下:
收到消息消息内容1@b@收到消息消息内容2@b@收到消息消息内容3