消息中间件ActiveMQ的简单入门介绍与使用

消息中间件ActiveMQ的简单入门介绍与使用

什么是ActiveMQ

ActiveMQ是一款开源的消息中间件,它采用Java编写,完全支持JMS规范,是Apache软件基金会的顶级项目之一。ActiveMQ可以通过网络将不同应用程序之间异构的数据进行传输,是一种比较通用的解决方案。

ActiveMQ的基本概念

在了解如何使用ActiveMQ之前,有几个基本的概念需要了解:

  • Broker:消息中间件的核心部分,负责管理消息的传递和存储,以及与客户端的通信。
  • Producer:消息的生产者,向消息中间件发送消息。
  • Consumer:消息的消费者,从消息中间件接收消息。
  • Queue:点对点模式下的消息传递方式。
  • Topic:发布订阅模式下的消息传递方式。

ActiveMQ的安装

ActiveMQ是基于Java开发的,所以安装前需要准备好Java运行环境。具体安装步骤如下:

  1. 下载ActiveMQ

可以到ActiveMQ的官方网站https://activemq.apache.org/上下载最新的ActiveMQ安装包,也可以使用命令行下载:

wget https://archive.apache.org/dist/activemq/5.15.8/apache-activemq-5.15.8-bin.tar.gz
  1. 解压ActiveMQ

将下载好的安装包解压到指定目录下:

tar -zxvf apache-activemq-5.15.8-bin.tar.gz
  1. 启动ActiveMQ

进入apache-activemq-5.15.8/bin目录,执行以下命令启动ActiveMQ:

./activemq start

ActiveMQ的使用

队列模式

在队列模式中,消息生产者向队列发送消息,然后消息消费者从队列中消费消息。

创建队列

在ActiveMQ中,创建队列需要在管理页面操作,具体步骤如下:

  1. 访问http://localhost:8161/admin/queues.jsp,在页面下方点击“Create a new Queue”按钮。
  2. 在弹出的对话框中填写队列的名称,例如“testQueue”,然后点击“Create”按钮。
发送消息

可以使用Java代码向队列发送消息,示例代码如下:

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class Producer {

    public static void main(String[] args) {
        ConnectionFactory connectionFactory =
                new ActiveMQConnectionFactory("tcp://localhost:61616");

        try (Connection connection = connectionFactory.createConnection()) {
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Destination destination = session.createQueue("testQueue");

            MessageProducer producer = session.createProducer(destination);

            TextMessage textMessage = session.createTextMessage("Hello Queue!");

            producer.send(textMessage);

            System.out.println("消息发送成功:" + textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}
接收消息

同样可以使用Java代码从队列接收消息,示例代码如下:

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class Consumer {

    public static void main(String[] args) {
        ConnectionFactory connectionFactory =
                new ActiveMQConnectionFactory("tcp://localhost:61616");

        try (Connection connection = connectionFactory.createConnection()) {
            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Destination destination = session.createQueue("testQueue");

            MessageConsumer consumer = session.createConsumer(destination);

            Message message = consumer.receive();

            TextMessage textMessage = (TextMessage) message;

            System.out.println("接收到的消息:" + textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

订阅模式

在订阅模式中,消息生产者向主题发送消息,主题会将消息发送给所有订阅该主题的消息消费者。

创建主题

创建主题跟创建队列类似,只需要在管理页面中点击“Create a new Topic”按钮即可。

发送消息

发送消息的Java代码跟队列模式中的代码基本相同,代码如下:

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class Publisher {

    public static void main(String[] args) {
        ConnectionFactory connectionFactory =
                new ActiveMQConnectionFactory("tcp://localhost:61616");

        try (Connection connection = connectionFactory.createConnection()) {
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Destination destination = session.createTopic("testTopic");

            MessageProducer producer = session.createProducer(destination);

            TextMessage textMessage = session.createTextMessage("Hello Topic!");

            producer.send(textMessage);

            System.out.println("消息发送成功:" + textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}
接收消息

接收消息的代码跟队列模式的代码类似,代码如下:

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class Subscriber {

    public static void main(String[] args) {
        ConnectionFactory connectionFactory =
                new ActiveMQConnectionFactory("tcp://localhost:61616");

        try (Connection connection = connectionFactory.createConnection()) {
            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Destination destination = session.createTopic("testTopic");

            MessageConsumer consumer = session.createConsumer(destination);

            Message message = consumer.receive();

            TextMessage textMessage = (TextMessage) message;

            System.out.println("接收到的消息:" + textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

}

总结

本文介绍了消息中间件ActiveMQ的简单入门介绍与使用,包括ActiveMQ的基本概念、安装步骤、队列模式和订阅模式的使用方法。通过本文的介绍,读者可以初步了解ActiveMQ的基本使用方法,以及如何在Java程序中使用ActiveMQ。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:消息中间件ActiveMQ的简单入门介绍与使用 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java对象的序列化和反序列化

    下面是Java对象的序列化和反序列化的完整攻略: 概述 Java对象的序列化和反序列化是一种将对象转化成字节序列以便存储和传输的机制,同时也是将字节序列转化为对象的一种机制。 Java序列化通常用于将对象存储到文件中或者通过网络传输数据,反序列化则是将序列化后的字节流转换成原来的对象。 如何序列化和反序列化对象 Java对象的序列化和反序列化可以通过Java…

    Java 2023年5月26日
    00
  • JS自定义对象实现Java中Map对象功能的方法

    实现Java中Map对象的功能是通过JavaScript自定义对象来实现的。在JavaScript中,每个对象都可以包含一些属性和方法来定义其特定的行为。我们可以使用这一特性来模拟Java中的Map对象。 定义一个自定义对象 Map 对象是一个键值对的集合,我们可以用一个自定义的对象来代表这个集合。定义一个 Map 对象的例子如下: function Map…

    Java 2023年5月26日
    00
  • CentOS Tomcat 的启动服务脚本

    下面是 CentOS 上启动 Tomcat 服务的脚本完整攻略。 准备工作 首先,在 CentOS 中需要安装 Tomcat 和 JDK。 可以通过如下命令安装: # 安装 JDK yum install java-1.8.0-openjdk # 安装 Tomcat yum install tomcat 编写启动脚本 进入 Tomcat 的 bin 目录,创…

    Java 2023年5月20日
    00
  • Java+mysql用户注册登录功能

    Java+MySQL用户注册登录功能攻略 本攻略将会用Java和MySQL实现用户注册和登录功能。这个过程有以下几个步骤: 准备MySQL数据库并创建用户表格 实现用户注册功能 实现用户登录功能 准备MySQL数据库并创建用户表格 安装MySQL 参考官网下载安装MySQL,并按照安装指南进行安装。 创建用户表格 打开MySQL命令行客户端,输入以下命令: …

    Java 2023年6月15日
    00
  • Spring集成Mybatis过程详细讲解

    下面就为您详细讲解“Spring集成Mybatis过程详细讲解”的完整攻略。 1. 前置条件 在开始Spring集成Mybatis之前,您需要先安装好以下开发环境: JDK(Java Development Kit):1.8及以上版本 Maven:3.0及以上版本 Spring:5.0及以上版本 Mybatis:3.4及以上版本 2. 创建Maven工程 首…

    Java 2023年5月20日
    00
  • 关于重写equals()方法和hashCode()方法及其简单的应用

    当我们需要比较两个对象的内容是否相同时,就需要用到equals()方法。而在使用equals()方法时,如果我们没有重写该方法,那么默认的实现是比较两个对象的内存地址是否相同。 然而,有时候我们并不想比较内存地址,而是希望比较对象的内容是否相同。这时就需要重写equals()方法了。下面是重写equals()方法的攻略: 为什么需要重写equals()方法 …

    Java 2023年5月26日
    00
  • springboot返回前端中文乱码的解决

    下面是详细的“springboot返回前端中文乱码的解决”的攻略: 问题产生的原因 在SpringBoot中,我们通常使用@RestController注解来声明一个RESTful风格的控制器,同时还使用了@RequestParam来获取前端传入的中文参数。然而,当我们返回中文字符串给前端时,很容易遇到返回结果乱码的问题。这是因为SpringBoot默认使用…

    Java 2023年5月27日
    00
  • Eclipse插件开发实现控制台输出信息的方法

    下面是Eclipse插件开发实现控制台输出信息的方法的完整攻略: 1. 简介 Eclipse作为Java开发领域最流行的开发工具之一,在插件开发方面给予了极大的支持,开发人员可以针对Eclipse的每个模块和功能进行定制和扩展。其中,如何在插件开发中实现控制台输出信息,是开发人员必须熟练掌握的技能之一。 2. 使用console输出信息 在Eclipse中,…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部