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的基本使用方法和消息传递模式。在实际项目中,你可能需要根据具体需求进行更复杂的配置和使用。

相关推荐
dvlinker5 天前
大数据技术Kafka详解 ① | 消息队列(Messages Queue)
大数据·kafka·rabbitmq·rocketmq·activemq·分布式发布订阅消息系统·messages queue
想学习java初学者8 天前
Docker compose部署Activemq
docker·容器·activemq
椰汁菠萝8 天前
docker运行ActiveMQ-Artemis
docker·容器·activemq
燃犀知不可乎骤得20 天前
如何在Linux环境中的Qt项目中使用ActiveMQ-CPP
linux·qt·activemq
燃犀知不可乎骤得20 天前
linux 运行 activemq,Linux 安装 ActiveMQ 服务器详解
linux·activemq
燃犀知不可乎骤得20 天前
Linux下安装ActiveMQ-CPP
c++·cms·activemq
小灰灰__1 个月前
Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例
docker·activemq·java-activemq
Dylanioucn2 个月前
【分别为微服务云原生】9分钟ActiveMQ延时消息队列:定时任务的革命与Quartz的较量
微服务·云原生·activemq
空名_Noname2 个月前
【转载翻译】消息队列 - ActiveMQ、RabbitMQ、Kafka、ZeroMQ
c++·kafka·rabbitmq·activemq·zeromq
Dylanioucn2 个月前
【分布式微服务云原生】如何在ActiveMQ中优雅处理提前支付的延时订单
分布式·微服务·activemq