`
hekuilove
  • 浏览: 158905 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

ActiveMQ初级教程

阅读更多
MQ的思想其实和连接池差不多,只不过一个是队列,一个是多线程。设计模式和原理都类似,ActiveMQ(以下简称amq)实际上是封装了JMS,所以可以在amq里直接使用很多JMS的对象。

去官网去下载 关于amq的安装 so easy 我就不多说了 网上一搜一堆  需要注意的是下载的时候可能会有各种404问题  官网提供了很多的下载URL 国内的网络河蟹  很难下载  你可以换一个其他版本试试 (我就是这样的)

JMS里分为生产者(Producer)和消费者(Consumer)

生产者向队列add data
消费者向队列poll data

我来简单介绍几个MQ重要的对象

ActiveMQConnectionFactory :   实现了jms的ConnectionFactory,Connection的工厂类
Connection  :JMS连接,和Java连接池的Connection差不多  Producer和Consumer用来和Broker通讯的
Session  : 会话
Destination :目的地,数据要发送到哪里或者从哪里取
MessageProducer: 生产者
MessageConsumer :消费者
Message : 消息,add到队列的东西,也就是自己要处理的东西,Message有很多子接口,TextMessage或ByteMessage神马的 自己根据自己的业务选择接口

以上除了ActiveMQConnectionFactory 是amq的类(实现JMS) 其他的基本都是JMS自己的接口 所以我们在代码里直接使用的接口  因为除了ActiveMQConnectionFactory需要我们创建 其他的对象都不需要我们手动去创建


Producer
ConnectionFactory factory; //连接工厂
                Connection connection;//jms连接
                Session session;//发送、接收线程
                Destination destination;//消息目的地
                MessageProducer producer;//消息发送者

                factory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,
                                "tcp://localhost:61616"); //获取工厂实例  
                
                /**
                 * 以上步骤可使用单例模式等方法,让ActiveMQConnectionFactory始终只创建一次(和SessionFactory的性质差不多)
                 */

                try {
                        connection = factory.createConnection(); //获取Connection
                        connection.start(); //打开Connection
                        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); //创建Session并选择事务和ACK模式
                        destination = session.createQueue("rdp_import_queue"); //根据自己的队列名称创建Destination(如果没有队列,MQ会自己创建队列)
                        producer = session.createProducer(destination); //创建生产者
                        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  //是否为持久化 ,NON_PERSISTENT非持久化 ,PERSISTENT持久化

                        for (int i = 1; i < 13; i++) {
                                String msg = "第" + i + "次发送消息";
                                TextMessage textMessage = session.createTextMessage(msg);
                                producer.send(textMessage);
                        }
                        
                        //关闭对象
                        producer.close();
                        session.commit();
                        connection.close();
                } catch (JMSException e) {
                        e.printStackTrace();
                }



Consumer  下面就不写注释了 和上面一样

connection = factory.createConnection();
                        connection.start();
                        session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
                        destination = session.createQueue("rdp_import_queue");
                        consumer = session.createConsumer(destination); // 创建Consumer
                        while (true) {
                                TextMessage textMessage = (TextMessage) consumer.receive(); // 接收Message
                                if (textMessage != null && !textMessage.getJMSRedelivered()) { //检查是否已经接收过
                                        System.out.println(textMessage.getText());
                                        textMessage.acknowledge(); //通知已接收
                                }
                                Thread.sleep(1000);
                        }



有几个地方要注意一下
1、ConnectionFactory的生命周期  此对象不要频繁创建  全局创建一个就好 每次用该对象获取Connection就好了

1、DeliveryMode  持久化方式,开发中可以选择对Message是否要做持久化,持久化的Message在重启amq后还会依然存在,非持久化会自动被干掉(但是会临时存放于amp),
      其值为NON_PERSISTENT非持久化 ,PERSISTENT持久化

2、ACK(Acknowledgement),先说下什么是ACK,ACK即确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接受无误。ACK信号通常是一个ASCII字符,不同的协议中ACK信号都不一样。
    当Consumer拿到Message之后要通知Broker已确认接收,否则其他Consumer会认为该Message依然可用,JMS的Session中提供了四种ACK_MODE
                           AUTO_ACKNOWLEDGE = 1    自动确认
                           CLIENT_ACKNOWLEDGE = 2    客户端手动确认  
                           DUPS_OK_ACKNOWLEDGE = 3    自动批量确认
                           SESSION_TRANSACTED = 0    事务提交并确认

                            AcitveMQ对此补充了一个自定义的ACK_MODE:  INDIVIDUAL_ACKNOWLEDGE = 4    单条消息确认
2
0
分享到:
评论

相关推荐

    ActiveMQ入门教程

    ### ActiveMQ入门教程知识点详解 #### 一、ActiveMQ概览及特性 ##### 1.1 ActiveMQ简介 - **背景**: ActiveMQ是一款基于Apache许可证的开源消息中间件,遵循了JMS 1.1规范(Java Message Service)。自上世纪80...

    activeMQ从入门到精通视频教程

    本视频包含JMS相关知识,activeMQ入门,集群等,觉得视频可以的小伙伴给个赞,谢谢了

    ActiveMQ详细入门使用教程_java_MQ_

    MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。?特点:?1、支持多种语言...

    ActiveMQ入门及深入使用的例子

    本教程将引导你从基础到深入理解如何使用ActiveMQ,并通过实际的例子进行操作。 首先,我们要了解JMS是什么。Java Message Service(JMS)是一个Java API,它定义了应用程序如何创建、发送、接收和读取消息的标准...

    activeMQ简单入门案例

    本教程将引导你通过一个简单的入门案例了解如何使用ActiveMQ实现生产者与消费者的模式。 首先,我们需要了解ActiveMQ的基本概念。在消息队列中,生产者是发送消息的实体,而消费者则是接收和处理这些消息的实体。...

    SpringActiveMQ入门示例

    SpringActiveMQ入门示例是关于如何在Java环境中利用Spring框架与Apache ActiveMQ集成的一个实践教程。这个示例主要适用于开发者想要了解如何在Spring应用中使用消息队列进行异步通信和解耦。在这个项目中,开发环境...

    ActiveMQ视频教程

    本资源为百度云盘的链接地址,包括ActiveMQ从入门到精通的视频教程,资料文档及实例代码。适合初学者入门上手。

    HETF-ActiveMQ入门手册.zip

    标题"**HETF-ActiveMQ入门手册.zip**"表明这是一个关于ActiveMQ的入门学习资源,可能包含详细的文档或教程,旨在帮助初学者理解并使用ActiveMQ。"HETF"可能是某个组织、项目或者教程系列的缩写。由于描述中并未提供...

    消息队列中间件ActiveMQ入门到精通视频教程及资料

    001-ActiveMQ基础;002-安全机制+签收模式+发送模式+MessageProducer;003-顺序消费+消息过滤SELECTOR+MessageConsumer+MySql持久化;004-p2p模式+pulish-subscribe发布订阅模式+与spring集成;005-集群部署1;006-...

    分享一些ActiveMQ的资料

    这是一本实践导向的入门指南,适合初学者,通常会包含实例代码和逐步教程,帮助读者快速掌握ActiveMQ的基本用法。 8. **《Java消息服务(第2版)》.pdf**: 这是一本详细介绍JMS规范的书籍,对于理解ActiveMQ的...

    activeMQ的使用入门

    本入门教程将帮助初学者了解如何使用ActiveMQ,以及如何在实际项目中集成和应用。 首先,让我们从基本概念开始。ActiveMQ是Apache软件基金会的一个项目,其核心功能是作为一个消息代理,负责接收、存储和转发消息。...

    activemq学习入门第一步

    Apache ActiveMQ是业界广泛...通过这个入门教程,你应该能够了解如何安装、配置和使用ActiveMQ,以及其与JMS的关联。继续深入学习,你将掌握更多关于消息中间件的高级特性和最佳实践,为你的项目带来更高效的解决方案。

    ActiveMQ.txt

    【ActiveMQ】—01—实战ActiveMQ集群与应用.消息队列中间件ActiveMQ入门到精通视频教程及资料一头扎进JMS之ActiveMQ视频教程.

    activemq与spring整合发送jms消息入门实例

    本教程将深入探讨如何将这两个强大的工具结合在一起,以创建一个简单的发送JMS消息的入门实例。 首先,我们需要理解ActiveMQ的基本概念。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它实现了JMS规范,提供...

    activemq系列笔记

    这份教程可能提供了JMS基础概念的快速入门,包括消息类型(如TextMessage、ObjectMessage等)、消息模式、生产者和消费者的角色、事务处理以及JMS API的使用方法。 5. **JMS规范教程** JMS规范教程则更深入地...

    实战ActiveMQ集群与应用视频教程.zip

    1:ActiveMQ入门和消息中间件 2:JMS基本概念和模型 3:JMS的可靠性机制 4:JMS的API结构和开发步骤 5:Broker的启动方式 6:ActiveMQ结合Spring开发 7:ActiveMQ支持的传输协议 8:ActiveMQ消息存储持久化 9:...

    ActiveMq-JMS简单实例使用tomcat.pdf

    【ActiveMQ-JMS简单实例使用Tomcat】是一个关于如何在Tomcat环境下集成并使用ActiveMQ进行JMS消息传递的初级教程。ActiveMQ是一款开源的消息中间件,它遵循JMS(Java Message Service)1.1规范,能兼容J2EE1.4及以上...

    activeMQ示例 activeMQ demo,java分布式技术

    本教程旨在帮助activeMQ初学者入门,通过本示例,能完全理解activeMQ的基本概念,为分布式应用打下基础。 本示例中,使用maven管理,完美解决各种依赖问题,不需要自行配置,导入项目等待eclipse自行下载jar包后即可...

    test_jms.zip_activemq_activemq案例_jms_jms test

    描述"jms简单的案例,用的activemq,使用jms前请先启动activemq服务器"表明这是一个初级的JMS实践,涉及到使用ActiveMQ作为服务器,而且在运行任何JMS相关的代码之前,需要确保ActiveMQ服务已经启动。 **ActiveMQ与...

Global site tag (gtag.js) - Google Analytics