ActiveMQ相关概念
ActiveMQ 是一个 MOM,具体来说是一个实现了 JMS 规范的系统间远程通信的消息代理
MOM 就是面向消息中间件(Message-oriented middleware),是用于以分布式应用或系统中的异步、松耦合、可靠、可扩展和安全通信的一类软件。MOM 的总体思想是它作为消息发送器和消息接收器之间的消息中介,这种中介提供了一个全新水平的松耦合。
JMS 叫做 Java 消息服务(Java Message Service),是 Java 平台上有关面向 MOM 的技术规范,旨在通过提供标准的产生、发送、接收和处理消息的 API 简化企业应用的开发,类似于 JDBC 和关系型数据库通信方式的抽象。
- Provider:纯 Java 语言编写的 JMS 接口实现(比如 ActiveMQ 就是)
- Domains:消息传递方式,包括点对点(P2P)、发布/订阅(Pub/Sub)两种
- Connection factory:客户端使用连接工厂来创建与 JMS provider 的连接
- Destination:消息被寻址、发送以及接收的对象
- JMS Provider:实现JMS 接口的消息中间件;
- PTP:Point to Point,即点对点的消息模型;
- Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;
- Queue:队列目标;
- Topic:主题目标;
- ConnectionFactory:连接工厂,JMS 用它创建连接;
- Connection:JMS 客户端到JMS Provider 的连接;
- Destination:消息的目的地;
- Session:会话,一个发送或接收消息的线程;
- MessageProducer:由Session 对象创建的用来发送消息的对象;
- MessageConsumer:由Session 对象创建的用来接收消息的对象;
- Acknowledge:签收;
- Transaction:事务。
P2P (点对点)消息域使用 queue 作为 Destination,消息可以被同步或异步的发送和接收,每个消息只会给一个 Consumer 传送一次。
Consumer 可以使用 MessageConsumer.receive() 同步地接收消息,也可以通过使用MessageConsumer.setMessageListener() 注册一个 MessageListener 实现异步接收。
多个 Consumer 可以注册到同一个 queue 上,但一个消息只能被一个 Consumer 所接收,然后由该 Consumer 来确认消息。并且在这种情况下,Provider 对所有注册的 Consumer 以轮询的方式发送消息。
Pub/Sub(发布/订阅,Publish/Subscribe)消息域使用 topic 作为 Destination,发布者向 topic 发送消息,订阅者注册接收来自 topic 的消息。发送到 topic 的任何消息都将自动传递给所有订阅者。接收方式(同步和异步)与 P2P 域相同。
除非显式指定,否则 topic 不会为订阅者保留消息。当然,这可以通过持久化(Durable)订阅来实现消息的保存。这种情况下,当订阅者与 Provider 断开时,Provider 会为它存储消息。当持久化订阅者重新连接时,将会受到所有的断连期间未消费的消息。那么使用它创建应用程序肯定也有一个通用的步骤:
- 获取连接工厂
- 使用连接工厂创建连接
- 启动连接
- 从连接创建会话
- 获取 Destination
- 创建 Producer,或
- 创建 Producer
- 创建 message
- 创建 Consumer,或发送或接收message发送或接收 message
- 创建 Consumer
- 注册消息监听器(可选)
- 发送或接收 message
- 关闭资源(connection, session, producer, consumer 等)
public
class
JMSDemo {
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageProducer producer;
MessageConsumer consumer;
Message message;
boolean
useTransaction =
false
;
try
{
Context ctx =
new
InitialContext();
connectionFactory = (ConnectionFactory) ctx.lookup(
"ConnectionFactoryName"
);
//使用ActiveMQ时:connectionFactory = new ActiveMQConnectionFactory(user, password, getOptimizeBrokerUrl(broker));
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(useTransaction, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue(
"TEST.QUEUE"
);
//生产者发送消息
producer = session.createProducer(destination);
message = session.createTextMessage(
"this is a test"
);
//消费者同步接收
consumer = session.createConsumer(destination);
message = (TextMessage) consumer.receive(
1000
);
System.out.println(
"Received message: "
+ message);
//消费者异步接收
consumer.setMessageListener(
new
MessageListener() {
@Override
public
void
onMessage(Message message) {
if
(message !=
null
) {
doMessageEvent(message);
}
}
});
}
catch
(JMSException e) {
...
}
finally
{
producer.close();
session.close();
connection.close();
}
}
session = connection.createSession(useTransaction, Session.AUTO_ACKNOWLEDGE);
创建Session时有两个非常重要的参数,第一个boolean类型的参数用来表示是否采用事务消息。如果是事务消息,对于的参数设置为true,此时消息的提交自动有comit处理,消息的回滚则自动由rollback处理。加入消息不是事务的,则对应的该参数设置为false,此时分为三种情况:
- Session.AUTO_ACKNOWLEDGE表示Session会自动确认所接收到的消息。
- Session.CLIENT_ACKNOWLEDGE表示由客户端程序通过调用消息的确认方法来确认所接收到的消息。
- Session.DUPS_OK_ACKNOWLEDGE使得Session将“懒惰”地确认消息,即不会立即确认消息,这样有可能导致消息重复投递。
ActiveMQ相关概念相关推荐
- Java消息中间件(activeMQ)
文章目录 **第一章 消息中间件概述** 1. 消息中间件的好处 2. 什么是消息中间件 3. 什么是JMS(规范) 4. 什么是AMQP(协议) 5. 几个常用消息中间对比 **第二章 初始JMS* ...
- 消息队列技术介绍 : ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ
一. 消息队列概述 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问 ...
- springboot的细节挖掘(ActiveMq集成)
官网下载地址: http://activemq.apache.org/?utm_source=csdn_toolbar 下载的时候区别:ActiveMQ 5 "Classic"和A ...
- 遇见JMS[1] —— activeMQ的简单使用
1.JMS Java Message Service,提供API,供两个应用程序或者分布式应用之间异步通信,以传送消息. 2.相关概念 提供者:实现JMS规范的消息中间件服务器 客户端:发送或接收消息 ...
- 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,Rabbit ...
- ActiveMQ使用及原理浅析(消息队列)
文章目录 引言 正文 一.ActiveMQ是如何产生的? 产生背景 JMS规范 基本概念 JMS体系结构 二.如何使用? 基本功能 消息传递 P2P pub/sub 持久订阅 消息传递的可靠性 事务型 ...
- ActiveMQ 基础知识
第一 消息中间件概述 1.1 什么是消息中间件 面向消息的中间件(MessageOrlented MiddlewareMOM),发送者将消息发送给消息服务器,消息服务器将消感存放在若千队列中,在合适的 ...
- 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记
最近有好多朋友都去投岗秋招提前批,面完回来跟我说碰到消息中间件一类的问题就挂了.额,有点不知所措,于是乎小编就想着做一次消息中间件的专题,归类整理了MQ(ActiveMQ/RabbitMQ/Rocke ...
- 惊了 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记
最近有好多朋友都去投岗秋招提前批,面完回来跟我说碰到消息中间件一类的问题就挂了. 附面试思维导图: 额,有点不知所措,于是乎小编就想着做一次消息中间件的专题,归类整理了MQ( ActiveMQ/Rab ...
最新文章
- ________________2058_______________后台数据不够。可能误判。
- hdu 1269(Tarjan求强连通分量)
- 信息学奥赛一本通C++语言——1124:矩阵加法
- ARM汇编指令格式及规则
- 【openMV】算法矫正镜头+视频格式对应的分辨率
- JSK-372 图案输出【入门】
- video safari不支持吗_您支持吗? 公园遛狗纳入 “不文明行为黑名单”
- paip.log4j 日志系统 参数以及最佳实践
- 如何在csdn网站搜索自己写的博客文章
- 大型稀疏矩阵计算的现代方法介绍
- linux挂马检测,检测网站挂马程序(Python)
- Jeff Dean的神话
- LINUX下更新flash
- Victor Zue教授的创新观
- mmkv原理,Android多进程从头讲到尾,成功定级腾讯T3-2
- (七)DKN:用于新闻推荐的深度知识感知网络
- 函数中的形式参数和实际参数
- 二十五个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!
- nn.KLDivLoss
- FoneDog iOS Toolkit(苹果数据恢复软件)官方正式版V2.1.62 | 苹果数据恢复大师下载 | 苹果数据恢复有免费的吗?