启动ActiveMQ:
创建Maven工程:
pom文件:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>com.itdoc.learn</groupId> 6 <artifactId>activemq</artifactId> 7 <version>1.0-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 10 <name>activemq</name> 11 <url>http://maven.apache.org</url> 12 13 <properties> 14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 15 </properties> 16 17 <dependencies> 18 <dependency> 19 <groupId>org.apache.activemq</groupId> 20 <artifactId>activemq-all</artifactId> 21 <version>5.15.2</version> 22 </dependency> 23 <dependency> 24 <groupId>junit</groupId> 25 <artifactId>junit</artifactId> 26 <version>3.8.1</version> 27 <scope>test</scope> 28 </dependency> 29 </dependencies> 30 </project>
创建消息生产者:
1 /** 2 * @filename Sender.Java 3 * @desc 消息生产者 4 * @blog http://www.cnblogs.com/goodcheap 5 * @author Chinda Wang 6 * @create 2017-12-02 16:06 7 * @version v1.0 8 * @copyright Copyright © 2017 达华信息科技有限公司 版权所有 9 * @modifyhistory 2017-12-02 16:06 10 * @modifyauthor Chinda Wang 11 * @modifydesc 12 */ 13 package com.itdoc.learn.activemq.helloworld; 14 15 import org.apache.activemq.ActiveMQConnectionFactory; 16 17 import javax.jms.*; 18 19 /** 20 * @author Chinda Wang 21 * @desc 消息生产者 22 * @create 2017-12-02 16:06 23 */ 24 public class Sender { 25 26 public static void main(String[] args) throws Exception { 27 // 第一步: 建立 ConnectionFactory 工厂对象, 需要填入用户名、密码、以及要连接的地址, 均使用默认即可, 默认端口为"tcp//loclhost:61616" 28 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( 29 ActiveMQConnectionFactory.DEFAULT_USER, 30 ActiveMQConnectionFactory.DEFAULT_PASSWORD, 31 "tcp://localhost:61616"); 32 // 第二步: 通过ConnectionFactory工厂对象创建一个Connection连接, 并且调用Connection的start方法开启连接, Connection默认是关闭的。 33 Connection connection = connectionFactory.createConnection(); 34 connection.start(); 35 /* 36 * 第三步: 通过Connection对象创建Session会话(上下文环境对象), 用于接收消息, 参数位置1为是否启用事务, 参数位置2为签收模式, 37 * 一般设置为自动签收。 38 */ 39 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); 40 /* 41 * 第四步: 通过Session创建Destination对象, 指的是一个客户端用来指定生产消息目标和消费消息来源的对象, 在PTP模式中, Destination 42 * 被称作为Queue, 即队列; 在Pub/Sub模式, Destination被称作Topic, 即主题。在程序中可以使用多个Queue和Topic。 43 */ 44 Destination destination = session.createQueue("queue1"); 45 // 第五步: 需要通过Session对象创建消息的发送和接收对象(生产者和消费者)MessageProducer/MessageConsumer 46 MessageProducer producer = session.createProducer(destination); 47 // 第六步: 可以使用MessageProducer的setDeliveryMode()方法为其设置持久化特性和非持久化特性(DeliveryMode)。 48 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 49 /* 50 * 第七步: 使用JMS规范的TextMessage形式创建数据(通过Session对象), 并用MessageProducer的send()方法发送数据。同理, 客户端使用 51 * receive()方法进行接收数据。 52 */ 53 TextMessage textMessage = session.createTextMessage(); 54 for (int i = 1; i <= 10; i++) { 55 textMessage.setText("I am Message! id: " + i); 56 producer.send(textMessage); 57 System.out.println("生产者: " + textMessage.getText()); 58 } 59 // 第八步: 关闭Connection连接 60 if (connection != null) { 61 connection.close(); 62 } 63 } 64 }
创建消息消费者:
1 /** 2 * @filename Receiver.Java 3 * @desc 消息消费者 4 * @blog http://www.cnblogs.com/goodcheap 5 * @author Chinda Wang 6 * @create 2017-12-02 16:07 7 * @version v1.0 8 * @copyright Copyright © 2017 达华信息科技有限公司 版权所有 9 * @modifyhistory 2017-12-02 16:07 10 * @modifyauthor Chinda Wang 11 * @modifydesc 12 */ 13 package com.itdoc.learn.activemq.helloworld; 14 15 import org.apache.activemq.ActiveMQConnectionFactory; 16 17 import javax.jms.*; 18 19 /** 20 * @desc 消息消费者 21 * @author Chinda Wang 22 * @create 2017-12-02 16:07 23 */ 24 public class Receiver { 25 26 public static void main(String[] args) throws Exception { 27 // 第一步: 建立 ConnectionFactory 工厂对象, 需要填入用户名、密码、以及要连接的地址, 均使用默认即可, 默认端口为"tcp//loclhost:61616" 28 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( 29 ActiveMQConnectionFactory.DEFAULT_USER, 30 ActiveMQConnectionFactory.DEFAULT_PASSWORD, 31 "tcp://localhost:61616"); 32 // 第二步: 通过ConnectionFactory工厂对象创建一个Connection连接, 并且调用Connection的start方法开启连接, Connection默认是关闭的。 33 Connection connection = connectionFactory.createConnection(); 34 connection.start(); 35 /* 36 * 第三步: 通过Connection对象创建Session会话(上下文环境对象), 用于接收消息, 参数位置1为是否启用事务, 参数位置2为签收模式, 37 * 一般设置为自动签收。 38 */ 39 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); 40 /* 41 * 第四步: 通过Session创建Destination对象, 指的是一个客户端用来指定生产消息目标和消费消息来源的对象, 在PTP模式中, Destination 42 * 被称作为Queue, 即队列; 在Pub/Sub模式, Destination被称作Topic, 即主题。在程序中可以使用多个Queue和Topic。 43 */ 44 Destination destination = session.createQueue("queue1"); 45 // 第五步: 需要通过Session对象创建消息的发送和接收对象(生产者和消费者)MessageProducer/MessageConsumer 46 MessageConsumer consumer = session.createConsumer(destination); 47 /* 48 * 第六步: 使用JMS规范的TextMessage形式创建数据(通过Session对象), 并用MessageProducer的send()方法发送数据。同理, 客户端使用 49 * receive()方法进行接收数据。 50 */ 51 while (true) { 52 TextMessage msg = (TextMessage) consumer.receive(); 53 if (msg == null) { 54 break; 55 } 56 System.out.println("收到内容: " + msg.getText()); 57 } 58 // 第七步: 关闭Connection连接 59 if (connection != null) { 60 connection.close(); 61 } 62 } 63 }
运行消息生产者,控制台输出:
ActiveMQ消息页:
消息生产者创建了一个名称为 queue1的消息队列, 队列中有10条消息待消费, 通过Browse查询消息详情。
这些队列中的消息被删除, 消息消费者则无法消费此消息。
运行消息消费者, 控制台输出:
消息页: