一篇文章理解JMS
来源:互联网 发布:人工智能试题及答案 编辑:程序博客网 时间:2024/06/13 21:18
JMS
JMS是什么
- JMS Java Message Service Java消息服务。是JAVA EE中的一个技术,JMS定义了JAVA中访问消息中间件的接口。类似JDBC。定义了接口,并不具体实现。实现JMS接口消息的中间件称为JMS Provider.例如:ActiveMQ.
JMS基本概念
JMS Message
- JMS Message JMS消息,JMS消息由三部分组成
1.消息头:每个消息头都有对应的setter、getter方法。
2.消息属性:如果需要除消息头以外的值,可以使用消息属性。
3.消息体: 封装具体的消息数据。
JMS producer
- JMS Producer: 消息生产者,创建和发送JMS Message的客户端应用。
JMS consumer
- JMS Consumer: 消息消费者,接收和处理JMS Message的客户端应用。消息的消费可以采取以下两种消费方式。
1.同步消费: 通过调用消费者的receive方法从目的地中显示的提取消息,receive方法会一直阻塞,知道消息到达。
2.异步消费: 通过为消费者注册一个消息监听器,定义消息到达时采取的动作。
JMS domains
- JMS domains: 消息传递域。也可以理解为消息传递的方式。JMS规范中定义了两种消息传递的机制,点对点(point-to-point, 简写PTP)和发布/订阅(publish/subscribe,简写pub/sub).
1.PTP的特点如下:
(1) 每个消息只能有一个消费者。PTP目的地被称为队列(Queue)。
(2) 消费者和生产者之间没有时间相关性。也就是说消息生产者不管消费者是否处于运行状态都可以发送消息,而消费者也可以不管生产者是否在线都可以接收消息。
2.pub/sub 特点。
(1) 每个消息可以有多个消费者。生产者把消息发布到一个“主题”上。
(2) 生产者和消费者之间有时间相关性。也就是说,消费者只能消费它订阅的主题之后,主题发布的消息。而且如果没有进行持久订阅,那么消费者只能消费在线时生产者发布的消息。JMS规范允许进行持久订阅。一定程度上减少了时间的相关性。pub/sub目的地被称为主题(Topic)
Connection Factory
- connection factory:连接工厂,用来创建连接到JMS Provider连接对象。
JMS Connection
- connection:连接对象。封装了客户与JMS Provider的一个虚拟连接。
JMS Session
- session:生产和消费消息的一个单线程上下文。会话用于创建生产者、消费者、目的地、消息等,会话提供了一个事物性的上下文,在会话中,一组发送和接收消息被组合到一个操作中。
Destination
- destination:消息发送和接收的目的地。
JMS Client
- client:用来接收消息的应用。
JMS消息结构
- JMS Message 由消息头,消息属性,消息体三部分组成。
消息头
- 消息头包含消息的识别信息和路由信息,消息头的一些标准属性如下:
1.JMSDestination:消息发送目的地,由Send方法设置,主要指点对点中的Queue与pub/sub中的Topic,自动分配。
2.JMSDeliveryMode:传送模式,传送模式分为如下两种:
(1) 持久模式:一条持久性的消息应该被传送“一次仅仅一次”。一次就是这个消息一定会被传递一次。例如JMS提供者出现故障,那么在恢复之后这条消息不会丢失,会再次被传递,直到成功。仅仅一次,就只要传递成功就不会再次被传递。
(2) 非持久模式:一条非持久的消息“最多被传送一次“。最多一次意味着这条消息有可能丢失。如服务器故障,恢复后次消息会被丢失。
3.JMSExpiration:由Send方法设置。消息过期时间。默认为永久不过期。
4.JMSPriority:消息优先级,等级从0-9.默认为4.数值越大,优先级越高。
5.JMSMessageID:唯一识别每个消息的标志。由JMS Provider产生,自动分配。
6.JMSTimestamp:JMS Provider调用Send方法时候自动设置,是消息被返送和消息被消费之间的实际时间差。
7.JMSCorrelationID:用来连接到另外一个消息。典型的应用就是在回复消息中连接到原消息。JMSCorrelationID可以由开发者设置称为任何值。
8.JMSReplyTo: 提供本消息回复消息的目的地地址。由开发者设置。
9.JMSType: 消息类型识别符,由开发者设置。
10.JMSRedelivered:这个有两个值,true或者false。如果为true说明这条消息被客户端收到过,但是因为某种原因没有被签收。
消息属性
- 消息属性包含三种类型:
1.应用程序添加的属性。如:message.setStringProperty(“userName”,”张三”);
2.JMS定义的属性。使用”JMSX”作为属性的前缀名。
3.JMS供应商定义的属性。
消息体
- JMS API定义了5中形式的消息体,也可以理解为5中消息类型。TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage.
JMS的可靠性机制
消息确认
JMS消息只有被确认之后,才能认为被成功的消费了。一般消息被成功消费分三个步骤,客户接受消息,处理消息,确认消息。消息何时被确认取决于创建会话时的应答模式。应答模式有三种:
1.Session.AUTO_ACKNOWLEDGE:客户从receive方法成功返回,或者从MessageListener.onMessage方法成功返回时候,会话自动确认客户收到消息。
2.Session_CLIENT_ACKNOWLEDGE:客户通过调用acknowledge方法确认消息。这个确认是会话级别的确认。也就是说只要确认一个被消费消息,那么这个会话上的所有被消费的消息都会被确认。
3.Session_DUPS_ACKNOWLEDGE:会话迟钝的确认消息。选择这个模式有可能出现重复的消息。JMSRedelivered会是true.消息持久性
JMS支持两种消息提交模式:
1.PERSISTENT:持久模式。
2.NON_PERSISTENT:非持久模式。这个两种模式上面有介绍。消息优先级
消息优先级,等级从0-9.默认为4.数值越大,优先级越高。消息过期
消息过期时间。默认为永久不过期。持久订阅
持久订阅,首先消息的生产者必须使用持久模式提交信息,消费者可以通过createDurableSubscriber方法来创建一个持久订阅。持久订阅在某一个时刻只能有一个激活的订阅者。持久订阅创建之后会一直保存,直到应用程序在会话上调用unsubcribe方法。本地事物
JMS session提供了commit与rollback方法来控制事物。事物提交意味着生产的所有消息被提交,消费的所有消息被确认。回滚意味着生产的所有消息被销毁,消费的所有消息被恢复并重新提交,除非它们过期。
JMS的API结构
JMS应用的基本步骤
- 创建Connection Factory
- 通过factory创建Connection。
- 启动Connection
- 通过Connection创建JMS Session
- session创建destination
- session 创建producer 并设置destination。
- session创建consumer,设置目的地。或者注册一个JMS Message listener.
- 发送或者接受Message(s)
- 关闭所有JMS资源。
- 一篇文章理解JMS
- jms文章
- 一篇文章通透理解序列号实现原理
- JMS 理解
- 理解JMS
- 一篇WebLogic server8.1 JMS入门的不错的文章(转贴)
- 一篇文章学会spring boot(包括jms和hessian的集成)
- 技术文章 | 一篇文章学会spring boot(包括jms和hessian的集成)
- activemq点对点以及发布订阅模式代码(参考前一篇jms学习理解)
- JMS不错的文章
- 转载一篇理解堆和栈区别的好文章
- 转载一篇理解堆和栈区别的好文章
- 转载一篇理解堆和栈区别的好文章
- 转载一篇理解堆和栈区别的好文章
- 转一篇关于矩阵的文章:《理解矩阵》
- 一篇关于面向对象理解的文章推荐
- 一篇帮助理解git rebase的好文章 ( by quqi99 )
- 转载一篇理解堆和栈区别的好文章
- 利用SqlBulkCopy快速大批量导入数…
- oracle
- Ubuntu Server下设置CUPS打印服务
- 定义SQL查询结果中小数精度
- SQLite管理工具推荐
- 一篇文章理解JMS
- VB.net使用PrintForm打印窗体
- 解决VS2010中打开窗体设计时报错
- MySQL的备份与还原
- 数字图像处理实验(12):PROJECT 05-03,Periodic Noise Reduction Using a Notch Filter
- Android入门开发一个自动访问指定…
- VB.net窗体中调用项目内嵌HTML进行…
- Python 2.7使用豆瓣的pip镜像源
- 统计学习精要 (Elements of Statistical Learning ) 习题 5.10