ActiveMQ

本文介绍如何安装ActiveMQ消息中间件,并通过Java代码实现消息的发送与接收。详细步骤包括从官网下载对应版本的ActiveMQ,配置管理页面的用户名密码,以及通过activemq.bat启动服务。此外,还提供了消息发送者与消费者的Java代码示例,演示如何与ActiveMQ队列交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装ActiveMQ

官网下载ActiveMQ的压缩包,这里提供各个版本的下载页面地址:http://activemq.apache.org/download-archives.html

每个版本分别有windows系统和其它系统的

二、ActiveMQ相关目录和文件

 这里我自己主要接触到的是bin和conf目录

bin目录下有一个win32和win64,分别试用与32位和64位系统的

再进到里面有一个 activemq.bat ,双击它就启动ActiveMQ了;

conf目录下有个users.properties文件,里面配置了activeMQ管理系统登录的用户名密码,都是admin

还有一个activemq.xml,里面有很多activeMQ相关的配置

三、启动activemq并访问管理页面(通过上面的activemq.bat启动,启动信息如下)

根据启动信息,赋值这个地址,改一下ip使用本机ip,也就是127.0.0.1,最终使用http://127.0.0.1:8161访问管理页面

四、编写消费者接受者Java代码进行测试

例子使用的destination(目的地)为队列,这里使用Queue为例子,所以下面发送的消息会放在队列中,管理页面点击Manage ActiveMQ broker->需要登录->进入Queues

这里可以看到如下图:这些词在下面的消费者代码中注释中有解释

消息发送者:

package org.example;

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ProducerDemo {
    //这个地址是在conf/activemq.xml配置文件中配置的<transportConnector name="openwire"
    private static final String brokerUrl = "tcp://0.0.0.0:61616";

    public static void main(String[] args) throws JMSException {
        //1 创建ConnectionFactory对象,需要指定服务端ip和端口号host
        ConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl);

        //2 使用ConnectionFactory创建连接对象
        Connection connection = factory.createConnection();

        //3 开启连接 调用start()方法
        connection.start();

        //4 使用connection对象创建会话session对象
        Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
        //参数说明:第一个参数:是否开启事物,第二个:接收者的确认状态(这里指的是自动确认,不需要做额外的工作)
        //再比如:Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息

        //5 使用session对象创建目的地 Destination(队列Queue和主题Topic)
        Queue queue = session.createQueue("helloQueue");//参数:给队列取个名字

        //6 使用session对象创建一个 消息生产者 Producer
        MessageProducer producer = session.createProducer(queue);

        //7 使用session创建一个Message消息对象并设置内容
        TextMessage textMessage = session.createTextMessage("hello ActiveMQ Consumer333");
        //也可分步
//        TextMessage textMessage = session.createTextMessage();
//        textMessage.setText("hello ActiveMQ Consumer");

        //8 使用Producer对象发送消息
        producer.send(textMessage);

        //9 关闭资源
        producer.close();
        session.close();
        connection.close();

        System.out.println("消息发送完成...");
    }

}

消息消费者:

package org.example;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * ActiveMQ的管理页面的 Queues tab有以下五项:
 * Name  	Number Of Pending Messages  	Number Of Consumers  	         Messages Enqueued  	Messages Dequeued
 * 队列名       等待被处理的消息的数量       消费者数量(只有没关闭连接的消费者才计算在内)  进入队列的消息数量       出队列的消息数量
 * 这里的Messages Enqueued和Message Dequeued指的是进过和出过队列的消息数量,也就是说这是一个总数量,不是当前数量                                         
 */
public class Consumer {
    //这个地址是在conf/activemq.xml配置文件中配置的<transportConnector name="openwire"
    private static final String brokerUrl = "tcp://0.0.0.0:61616";

    public static void main(String[] args) throws JMSException {
        //1 创建ConnectionFactory对象,需要指定服务端ip和端口号host
        ConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl);

        //2 使用ConnectionFactory创建连接对象
        Connection connection = factory.createConnection();

        //3 开启连接 调用start()方法
        connection.start();

        //4 使用connection对象创建会话session对象
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //参数说明:第一个参数:是否开启事物,第二个:接收者的确认状态(这里指的是自动确认,不需要做额外的工作)
        //再比如:Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息

        //5 使用session对象创建目的地 Destination(队列Queue和主题Topic)
        Queue queue = session.createQueue("helloQueue");//参数:给队列取个名字

        //6 使用session对象创建一个 消息消费者 Consumer
        MessageConsumer consumer = session.createConsumer(queue);

        //7 使用Consumer来监听和接收消息
//        Message message = consumer.receive();//如果接收到消息之后不关闭连接,则程序一直没停;
//        if (message instanceof TextMessage) {
//            TextMessage textMessage = (TextMessage) message;
//            String text = textMessage.getText();
//            System.out.println("接收到消息,消息内容为:" + text);
//        }
        //如果要程序不停的接收到队列中的消息则需要循环receive()
        while (true){
            System.out.println("receive前...");
            Message message = consumer.receive();//每次循环会在这里等待,收到消息才会往后走
            System.out.println("receive后...");
            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message;
                String text = textMessage.getText();
                System.out.println("接收到消息,消息内容为:" + text);
            }
        }

        //9 关闭资源:这里要是不关闭资源的话,consumer就会一直等待消息队里中的消息,一有消息就会处理
//        consumer.close();
//        session.close();
//        connection.close();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值