iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何进行ActiveMQ的简单入门与使用
  • 378
分享到

如何进行ActiveMQ的简单入门与使用

2023-06-21 21:06:30 378人浏览 薄情痞子
摘要

这期内容当中小编将会给大家带来有关如何进行ActiveMQ的简单入门与使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、什么是消息中间件消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传

这期内容当中小编将会给大家带来有关如何进行ActiveMQ的简单入门与使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、什么是消息中间件

消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传送

如何进行ActiveMQ的简单入门与使用

二、什么是ActiveMQ

ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。

三、什么时候需要用ActiveMQ

ActiveMQ常被应用与系统业务的解耦,异步消息的推送,增加系统并发量,提高用户体验。例如以我在工作中的使用,在比较耗时且异步的远程开操作时

如何进行ActiveMQ的简单入门与使用

四、如何使用ActiveMQ

AcitveMQ的数据传送流程

如何进行ActiveMQ的简单入门与使用

ActiveMQ的两种消息传递类型

(1)点对点传输,即一个生产者对应一个消费者,生产者向broke推送数据,数据存储在broke的一个队列中,当消费者接受该条队列里的数据。

(2)基于发布/订阅模式的传输,即根据订阅话题来接收相应数据,一个生产者可向多个消费者推送数据,与MQtT协议的实现是类似的,对MQTT协议有兴趣的可跳转到https://www.cnblogs.com/xiguadadage/p/11216463.html

两种消息传递类型的不同,点对点传输消费者可以接收到在连接之前生产者所推送的数据,而基于发布/订阅模式的传输方式消费者只能接收到连接之后生产者推送的数据。

ActiveMQ的安装与启动

(1)官网下载对应服务器版本

如何进行ActiveMQ的简单入门与使用

(2)解压后进入apache-activemq-5.15.9/bin目录

(3)执行./activemq start启动ActiveMQ

如何进行ActiveMQ的简单入门与使用

(4)浏览器输入ActiveMQ启动的服务器ip:8161便可进入WEB界面,点击Manage ActiveMQ broker可以查看消息推送的状态,默认账号密码为admin,admin

如何进行ActiveMQ的简单入门与使用

(5)启动错误分析

进入/root/apache-activemq-5.15.9/data目录查看activemq.log文件,根据错误提示信息修改,例如端口号被占用等。

ActiveMQ的代码测试

(1)构建Maven项目,引入依赖

<dependency>            <groupId>org.apache.activemq</groupId>            <artifactId>activemq-all</artifactId>            <version>5.9.0</version>        </dependency>

(2)生产者类

public class MyProducer {    private static final String ACTIVEMQ_URL = "tcp://192.168.168.242:61616";    public static void main(String[] args) throws JMSException {        // 创建连接工厂        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);        // 创建连接        Connection connection = activeMQConnectionFactory.createConnection();        // 打开连接        connection.start();        // 创建会话        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        // 创建队列目标,并标识队列名称,消费者根据队列名称接收数据        Destination destination = session.createQueue("myQueue");        // 创建一个生产者        MessageProducer producer = session.createProducer(destination);        // 向队列推送10个文本消息数据        for (int i = 1 ; i <= 10 ; i++){            // 创建文本消息            TextMessage message = session.createTextMessage("第" + i + "个文本消息");            //发送消息            producer.send(message);            //在本地打印消息            System.out.println("已发送的消息:" + message.getText());        }        //关闭连接        connection.close();    }}

运行结果:

已发送的消息:第1个文本消息

已发送的消息:第2个文本消息

已发送的消息:第3个文本消息

已发送的消息:第4个文本消息

已发送的消息:第5个文本消息

已发送的消息:第6个文本消息

已发送的消息:第7个文本消息

已发送的消息:第8个文本消息

已发送的消息:第9个文本消息

已发送的消息:第10个文本消息

测试查看web后台显示,有10条消息在队列中等待消费

如何进行ActiveMQ的简单入门与使用

(3)消费者类

public class MyConsumer {    private static final String ACTIVEMQ_URL = "tcp://192.168.168.242:61616";    public static void main(String[] args) throws JMSException {        // 创建连接工厂        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);        // 创建连接        Connection connection = activeMQConnectionFactory.createConnection();        // 打开连接        connection.start();        // 创建会话        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        // 创建队列目标,并标识队列名称,消费者根据队列名称接收数据        Destination destination = session.createQueue("myQueue");        // 创建消费者        MessageConsumer consumer = session.createConsumer(destination);        // 创建消费的监听        consumer.setMessageListener(new MessageListener() {            public void onMessage(Message message) {                TextMessage textMessage = (TextMessage) message;                try {                    System.out.println("消费的消息:" + textMessage.getText());                } catch (JMSException e) {                    e.printStackTrace();                }            }        });    }}

测试结果:

消费的消息:第1个文本消息

消费的消息:第2个文本消息

消费的消息:第3个文本消息

消费的消息:第4个文本消息

消费的消息:第5个文本消息

消费的消息:第6个文本消息

消费的消息:第7个文本消息

消费的消息:第8个文本消息

消费的消息:第9个文本消息

消费的消息:第10个文本消息

web后台显示有一个消费者处于连接状态,且已消费了10个message,而该条队列已没有message待消费了

如何进行ActiveMQ的简单入门与使用

(4)当我们运行两个消费者类,消息又是怎么被消费的呢?是两个消费者都能收到生产者生产的message,还是只有其中一个消费者能消费呢?

我们先运行两个消费者,在运行一个生产者对目标队列生产10个message,会发现有以下情况

// Consumer1控制台

消费的消息:第1个文本消息

消费的消息:第3个文本消息

消费的消息:第5个文本消息

消费的消息:第7个文本消息

消费的消息:第9个文本消息

// Consumer2控制台

消费的消息:第2个文本消息

消费的消息:第4个文本消息

消费的消息:第6个文本消息

消费的消息:第8个文本消息

消费的消息:第10个文本消息

即队列中的数据会平均的分给每一个消费者消费,且每一条数据只能被消费一次

(5)以上是基于队列点对点的传输类型,以下是基于发布/订阅模式传输的类型测试

public class MyProducerForTopic {    private static final String ACTIVEMQ_URL = "tcp://192.168.168.242:61616";    public static void main(String[] args) throws JMSException {        // 创建连接工厂        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);        // 创建连接        Connection connection = activeMQConnectionFactory.createConnection();        // 打开连接        connection.start();        // 创建会话        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        // 创建队列目标,并标识队列名称,消费者根据队列名称接收数据        Destination destination = session.createTopic("topicTest");        // 创建一个生产者        MessageProducer producer = session.createProducer(destination);        // 向队列推送10个文本消息数据        for (int i = 1 ; i <= 10 ; i++){            // 创建文本消息            TextMessage message = session.createTextMessage("第" + i + "个文本消息");            //发送消息            producer.send(message);            //在本地打印消息            System.out.println("已发送的消息:" + message.getText());        }        //关闭连接        connection.close();    }}
public class MyConsumerForTopic {    private static final String ACTIVEMQ_URL = "tcp://192.168.168.242:61616";    public static void main(String[] args) throws JMSException {        // 创建连接工厂        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);        // 创建连接        Connection connection = activeMQConnectionFactory.createConnection();        // 打开连接        connection.start();        // 创建会话        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);        // 创建队列目标,并标识队列名称,消费者根据队列名称接收数据        Destination destination = session.createTopic("topicTest");        // 创建消费者        MessageConsumer consumer = session.createConsumer(destination);        // 创建消费的监听        consumer.setMessageListener(new MessageListener() {            public void onMessage(Message message) {                TextMessage textMessage = (TextMessage) message;                try {                    System.out.println("消费的消息:" + textMessage.getText());                } catch (JMSException e) {                    e.printStackTrace();                }            }        });    }}

现在如果我们先启动生产者,再启动消费者,会发现消费者是无法接收到之前生产者之前所生产的数据,只有消费者先启动,再让生产者消费才可以正常接收数据,这也是发布/订阅的主题模式与点对点的队列模式的一个明显区别。

而如果启动两个消费者,那么每一个消费者都能完整的接收到生产者生产的数据,即每一条数据都被消费了两次,这是发布/订阅的主题模式与点对点的队列模式的另一个明显区别。

上述就是小编为大家分享的如何进行ActiveMQ的简单入门与使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何进行ActiveMQ的简单入门与使用

本文链接: https://www.lsjlt.com/news/300529.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行ActiveMQ的简单入门与使用
    这期内容当中小编将会给大家带来有关如何进行ActiveMQ的简单入门与使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、什么是消息中间件消息中间件顾名思义实现的就是在两个系统或两个客户端之间进行消息传...
    99+
    2023-06-21
  • 消息中间件ActiveMQ的简单入门介绍与使用
    目录一、什么是消息中间件二、什么是ActiveMQ三、什么时候需要用ActiveMQ四、如何使用ActiveMQ浅谈MQTT1、什么是MQTT2、如何理解MQTT3、如何使用MQTT...
    99+
    2024-04-02
  • Java动态代理中如何进行InvocationHandler最简单的入门
    Java动态代理中如何进行InvocationHandler最简单的入门,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。网上关于Java的动态代理,Proxy和I...
    99+
    2023-06-02
  • Skywalking简单入门使用
    🏆今日学习目标: 🍀Skywalking简单入门使用 ✅创作者:林在闪闪发光 ⏰预计时间:50分钟 🎉个人主页:林在闪闪发光的个人主页  🍁林在闪闪发光的个人社区,欢迎你的加入...
    99+
    2023-08-31
    skywalking java 开发语言
  • 如何进行CPack的入门
    本篇文章给大家分享的是有关如何进行CPack的入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。背景CPack 是 CMake 2.4.2 之...
    99+
    2024-04-02
  • 怎么进行SparkSQL部署与简单使用
    这篇文章将为大家详细讲解有关怎么进行SparkSQL部署与简单使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、运行环境Ø  JDK:1.8.0_45 64位Ø&nb...
    99+
    2023-06-02
  • 如何简单了解pythonp-入门
    这篇文章给大家介绍如何简单了解pythonp-入门,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。简单了解pythonPython语言特色 Python是一门解释性语言解释性语言:在系统中运行时需要使用解释器(如:php...
    99+
    2023-06-02
  • 使用springboot如何实现对activemq进行集成
    这篇文章给大家介绍使用springboot如何实现对activemq进行集成,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ActiveMQActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。Acti...
    99+
    2023-05-31
    springboot activemq
  • 如何使用TS对axios的进行简单封装
    目录1.安装axios2.在合适路径下新建request.ts(名称可随意),例如可以在项目的src下创建utils文件夹创建request.ts3.导入axios并创建axios实...
    99+
    2022-11-13
    ts axios简单封装 ts封装axios
  • 如何进行Python Numpy的入门
    如何进行Python Numpy的入门,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Numpy是python语言中最基础和最强大的科学计算和数据处理的工具包,如数据分析工具pa...
    99+
    2023-06-02
  • 如何进行jQuery UI的入门
    如何进行jQuery UI的入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。jQuery ui 是基于 jquery  基础类...
    99+
    2024-04-02
  • python对RabbitMQ的简单入门使用教程
    目录(一)RabbitMQ的简介(二)RabbitMQ的安装(三)python操作RabbitMQ(四)RabbitMQ简单模式(五)RabbitMQ发布订阅模式(六)RabbitM...
    99+
    2024-04-02
  • 如何进行linux SELinux入门
    小编今天带大家了解如何进行linux  SELinux入门,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何进行linux...
    99+
    2023-06-28
  • 使用MyBatis进行简单的更新与查询方式
    目录MyBatis增删改查的用法sql映射文件myBatis框架的缓存myBatis框架的新增myBatis框架的更新     myBatis...
    99+
    2022-11-13
    MyBatis更新 MyBatis查询 MyBatis更新与查询
  • G2O (General Graph Optimization)入门及简单使用
    G2O是一个用于图优化的开源库,常用于SLAM(Simultaneous Localization and Mapping)等领域。...
    99+
    2023-09-13
    G2O
  • JSP web入门:servlet的简单部署、创建与运行(2023版)
    目录 一、环境配置 1、java环境(安装JDK) 2、Tomcat环境 下载Tomcat Windows下启动Tomcat服务器 若出现中文乱码问题: 3、ide选择 二、使用各种ide创建web项目 1、eclipse (一)创建Dyn...
    99+
    2023-09-29
    java eclipse servlet tomcat intellij-idea
  • 如何进行orion的简单测试
    如何进行orion的简单测试,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。orion是一个做IO测试的小巧工具,可以测试随机读写,模拟混合负载等。在oracle 11g已经...
    99+
    2023-06-06
  • 如何进行DOM模型的入门
    如何进行DOM模型的入门,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。向大家描述一下DOM模型的概念,DOM是DocumentObject...
    99+
    2024-04-02
  • 如何进行vue组件入门
    本篇文章给大家分享的是有关如何进行vue组件入门,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。初识组件应用实例化多个vue对象用new创建多个vue对象并命名,可以通过变量相互...
    99+
    2023-06-22
  • 如何进行Tmux 的简易使用
    这篇文章的内容主要围绕如何进行Tmux 的简易使用进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!Tmux 是一个终端复用器(terminal mul...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作