ActiveMQ 实战 - ActiveMQ控制台访问

本文介绍了在Java中通过JMSAPI与ActiveMQ进行通信的基本步骤,包括添加依赖、创建ConnectionFactory、Session和Destination,以及发送和接收消息的示例。
摘要由CSDN通过智能技术生成

在Java中实现与ActiveMQ的通讯通常涉及到使用JMS(Java Message Service)API。以下是一个基本的步骤示例,展示如何创建一个简单的Java程序来发送和接收消息:

1. 添加依赖

如果你使用的是Maven项目,确保在pom.xml文件中添加ActiveMQ客户端依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-client</artifactId>
        <!-- 注意:这里需要替换为你使用的ActiveMQ版本 -->
        <version>5.16.3</version>
    </dependency>
    <!-- 如果你使用JMS 2.0特性,可能还需要额外的JMS API包 -->
    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>jms-api</artifactId>
        <!-- 根据你的Java EE版本选择合适的JMS API版本 -->
        <version>1.1-rev-1</version>
    </dependency>
</dependencies>

2. 创建ConnectionFactory

首先,你需要创建一个连接工厂对象,它会加载ActiveMQ连接驱动并管理到Broker的连接。

import org.apache.activemq.ActiveMQConnectionFactory;

public class JmsProducerConsumer {
    
    // 创建连接工厂
    private static final String BROKER_URL = "tcp://localhost:61616";
    private static final String USERNAME = "admin";
    private static final String PASSWORD = "password";

    public static ConnectionFactory createConnectionFactory() {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
        factory.setBrokerURL(BROKER_URL);
        if (!USERNAME.isEmpty()) {
            factory.setUserName(USERNAME);
            factory.setPassword(PASSWORD);
        }
        return factory;
    }

    // ...
}

3. 创建Connection、Session和Destination

然后,通过ConnectionFactory创建一个Connection对象,并从Connection创建一个Session对象。同时定义目标Destination,可以是Queue或Topic。

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

// ...

public class JmsProducer {

    public void sendMessage(String messageText) throws JMSException {
        ConnectionFactory factory = createConnectionFactory();
        try (Connection connection = factory.createConnection();
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE)) {

            Destination destination = session.createQueue("MyQueue"); // 或者session.createTopic("MyTopic");

            connection.start();

            TextMessage message = session.createTextMessage(messageText);
            MessageProducer producer = session.createProducer(destination);
            producer.send(message);

            System.out.println("Sent message: " + message.getText());
        } finally {
            // 在finally块中关闭资源以确保资源释放
            if (connection != null) {
                connection.close();
            }
        }
    }
}

// 接收消息的消费者类
public class JmsConsumer {

    public void receiveMessages() throws JMSException {
        ConnectionFactory factory = createConnectionFactory();
        try (Connection connection = factory.createConnection();
             Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE)) {

            Destination destination = session.createQueue("MyQueue"); // 确保与生产者使用的队列名一致

            connection.start();

            MessageConsumer consumer = session.createConsumer(destination);
            while (true) { // 这里只是一个循环示例,实际应用中可能需要设定退出条件
                TextMessage message = (TextMessage) consumer.receive();
                if (message != null) {
                    System.out.println("Received message: " + message.getText());
                } else {
                    // 可能需要处理超时或者其他停止条件
                }
            }
        } finally {
            // 关闭资源
            if (connection != null) {
                connection.close();
            }
        }
    }
}

4. 使用

现在你可以实例化上述类并在主函数或其他合适的地方调用sendMessage方法发送消息,以及调用receiveMessages方法接收消息。

请根据实际情况调整代码中的参数和配置,例如端口号、用户名、密码以及队列或主题名称等。此外,以上示例没有包含异常处理的具体细节,实际开发中应提供更完善的错误处理机制。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值