Windows下ActiveMQ的安装和简单使用

1 篇文章 0 订阅

1. 官网下载ActiveMQ包,官网地址:Index of /dist/activemq

这里讲述的是apache-activemq-5.16.4这个版本,版本请勿随意使用,其与JDK有相互依赖关系,如下图:

2. 解压使用

2.1 将下载好的包解压到本地磁盘:

 2.2 启动并访问。进入bin文件夹,双击打开“activemq.bat”。

如遇到打开“activemq.bat”黑框一闪而过时,请用命令方式启动。启动命令:

activemq-admin.bat start

 浏览器访问:http://127.0.0.1:8161/,用户名和密码都是admin

3. 依赖引入

pom.xml增加相关依赖

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-spring</artifactId>
            <version>5.16.4</version>
        </dependency>

 4. 相关代码

Constant.java

/**
 * 常量类
 */
public class Constant {

    public static String USER = "admin";
    public static String PASSWORD = "admin";
    public static String URL = "failover://tcp://127.0.0.1:61616";
    public static String SUBJECT = "XXX-MSG";

}
MsgTypeEnum.java
public enum MsgTypeEnum {

    TEXT("text", "文本信息"),
//    MAP("map", "Map信息"),
//    STREAM("stream", "流信息"),
    OBJECT("object", "对象信息"),
    BYTES("byte", "字节信息");

    public String key;

    public String value;

    /**
     * 创建一个新的实例MsgTypeEnum.
     *
     * @param key
     * @param value
     */
    MsgTypeEnum(String key, String value) {
        this.key = key;
        this.value = value;
    }

}

MqMessage.java

import lombok.Data;

import java.io.Serializable;

@Data
public class MqMessage implements Serializable {

    /**
     * 序列化ID
     */
    private static final long serialVersionUID = 7543452786622377175L;

    private String name;

    private Integer id;

}

MqSender.java

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.Serializable;

/**
 * 发送mq消息
 */
public class MqSender {
    private Destination destination = null;
    private Connection conn = null;
    private Session session = null;
    private MessageProducer producer = null;

    /**
     * 获取conn
     *
     * @return conn conn
     */
    public Connection getConn() {
        return conn;
    }

    /**
     * 初始化
     *
     * @throws Exception
     */
    public void initialize() throws Exception {
        // 连接工厂
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(Constant.USER, Constant.PASSWORD, Constant.URL);
        conn = connectionFactory.createConnection();
        // 事务性会话,自动确认消息
        session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // 消息的目的地(Queue/Topic)
        destination = session.createQueue(Constant.SUBJECT);
        // destination = session.createTopic(SUBJECT);
        // 消息的提供者(生产者)
        producer = session.createProducer(destination);
        // 不持久化消息
        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
    }

    public void sendMessage(MsgTypeEnum msgTypeEnum, Object msgObject) throws Exception {
        initialize();
        // 连接到JMS提供者(服务器)
        conn.start();
        switch (msgTypeEnum) {
            // 发送字节消息
            case BYTES:
                BytesMessage msg2 = session.createBytesMessage();
                msg2.writeBytes(msgObject.toString().getBytes());
                producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                producer.send(msg2);
                break;
            // 发送Map消息
//            case MAP:
//                MapMessage msg = session.createMapMessage();
//                msg.setBoolean("boolean", true);
//                msg.setShort("short", (short) 0);
//                msg.setLong("long", 123456);
//                msg.setString("MapMessage", "ActiveMQ Map Message!");
//                producer.send(msg);
//                break;
            // 发送对象消息
            case OBJECT:
                ObjectMessage msg12 = session.createObjectMessage();
                msg12.setObject((Serializable) msgObject);
                producer.send(msg12);
                break;
            // 发送流消息
//            case STREAM:
//                StreamMessage msg1 = session.createStreamMessage();
//                msg1.writeBoolean(false);
//                msg1.writeLong(1234567890);
//                producer.send((StreamMessage) msg1);
//                break;
            // 发送文本消息
            case TEXT:
                TextMessage msg11 = session.createTextMessage();
                msg11.setText((String) msgObject);
                producer.send(msg11);
                break;
            default:
                break;
        }
        close();
    }

    /**
     * 关闭连接
     *
     * @throws JMSException
     */
    public void close() throws JMSException {
        if (producer != null) {
            producer.close();
        }
        if (session != null) {
            session.close();
        }
        if (conn != null) {
            conn.close();
        }
    }

}

 MqAccept.java

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.util.Enumeration;

/**
 * 接收mq消息
 */
public class MqAccept implements MessageListener {
    private Destination dest = null;
    private Connection conn = null;
    private Session session = null;
    private MessageConsumer consumer = null;

    private boolean stop = false;

    /**
     * 初始化
     *
     * @throws Exception
     */
    private void initialize() throws Exception {
        // 连接工厂是用户创建连接的对象.
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(Constant.USER, Constant.PASSWORD, Constant.URL);
        // 连接工厂创建一个jms connection
        conn = connectionFactory.createConnection();
        // 是生产和消费的一个单线程上下文。会话用于创建消息的生产者,消费者和消息。会话提供了一个事务性的上下文。
        session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); // 不支持事务
        // 目的地是客户用来指定他生产消息的目标还有他消费消息的来源的对象.
        dest = session.createQueue(Constant.SUBJECT);
        // dest = session.createTopic(SUBJECT);
        // 会话创建消息的生产者将消息发送到目的地
        consumer = session.createConsumer(dest);
    }

    /**
     * 消费消息
     *
     * @throws JMSException
     * @throws Exception
     */
    public void startReceiveMessage() throws JMSException, Exception {
        initialize();
        conn.start();
        consumer.setMessageListener(this);
        // 等待接收消息
        while (!stop) {
            Thread.sleep(5000);
        }

    }

    @SuppressWarnings("rawtypes")
    @Override
    public void onMessage(Message msg) {
        try {
            if (msg instanceof TextMessage) {
                TextMessage message = (TextMessage) msg;
                System.out.println("------Received TextMessage------");
                System.out.println(message.getText());
            } else if (msg instanceof MapMessage) {
                MapMessage message = (MapMessage) msg;
                System.out.println("------Received MapMessage------");
                System.out.println(message.getLong("long"));
                System.out.println(message.getBoolean("boolean"));
                System.out.println(message.getShort("short"));
                System.out.println(message.getString("MapMessage"));
                System.out.println("------Received MapMessage for while------");
                Enumeration enumer = message.getMapNames();
                while (enumer.hasMoreElements()) {
                    Object obj = enumer.nextElement();
                    System.out.println(message.getObject(obj.toString()));
                }
            } else if (msg instanceof StreamMessage) {
                StreamMessage message = (StreamMessage) msg;
                System.out.println("------Received StreamMessage------");
                System.out.println(message.readString());
                System.out.println(message.readBoolean());
                System.out.println(message.readLong());
            } else if (msg instanceof ObjectMessage) {
                System.out.println("------Received ObjectMessage------");
                ObjectMessage message = (ObjectMessage) msg;
                MqMessage mqMessage = (MqMessage) message.getObject();
                System.out.println("name: " + mqMessage.getName());
            } else if (msg instanceof BytesMessage) {
                System.out.println("------Received BytesMessage------");
                BytesMessage message = (BytesMessage) msg;
                byte[] byteContent = new byte[1024];
                int length = -1;
                StringBuffer content = new StringBuffer();
                while ((length = message.readBytes(byteContent)) != -1) {
                    content.append(new String(byteContent, 0, length));
                }
                System.out.println(content.toString());
            } else {
                System.out.println(msg);
            }
            stop = true;
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭连接
     *
     * @throws JMSException
     */
    public void close() throws JMSException {
        System.out.println("Consumer:->Closing connection");
        if (consumer != null) {
            consumer.close();
        }
        if (session != null) {
            session.close();
        }
        if (conn != null) {
            conn.close();
        }
    }
}
MQSendMsg.java
public class MQSendMsg {

    public static void sendMsg(MsgTypeEnum type, Object msgObj) throws Exception {
        MqSender sender = new MqSender();
        // 连接到JMS提供者(服务器)
        sender.initialize();
        sender.getConn().start();
        sender.sendMessage(type, msgObj);
        sender.close();
    }

}

5. 测试代码

TestReceive.java
public class TestReceive {

    public static void main(String[] args) throws Exception {
        new MqAccept().startReceiveMessage();
    }

}
TestSend.java
public class TestSend {

    public static void main(String[] args) throws Exception {
        MQSendMsg.sendMsg(MsgTypeEnum.TEXT, "这是测试哈123...");
    }

}

测试发送接收功能

基础使用到此结束!

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Windows安装和配置ActiveMQ,您可以按照以下步骤进行操作: 1. 下载ActiveMQ:访问ActiveMQ的官方网站(https://activemq.apache.org/),并在"Download"页面选择合适的版本进行下载。根据您的需求选择二进制分发版(例如zip或tar.gz文件)。 2. 解压缩文件:将下载的文件解压缩到您选择的目录中。您可以选择将其解压缩到任何位置,但建议将其解压缩到某个目录,以便轻松访问。 3. 配置环境变量:将ActiveMQ的bin目录添加到系统的环境变量中,以便能够在任何位置使用命令行启动ActiveMQ。您可以按照以下步骤操作: - 右键单击“计算机”(或“此电脑”),然后选择“属性”。 - 在左侧导航栏中,单击“高级系统设置”。 - 在“系统属性”对话框中,单击“环境变量”按钮。 - 在“系统变量”部分,找到名为“Path”的变量,并双击它。 - 在“编辑环境变量”对话框中,单击“新建”按钮,并输入ActiveMQ的bin目录的完整路径(例如:C:\apache-activemq-5.16.2\bin)。 - 单击“确定”按钮保存更改。 4. 启动ActiveMQ:打开命令提示符(或PowerShell)并输入以下命令以启动ActiveMQ: ``` activemq start ``` ActiveMQ将开始启动,并且您将看到一些启动日志。请确保没有错误消息并且成功启动。 5. 访问管理控制台:在启动ActiveMQ后,您可以在Web浏览器中访问ActiveMQ的管理控制台。默认情况下,它位于http://localhost:8161/admin。您可以使用默认的用户名和密码登录(用户名:admin,密码:admin)。如果您希望更改用户名和密码,请编辑ActiveMQ的配置文件“conf/jetty-realm.properties”。 这些步骤将帮助您在Windows安装和配置ActiveMQ。您现在可以使用ActiveMQ进行消息传递和其他相关操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值