ActiveMQ入门案例

简介: ActiveMQ入门案例


ActiveMQ应用

1、ActiveMQ中常用API介绍

下述API都是接口类型,由定义在javax.jms包中.是JMS标准接口定义.

截屏2021-12-02 上午9.19.58.png

2、JMS-Hello

2.1 导入相关的jar包

2019021616273359.png

<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all -->
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.11.1</version>
</dependency>

2.2 创建生产者代码

/**
 * ActiveMQ中的生产者(Producer)
 * @author dengp
 *
 */
public class HelloProducer {
  public void sendhello2ActiveMq(String messageText) {
    // 连接工厂,用于创建Connection对象
    ConnectionFactory factory = null;
    // activeMQ 连接对象
    Connection conn = null;
    // 一次和ActiveMQ的持久会话对象
    Session session = null;
    // 目的地
    Destination destination = null;
    // 消息发送者
    MessageProducer producer = null;
    // 封装消息的对象
    Message message = null;
    try {
      /*
       * 创建链接工厂 ActiveMQConnectionFactory -由ActiveMQ实现的ConnectionFactory接口实现类. 
       * 构造方法: public ActiveMQConnectionFactory(String userName, String password,
       * String brokerURL) 
       * userName - 访问ActiveMQ服务的用户名,用户名可以通过jetty-realm.properties配置文件配置. 
       * password - 访问ActiveMQ服务的密码,密码可以通过jetty-realm.properties配置文件配置. 
       * brokerURL -访问ActiveMQ服务的路径地址. 路径结构为 - 协议名://主机地址:端口号 此链接基于TCP/IP协议.
       */
      factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.88.121:61616");
      // 创建链接对象
      conn = factory.createConnection();
      // 启动连接对象
      conn.start();
      /*
       * 创建会话对象 
       * 方法 - connection.createSession(boolean transacted, int acknowledgeMode); 
       * transacted - 是否使用事务, 
       * 可选值为true|false 
       * true - 使用事务, 当设置此变量值, 则acknowledgeMode参数无效, 
       * 建议传递的acknowledgeMode参数值为 Session.SESSION_TRANSACTED 
       * false - 不使用事务, 设置此变量值,则acknowledgeMode参数必须设置. 
       * acknowledgeMode - 消息确认机制, 可选值为:
       * Session.AUTO_ACKNOWLEDGE - 自动确认消息机制 
       * Session.CLIENT_ACKNOWLEDGE -客户端确认消息机制 
       * Session.DUPS_OK_ACKNOWLEDGE - 有副本的客户端确认消息机制
       */
      session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
      // 创建目的地,目的地的命名既是队列的命令
      destination = session.createQueue("MQ-Hello");
      // 创建消息生成者, 创建的消息生成者与某目的地对应, 即方法参数目的地.
      producer = session.createProducer(destination);
      // 创建消息对象,创建一个文本消息对象。此消息对象中保存要传递的文本数据.
      message = session.createTextMessage(messageText);
      // 发送消息
      producer.send(message);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("访问ActiveMQ服务发生错误!!");
    } finally {
      try {
        // 回收消息发送者资源
        if (null != producer)
          producer.close();
      } catch (JMSException e) {
        e.printStackTrace();
      }
      try {
        // 回收会话资源
        if (null != session)
          session.close();
      } catch (JMSException e) {
        e.printStackTrace();
      }
      try {
        // 回收链接资源
        if (null != conn)
          conn.close();
      } catch (JMSException e) {
        e.printStackTrace();
      }
    }
  }
}


2.3创建消费者代码

/**
 * ActiveMQ中的消费者(Consumer)
 * @author dengp
 *
 */
public class HelloConsumer {
  public void reciveHelloFormActiveMq() {
    // 连接工厂,用于创建Connection对象
    ConnectionFactory factory = null;
    // activeMQ 连接对象
    Connection conn = null;
    // 一次和ActiveMQ的持久会话对象
    Session session = null;
    // 目的地
    Destination destination = null;
    // 消息消费者
    MessageConsumer consumer = null;
    // 封装消息的对象
    Message message = null;
    try {
      /*
       * 创建链接工厂 ActiveMQConnectionFactory -由ActiveMQ实现的ConnectionFactory接口实现类. 
       * 构造方法: public ActiveMQConnectionFactory(String userName, String password,
       * String brokerURL) 
       * userName - 访问ActiveMQ服务的用户名,用户名可以通过jetty-realm.properties配置文件配置. 
       * password - 访问ActiveMQ服务的密码,密码可以通过jetty-realm.properties配置文件配置. 
       * brokerURL -访问ActiveMQ服务的路径地址. 路径结构为 - 协议名://主机地址:端口号 此链接基于TCP/IP协议.
       */
      factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.88.121:61616");
      // 创建链接对象
      conn = factory.createConnection();
      // 启动连接对象
      conn.start();
      /*
       * 创建会话对象 
       * 方法 - connection.createSession(boolean transacted, int acknowledgeMode); 
       * transacted - 是否使用事务, 
       * 可选值为true|false 
       * true - 使用事务, 当设置此变量值, 则acknowledgeMode参数无效, 
       * 建议传递的acknowledgeMode参数值为 Session.SESSION_TRANSACTED 
       * false - 不使用事务, 设置此变量值,则acknowledgeMode参数必须设置. 
       * acknowledgeMode - 消息确认机制, 可选值为:
       * Session.AUTO_ACKNOWLEDGE - 自动确认消息机制 
       * Session.CLIENT_ACKNOWLEDGE -客户端确认消息机制 
       * Session.DUPS_OK_ACKNOWLEDGE - 有副本的客户端确认消息机制
       */
      session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
      // 创建目的地,目的地的命名既是队列的命令
      destination = session.createQueue("MQ-Hello");
      // 创建消息消费者, 创建的消息消费者与某目的地对应, 即方法参数目的地.
      consumer = session.createConsumer(destination);
      // 从ActiveMQ中获取消息
      message = consumer.receive();
      String textMessage = ((TextMessage)message).getText();
      System.out.println("ActiveMQ获取的消息是:"+textMessage);
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("访问ActiveMQ服务发生错误!!");
    } finally {
      try {
        // 回收消息发送者资源
        if (null != consumer)
          consumer.close();
      } catch (JMSException e) {
        e.printStackTrace();
      }
      try {
        // 回收会话资源
        if (null != session)
          session.close();
      } catch (JMSException e) {
        e.printStackTrace();
      }
      try {
        // 回收链接资源
        if (null != conn)
          conn.close();
      } catch (JMSException e) {
        e.printStackTrace();
      }
    }
  }
}

2.4测试代码

生产者

public static void main(String[] args) {
  HelloProducer pro = new HelloProducer();
  pro.sendhello2ActiveMq("你好啊...");
}

消费者

public static void main(String[] args) {
  HelloConsumer con = new HelloConsumer();
  con.reciveHelloFormActiveMq();
}

先启动消费者,再启动生产者,查看效果

消费者启动后阻塞状态,等待消息

20190216172507433.png

web页面查看效果

20190216172547971.png

启动生产者

20190216172652271.png2019021617280210.png20190216173140875.png截屏2021-12-02 上午9.23.02.png

总结

ActiveMQ的消息发送的流程如下:

20190216194850431.png

相关文章
|
消息中间件 Java Linux
activeMQ入门安装
activeMQ入门安装
260 0
activeMQ入门安装
|
5月前
|
消息中间件 数据可视化 Go
Rabbitmq 搭建使用案例 [附源码]
Rabbitmq 搭建使用案例 [附源码]
48 0
|
消息中间件 存储 网络协议
从原理到实战,手把手教你在项目中使用RabbitMQ
RabbitMQ 的文章之前写过,但是当时给的示例是 Demo 版的,这篇文章主要是结合之前写的理论知识,将 RabbitMQ 集成到技术派项目中。 话不多说,上文章目录: 下面我们先回顾一下理论知识,如果对这块知识已经清楚的同学,可以直接跳到实战部分。 1. 消息队列 1.1 消息队列模式 消息队列目前主要 2 种模式,分别为“点对点模式”和“发布/订阅模式”。 点对点模式 一个具体的消息只能由一个消费者消费,多个生产者可以向同一个消息队列发送消息,但是一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息。 需要额外注意的是,如果消费者
624 5
|
6月前
|
消息中间件 存储 缓存
【RabbitMQ教程】第二章 —— RabbitMQ - 简单案例(下)
【RabbitMQ教程】第二章 —— RabbitMQ - 简单案例(下)
|
6月前
|
消息中间件 Java
【RabbitMQ教程】第二章 —— RabbitMQ - 简单案例(上)
【RabbitMQ教程】第二章 —— RabbitMQ - 简单案例
|
消息中间件 Java Linux
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
消息中间件系列教程(02) -ActiveMQ -安装&入门案例
60 0
|
消息中间件 网络协议 Java
RabbitMQ消息中间件学习3:快速入门案例
rabbitmq是spring一个公司的,所以很多公司 企业选择用rabbitmq。
RabbitMQ消息中间件学习3:快速入门案例
|
消息中间件 SQL Java
ActiveMQ系列:一个MQ产品的基础知识
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品、不同开发语言等条件的限制。
223 0
ActiveMQ系列:一个MQ产品的基础知识
|
消息中间件 网络协议 Java