ActiveMQ(2) ActiveMQ创建HelloWorld

启动ActiveMQ:

 请参见:ActiveMQ(1) 初识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>
pom.xml

创建消息生产者:

 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 }
Sender.Java

 创建消息消费者:

 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 }
Receiver.Java

运行消息生产者,控制台输出:

ActiveMQ消息页:

消息生产者创建了一个名称为 queue1的消息队列, 队列中有10条消息待消费, 通过Browse查询消息详情。 

 

这些队列中的消息被删除, 消息消费者则无法消费此消息。

运行消息消费者, 控制台输出:

 

 消息页:

 

原文地址:https://www.cnblogs.com/chinda/p/7977856.html