`

JMS 概念

    博客分类:
  • J2SE
阅读更多
JMS Architecture
jms-architecture
一般将ConnectionFactory和Destination绑定到JNDI上,然后Client查找JNDI来获取。对于ActiveMQ可以直接构造ConnectionFactory和Destination。
Connection和Destination就是这里的Administed Objects。
 
JMS有两种形式:
1. 点到点(Point to Point)
jms-pointToPoint
2. 发布/订阅(Publish/Subscribe)
jms-publishSubscribe
它们的Destination分别是Queue和Topic。
消息消费者可以同步也可以异步的消费消息,同步consumer.receive(),异步通过MessageListener。
 
JMS API
jms-programmingModel
1. 通过ConnectionFActory来创建Connection。
2. Connection创建Session,可以指定clientID,实现durable的消息,另外start()开始消息传输。
3. 创建或获取Destination
4. 通过Session和Destination来创建Producer和MessageConsumer,指定Session的Local Transaction和Acknowlege信息,Session管理Local Transaction,创建durable的subscriber,还可以通过Session来创建消息。
5. Producer发送消息,Consumer消费消息。
 
细节概念
1. Persisent
2. Expiration
3. Acknowledgment
4. Durable
5. Local Transaction
6. Redelivery
 
Persistent
传输模式(Delivery Mode),默认是Persistent。如果是非Persistent的,Server当掉,消息也就丢失啦。
API调用: producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
 
Expiration
消息的存活时间,默认消息永不过期。
API调用: producer.setTimeToLive()
 
Acknowledgment
消息收到的确认方式,三种,分别是Session.AUTO_ACKNOWLEDGE, Session.CLIENT_ACKNOWLEDGE和Session.DUPS_OK_ACKNOWLEDGE。
 
AUTO_ACKNOWLEDGE
一次只有一次
对于MessageListener,当onMessage()方法结束后,自动发送确认信息。
 
CLIENT_ACKNOWLEDGE
Client代码来维护,通过调用message.acknowledge(),确认了此Session中所有收到的消息。
对于非Queue和Durable Subscription,消息随着Session的关闭而被drop掉。而对于Queue和Durable Subscription,Server会保留这些信息,重新发送给consumer。
 
对于事务的Session来说,伴随事务的提交,Acknowledgment发生。
 
Durable
Durable是针对Subscription来说的,Durable Subscription在特性上和Queue相同。
Durable Subscription通过Client ID和subscription name来区分,某一时刻,只有一个Client ID的连接,因此只能有一个Client ID下的subscription。
利用JConsole通过JMX可见监控ActiveMQ:
jmsjconsole
图片中显示出Subscription的结构,Subscription->Durable目录下的nesta_client_id和nesta_faint就是Client ID,叶子节点是两个与Client ID同名的subscription name。
 
Durable表示在Subscriber停掉的情况下,还可以收到在down掉这段时间内的消息。
jms-durableSubscriber
从图上可以看出,如果没有Durable的Subscription,Message M2,M4和M5将被丢失。
session.createDurableSubscriber()
session.unsubscribe()
 
Local Transaction
消息发送事务,对于同一Session的多消息发送和多消息接收,作为一个事务。
发送消息和接收消息的两个客户端,拥有各自的Connection和Session,所以是两个事务,不是一个事务。
jms-localTransactions
 
Redelivery
对于参与事务的消费者,它可以session.rollback(),这是server就会重发消息。在ActiveMQ中设置RedeliveryPolicy,ActiveMQ最大重新传输次数为6。
分享到:
评论

相关推荐

    JMS概念及原理,简明扼要

    JMS原理介绍 - 概念、原理及角色说明。简明扼要

    JMX与JMS的概念

    JMX与JMS的概念

    JMS入门文档,JMS入门文档

    三分关于jms的入门文档,适合初步了解jms的基本概念,和浅层的架构体系。

    JMS 教程 - 消息队列、消息服务

    本教程描述了消息服务的概念和一些应用事例,说明了 JMS 的基本概念和结构,并就消息服务的发布/订阅、点对点模式编写了简单代码,最后讨论的JMS的一些高级问题,如食物、可靠性、可恢复性等。

    WebLogic_JMS讲解

    WebLogic_JMS的概念,分类,实现形式,甚至有具体的编码

    JMS规范v1.1官方手册.pdf

    JMS规范v1.1的官方原版,大家学习ActiveMQ的时候可以进行参考。详细介绍了包括连接、session、生产者、消费者、topic、queue等概念。深入学习的必备手册。

    JMS与MDB介绍

    JMS与MDB介绍 基本概念 JMS编程模型 MDB介绍

    深入浅出JMS-JMS介绍说明文档

    深入浅出JMS,主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤。

    WSAD环境下JMS异步通信全攻略

    一、JMS基本概念  1.1 P2P通信  1.2 Pub/Sub通信 二、JMS消息 三、JMS P2P编程  3.1 使用JMS QueueConnection对象  3.2 处理回退事件  3.3 关闭JMS对象  3.4 接收消息  3.5 消息驱动的Bean...

    有关JMS/或j2ee技术的说明与问题

    JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,翻译为Java消息服务。JMS支持点对点和发布/订阅两种消息模型。 编辑本段JMS基本概念

    品优购_day13_SpringJms_V1.31

    品优购电商系统开发第13章消息中间件解决方案JMS 课程目标目标1:理解消息中间件、JMS等概念目标2:掌握JMS点对点与发布订阅模式的收发

    JMS(java消息服务)规范培训教程

    走到这里,我也不想去解释jms spec上那些抽象且复杂的概念了,说的很白,1年多了我自己也没弄懂是个什么东西,也没时间从头到尾去仔细的看,同时我认为没必要,我所关注的是如何让jms跑起来,并且工作正常,所以spec...

    JNDI,JTA和JMS简介

    主要介绍了JNDI,JTA和JMS的相关内容,包括中文释义,概念解释等,需要的朋友可以了解下。

    java书城商店源码-messaging-with-jms-queues:消息传递与jms队列

    这种消息传递类型建立在消息队列、发送方和接收方的概念之上。 每条消息都被寻址到一个特定的队列,接收客户端从为保存它们的消息而建立的队列中提取消息。 在点对点模型中,每条消息都保证由一个消费者以异步方式...

    batch:Spring JMS with ActiveMQ – 发送和接收消息示例

    此代码假装是将 ActiveMQ 与 JMS Spring Beans 一起使用的简单概念证明。 这个想法是查找 Spring 上下文来处理 JMS bean。 配置 您需要配置一个名为 BATCH_CONF 的环境变量,其中包含 conf 文件在本地计算机上的...

    MSMQ to JMS-开源

    该项目只是MSMQ和JMS(JAVA)之间的桥梁。 基于有助于使用Visual C ++创建DLL的JNI概念。 Java方法调用用于生成dll的C ++类,并且此C ++类返回MSMQ的消息。

    Java测试新技术TestNG和高级概念.part2

    4.6 Java消息服务(JMS) 4.7 Java持久API(JPA) 4.8 Enterprise JavaBeans 3.0(EJB3) 4.9 Java API for XML Web Services(JAX-WS) 4.10 Servlets 4.11 XML 4.12 本章小结 第5章 集成 5.1 Spring 5.2 Guice ...

    [ActiveMQ]消息中间件基本概念及安装

    ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的应用环境中,并有许多高级功能。首先简单的介绍一下MQ,MQ英文名Message...

    ActiveMQ快速上手

    ActiveMQ快速上手,包括安装方法,jms相关概念,ActiveMQ高级特性等

Global site tag (gtag.js) - Google Analytics