ActiveMQ入门案例(queue模式和topic模式)

ActiveMQ是一个流行的开源消息中间件,它支持多种消息传递模式,包括点对点(queue)模式和发布/订阅(topic)模式。以下是一个ActiveMQ的入门案例,分别展示了如何使用这两种模式。

1. 准备工作

首先,确保你已经安装了ActiveMQ,并且已经启动了ActiveMQ服务。你可以从Apache ActiveMQ的官方网站下载并安装。

2. 点对点(Queue)模式

在点对点模式中,消息被发送到一个队列(Queue)中,并且只有一个消费者能够接收到这个消息。

2.1 创建Maven项目

创建一个新的Maven项目,并添加ActiveMQ的依赖到你的pom.xml文件中。

2.2 编写生产者(Producer)代码

生产者负责将消息发送到队列中。

java 复制代码
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;

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

消费者负责从队列中接收消息。

java 复制代码
import javax.jms.*;
import org.apache.activemq.ActiveMQConnectionFactory;

public class JmsConsumer {
    public static void main(String[] args) throws JMSException {
        // 创建连接工厂
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        // 创建连接
        Connection connection = connectionFactory.createConnection();
        // 开启连接
        connection.start();
        // 创建会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 创建目标(队列)
        Destination destination = session.createQueue("FirstQueue");
        // 创建消费者
        MessageConsumer consumer = session.createConsumer(destination);
        // 接收消息
        Message message = consumer.receive();
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received: " + textMessage.getText());
        }
        // 关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}
2.4 运行测试

先运行消费者代码,再运行生产者代码。你应该能在消费者控制台看到生产者发送的消息。

3. 发布/订阅(Topic)模式

在发布/订阅模式中,消息被发布到一个主题(Topic)中,所有订阅了这个主题的消费者都能接收到这个消息。

3.1 编写生产者(Producer)代码

生产者代码与队列模式的生产者代码类似,只是目标(Destination)需要创建为主题(Topic)。

java 复制代码
Destination destination = session.createTopic("FirstTopic");
3.2 编写消费者(Consumer)代码

消费者代码也与队列模式的消费者代码类似,只是同样需要创建为主题(Topic)。

java 复制代码
Destination destination = session.createTopic("FirstTopic");
3.3 运行测试

启动多个消费者,然后运行生产者代码。所有启动的消费者都应该能接收到生产者发送的消息。

这就是ActiveMQ入门案例的基本内容,包括了队列(Queue)模式和主题(Topic)模式的简单实现。通过这个案例,你可以了解ActiveMQ的基本使用方法和消息传递模式。在实际项目中,你可能需要根据具体需求进行更复杂的配置和使用。

相关推荐
好玩的Matlab(NCEPU)17 小时前
消息队列RabbitMQ、Kafka、ActiveMQ 、Redis、 ZeroMQ、Apache Pulsar对比和如何使用
kafka·rabbitmq·activemq
埃泽漫笔6 天前
Kafka、ActiveMQ、RabbitMQ、RocketMQ 对比
kafka·rabbitmq·activemq
小池先生24 天前
activemq延迟消息变成实时收到了?
linux·数据库·activemq
clownAdam1 个月前
ActiveMQ classic ,artemis ,artemis console ,nms clients,cms client详解
activemq
百思可瑞教育1 个月前
ActiveMQ、RocketMQ、RabbitMQ、Kafka 的全面对比分析
vue.js·分布式·rabbitmq·rocketmq·activemq·北京百思可瑞教育·百思可瑞教育
Zhang.jialei3 个月前
HiveMQ 2024.9 设计与开发文档
hive·物联网·activemq
学习HCIA的小白5 个月前
ActiveMQ
activemq
代码的余温5 个月前
ActiveMQ多消费者负载均衡优化指南
java·后端·负载均衡·activemq
计算机毕设定制辅导-无忧学长5 个月前
ActiveMQ 高级特性:延迟消息与优先级队列实战(一)
activemq
计算机毕设定制辅导-无忧学长5 个月前
ActiveMQ 高级特性:延迟消息与优先级队列实战(二)
activemq