• 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查询消息详情。 

     

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

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

     

     消息页:

     

  • 相关阅读:
    jenkins连接Publish over SSH失败系列(一)Failed to add SSH key
    jenkins连接Publish over SSH失败系列(一)Failed to change to remote directory
    【2021-07-04】人生十三信条
    【2021-07-03】人生十三信条
    【2021-07-02】发现了成长一丝丝的痕迹
    【2021-07-01】回顾自己过往那点压力
    【2021-06-30】我现在连做梦都纯洁了
    【2021-06-29】做事情时老让自己分心
    【2021-06-28】责任要匹配得上对应的压力
    【2021-06-27】人生十三信条
  • 原文地址:https://www.cnblogs.com/chinda/p/7977856.html
Copyright © 2020-2023  润新知