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 单条消息确认
分享到:
相关推荐
### ActiveMQ入门教程知识点详解 #### 一、ActiveMQ概览及特性 ##### 1.1 ActiveMQ简介 - **背景**: ActiveMQ是一款基于Apache许可证的开源消息中间件,遵循了JMS 1.1规范(Java Message Service)。自上世纪80...
本视频包含JMS相关知识,activeMQ入门,集群等,觉得视频可以的小伙伴给个赞,谢谢了
MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。?特点:?1、支持多种语言...
本教程将引导你从基础到深入理解如何使用ActiveMQ,并通过实际的例子进行操作。 首先,我们要了解JMS是什么。Java Message Service(JMS)是一个Java API,它定义了应用程序如何创建、发送、接收和读取消息的标准...
本教程将引导你通过一个简单的入门案例了解如何使用ActiveMQ实现生产者与消费者的模式。 首先,我们需要了解ActiveMQ的基本概念。在消息队列中,生产者是发送消息的实体,而消费者则是接收和处理这些消息的实体。...
SpringActiveMQ入门示例是关于如何在Java环境中利用Spring框架与Apache ActiveMQ集成的一个实践教程。这个示例主要适用于开发者想要了解如何在Spring应用中使用消息队列进行异步通信和解耦。在这个项目中,开发环境...
本资源为百度云盘的链接地址,包括ActiveMQ从入门到精通的视频教程,资料文档及实例代码。适合初学者入门上手。
标题"**HETF-ActiveMQ入门手册.zip**"表明这是一个关于ActiveMQ的入门学习资源,可能包含详细的文档或教程,旨在帮助初学者理解并使用ActiveMQ。"HETF"可能是某个组织、项目或者教程系列的缩写。由于描述中并未提供...
001-ActiveMQ基础;002-安全机制+签收模式+发送模式+MessageProducer;003-顺序消费+消息过滤SELECTOR+MessageConsumer+MySql持久化;004-p2p模式+pulish-subscribe发布订阅模式+与spring集成;005-集群部署1;006-...
这是一本实践导向的入门指南,适合初学者,通常会包含实例代码和逐步教程,帮助读者快速掌握ActiveMQ的基本用法。 8. **《Java消息服务(第2版)》.pdf**: 这是一本详细介绍JMS规范的书籍,对于理解ActiveMQ的...
本入门教程将帮助初学者了解如何使用ActiveMQ,以及如何在实际项目中集成和应用。 首先,让我们从基本概念开始。ActiveMQ是Apache软件基金会的一个项目,其核心功能是作为一个消息代理,负责接收、存储和转发消息。...
Apache ActiveMQ是业界广泛...通过这个入门教程,你应该能够了解如何安装、配置和使用ActiveMQ,以及其与JMS的关联。继续深入学习,你将掌握更多关于消息中间件的高级特性和最佳实践,为你的项目带来更高效的解决方案。
【ActiveMQ】—01—实战ActiveMQ集群与应用.消息队列中间件ActiveMQ入门到精通视频教程及资料一头扎进JMS之ActiveMQ视频教程.
本教程将深入探讨如何将这两个强大的工具结合在一起,以创建一个简单的发送JMS消息的入门实例。 首先,我们需要理解ActiveMQ的基本概念。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它实现了JMS规范,提供...
这份教程可能提供了JMS基础概念的快速入门,包括消息类型(如TextMessage、ObjectMessage等)、消息模式、生产者和消费者的角色、事务处理以及JMS API的使用方法。 5. **JMS规范教程** JMS规范教程则更深入地...
1:ActiveMQ入门和消息中间件 2:JMS基本概念和模型 3:JMS的可靠性机制 4:JMS的API结构和开发步骤 5:Broker的启动方式 6:ActiveMQ结合Spring开发 7:ActiveMQ支持的传输协议 8:ActiveMQ消息存储持久化 9:...
【ActiveMQ-JMS简单实例使用Tomcat】是一个关于如何在Tomcat环境下集成并使用ActiveMQ进行JMS消息传递的初级教程。ActiveMQ是一款开源的消息中间件,它遵循JMS(Java Message Service)1.1规范,能兼容J2EE1.4及以上...
本教程旨在帮助activeMQ初学者入门,通过本示例,能完全理解activeMQ的基本概念,为分布式应用打下基础。 本示例中,使用maven管理,完美解决各种依赖问题,不需要自行配置,导入项目等待eclipse自行下载jar包后即可...
描述"jms简单的案例,用的activemq,使用jms前请先启动activemq服务器"表明这是一个初级的JMS实践,涉及到使用ActiveMQ作为服务器,而且在运行任何JMS相关的代码之前,需要确保ActiveMQ服务已经启动。 **ActiveMQ与...