使用ActiveMQ进行Java消息传递

简介: 【4月更文挑战第16天】本文介绍了ActiveMQ,一个流行的开源消息中间件,它支持JMS规范,提供持久化、事务和集群等功能。文章讲解了Java消息服务(JMS)的点对点和发布/订阅两种消息模型,并展示了如何在Java应用中集成ActiveMQ,创建生产者和消费者进行消息传递。此外,还提及了消息确认和事务在实际应用中的重要性,强调了ActiveMQ在系统解耦、可扩展性和可靠性方面的优势。

在企业级应用中,消息传递是实现系统解耦、提高可扩展性和可靠性的关键技术。ActiveMQ作为一款流行的开源消息中间件,提供了强大的消息传递功能,支持多种消息协议和客户端语言。本文将深入探讨如何在Java应用中使用ActiveMQ实现高效的消息传递。

ActiveMQ简介

ActiveMQ是Apache软件基金会下的一个开源项目,它是一个完全支持JMS 1.1和J2EE 1.4规范的消息中间件。ActiveMQ提供了丰富的特性,包括持久化、事务、集群、安全性等,使得它适用于各种规模的消息传递场景。

Java消息服务(JMS)概念

Java消息服务(Java Message Service, JMS)是一个Java平台中关于消息传递的标准API。它定义了一组用于创建、发送、接收和读取跨消息系统的消息的接口和类。JMS API分为点对点(P2P)和发布/订阅(Pub/Sub)两种消息模型。

  • 点对点(Point-to-Point):在点对点模型中,消息被发送到一个特定的队列,并由一个消费者接收。这种模型确保每个消息只有一个消费者。
  • 发布/订阅(Publish/Subscribe):在发布/订阅模型中,消息被发送到一个主题,所有订阅了这个主题的消费者都会收到消息。

ActiveMQ集成

要在Java应用中使用ActiveMQ,首先需要添加ActiveMQ的客户端依赖。对于Maven项目,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-client</artifactId>
    <version>5.16.3</version>
</dependency>

接下来,我们可以创建一个简单的生产者和消费者来演示消息传递的过程。

创建生产者

生产者负责发送消息到队列或主题。以下是一个简单的JMS生产者示例:

import javax.jms.*;

public class JmsProducer {
   
    public static void main(String[] args) throws JMSException {
   
        // 创建连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        // 创建连接
        Connection connection = connectionFactory.createConnection();
        connection.start();
        // 创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建目标(队列或主题)
        Destination destination = session.createQueue("TEST.QUEUE");
        // 创建生产者
        MessageProducer producer = session.createProducer(destination);
        // 创建并发送消息
        TextMessage message = session.createTextMessage("Hello, ActiveMQ!");
        producer.send(message);
        // 关闭资源
        producer.close();
        session.close();
        connection.close();
    }
}

在这个例子中,我们首先创建了一个连接到ActiveMQ服务器的ConnectionFactory。然后,我们创建了一个Connection、一个Session和一个MessageProducer。最后,我们创建了一个TextMessage并通过生产者发送它。

创建消费者

消费者负责接收并处理消息。以下是一个简单的JMS消费者示例:

import javax.jms.*;

public class JmsConsumer {
   
    public static void main(String[] args) throws JMSException {
   
        // 创建连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        // 创建连接
        Connection connection = connectionFactory.createConnection();
        connection.start();
        // 创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建目标(队列或主题)
        Destination destination = session.createQueue("TEST.QUEUE");
        // 创建消费者
        MessageConsumer consumer = session.createConsumer(destination);
        // 设置消息监听器
        consumer.setMessageListener(new MessageListener() {
   
            public void onMessage(Message message) {
   
                try {
   
                    System.out.println("Received message: " + ((TextMessage) message).getText());
                } catch (JMSException e) {
   
                    e.printStackTrace();
                }
            }
        });
        // 保持应用运行,以便接收消息
        System.in.read();
        // 关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}

在这个例子中,我们同样创建了一个连接到ActiveMQ服务器的ConnectionFactory,然后创建了一个Connection、一个Session和一个MessageConsumer。我们为消费者设置了一个MessageListener来处理接收到的消息。最后,我们保持应用运行,以便持续接收消息。

消息确认和事务

在实际的应用中,我们通常需要处理消息确认和事务。ActiveMQ支持两种消息确认模式:自动确认和手动确认。在自动确认模式下,消费者一旦成功接收消息,就会自动向消息服务器发送确认。在手动确认模式下,消费者需要显式地确认每条消息。

此外,ActiveMQ支持JMS事务,允许我们在一个事务中发送和接收多个消息。这确保了消息的一致性和可靠性。

总结

ActiveMQ是一个强大的Java消息中间件,它提供了丰富的特性来支持各种消息传递场景。通过使用ActiveMQ,Java开发者可以实现系统间的解耦、提高系统的可扩展性和可靠性。虽然本文只介绍了基本的使用方法,但ActiveMQ还提供了许多高级特性,如消息过滤、消息优先级、消息组等,这些特性可以帮助开发者构建更加复杂和高效的系统。通过不断学习和实践,开发者可以更好地利用ActiveMQ来解决实际问题。

相关文章
|
消息中间件 Java 数据格式
【报错】spring整合activeMQ,pom.xml文件缺架包,启动报错:Caused by: java.lang.ClassNotFoundException: org.apache.xbean.spring.context.v2.XBeanNamespaceHandler
spring版本:4.3.13 ActiveMq版本:5.15 ======================================================== spring整合activeMQ,pom.
2025 0
|
消息中间件 Java Kafka
Java消息队列总结只需一篇解决ActiveMQ、RabbitMQ、ZeroMQ、Kafka
  一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
2579 0
|
6月前
|
消息中间件 存储 监控
Java一分钟之-ActiveMQ:消息中间件
【6月更文挑战第11天】Apache ActiveMQ是广泛使用的开源消息中间件,支持JMS和多种消息协议。本文介绍了ActiveMQ的基础知识,包括消息队列和主题模型,以及持久化和高可用性配置。同时,提出了三个常见问题:配置不当、消息堆积和网络错误,并给出了相应的解决策略。通过Java示例代码展示了如何使用ActiveMQ发送和接收消息。正确配置、管理消息处理和持续监控是确保ActiveMQ高效运行的关键。
154 2
|
5月前
|
消息中间件 负载均衡 Java
Java中设计和优化消息传递系统的策略
Java中设计和优化消息传递系统的策略
|
消息中间件 SQL XML
ActiveMQ系列:详细讲讲JMS(Java Messaging Service)
一条持久性的消息:应该被传送“一次仅仅一次”,这就意味者如果JMS提供者出现故障,该消息并不会丢失,它会在服务器恢复之后再次传递。一条非持久的消息:最多会传送一次,这意味这服务器出现故障,该消息将永远丢失。
221 0
ActiveMQ系列:详细讲讲JMS(Java Messaging Service)
|
消息中间件 Java
Java--SpringBoot-30-简单使用ActiveMQ
在SpringBoot中使用ActiveMQ来进行简单的收发消息。
111 0
Java--SpringBoot-30-简单使用ActiveMQ
|
消息中间件 监控 Java
Java--windows安装ActiveMQ
本来是要学习下SpringBoot中集成ActiveMQ,需要先安装一个ActiveMQ,所以先记录下在本地安装的步骤。
130 0
Java--windows安装ActiveMQ
|
消息中间件 Java Spring
SpringBoot集成ActiveMQ抛出java.lang.NoClassDefFoundError异常
版权声明:本文首发 http://asing1elife.com ,转载请注明出处。 https://blog.csdn.net/asing1elife/article/details/82732127 SpringBoot集成ActiveMQ抛出java.
2055 0
|
消息中间件 Java
JAVA分布式--ActiveMQ 消息中间件(下)
JAVA分布式--ActiveMQ 消息中间件(下)
118 4
JAVA分布式--ActiveMQ 消息中间件(下)
|
消息中间件 开发框架 自然语言处理
JAVA分布式--ActiveMQ 消息中间件(上)
JAVA分布式--ActiveMQ 消息中间件(上)
192 2
JAVA分布式--ActiveMQ 消息中间件(上)
下一篇
无影云桌面