JMS消息服务 API解析

  JMS(Java Message Service)消息服务,具体详解请参看系列文章第一张,JMS的原理其实很简单,用过JDBC,可能理解JMS更加容易,JMS只提供API定义,具体由不同厂商或产品实现,如:AactiveMQ、Tomcat JMS、Weblogic JMS,实现可能存在差异,但应用完全遵照API定义。

  JMS API可以分为3个主要部分:公共API、点对点API和发布/订阅API。以下列举发送和接收JMS消息的有关接口:

公共API点对点API发布/订阅API并发API描述
ConnectionFactoryQueueConnectionFactoryTopicConnectionFactoryConnection生产工厂,可以使用JNDI从提供者处获得。
DestinationQueueTopic可以使用JNDI从提供者处获得。
ConnectionQueueConnectionTopicConnection使用ConnectionFactory创建Connection,通常,一个应用程序只会有一个Connection对象。
SessionQueueSessionTopicSession保存着用于消息传送的事务性工作单元,使用Connection创建Session,通常,一个应用程序可以由多个Session对象。
MessageMessageMessage-消息载体。
MessageProducerQueueSenderTopicPublisher消息生产者处理工作单元。
MessageConsumerQueueReceiverTopicSubscriber消息消费者处理工作单元。

  JMS消息由消息头、属性和不同类型的消息有效负载组成。

  **消息头:**消息头提供了和消息有关的元数据,描述了消息创建者、创建时间、数据有效程度等信息。

消息头名称方法消息头描述
JMSDestinationgetJMSDestination()
setJMSDestination(…)
使用一个Queue或Topic对象来标识目的地,二者都是Destination类型。
JMSDeliveryModegetDeliveryMode()
setDeliveryMode(…)
JMS中,传送模式有两种:持久性模式和非持久性模式。持久性模式保证消息“一次且仅一次”,非持久性消息不对消息的送达做任何保证,主要原因在于JMS提供者出现故障时,消息的处理方式。
JMSMessageIDgetJMSMessageID()
setJMSMessageID(…)
消息标识,标识消息的唯一性字符串。
JMSTimestampgetJMSTimestamp()
setJMSTimestamp(…)
由MessageProducer在调用send()操作时自动设置。它包含的是JMS提供者接收消息的时间,而不是该消息的实际传送时间。
JMSExpirationgetJMSExpiration()
setJMSExpiration(…)
Message有效期 ,用来防止把过期的消息传给消费者,可以用这个消息头来设置某条消息的有效期。消息发出前设置有效。
JMSRedeliveredgetJMSRedelivered()
setJMSRedelivered(…)
表示可能客户端之前发送过该消息,但是没有接收到确认通知,则设置JMSRedelivered=true并进行传输。
JMSPrioritygetJMSPriority()
setJMSPriority(…)
消息生产者通过该消息头分配一个优先级。优先级共有两类:04为普通优先级,59为加急优先级。JMS提供者不严格要求按照优先级发送消息,但是必须保证加急消息要先于普通消息。默认是4级。
JMSReplyTogetJMSReplyTo()
setJMSReplyTo(…)
应答目的地,类型为Destination。通过设置此消息头,消息生产者期望消息消费者对消息进行应答,并将消息放入指定消息目的地。
JMSCorrelationIDgetJMSCorrelationID()
setJMSCorrelationID(…)
通过该消息头,用于将当前消息与已存在的某条消息或应用程序的特性ID关联起来。通常情况下,JMSCorrelationID用于将一条消息标记为对应JMSMessageID标识的上一条消息的应答。
JMSTypegetJMSType()
setJMSType(…)
标识消息结构和负载类型,可选消息头。用于标识消息结构和有效负载类型。注意:这个消息头并未指明被发送的消息类型(MapMessage、TextMessage等),而是JMS提供者使用的内部消息仓库中的一个条目。主要用于非JMS客户端与JMS提供者进行消息交换时使用。

  消息属性:

​  消息属性是附加在消息传输过程中的消息头,可以用于消息过滤使用。Message接口提供了针对String、byte、int、short、long、float、double、boolean、Object类型。消息属性有三种类型:应用程序特定的属性、JMS定义的属性和提供者特定的属性。

属性类型相关方法属性描述
应用定义属性setStringProperty(…, …)
setIntProperty(…, …)
setShortProperty(…, …)
setLongProperty(…, …)
setFloatProperty(…, …)
setDoubleProperty(…, …)
setBooleanProperty(…, …)
setObjectProperty(…, …)
clearProperties()
getPropertyNames()
由开发者确认在消息传递时加入各种属性,属性KEY和VALUE可任意定义。设置属性API:Message.setStringProperty(“xxxxx”, “xxxxx”),除了setStringProperty针对String、byte、int、short、long、float、double、boolean、Object这七种类型都有与之对应的API方法。消息发出后,属性只读,不可更改。不过,通过调用clearProperties(),可以修改的属性。getPropertyNames()用于获取该消息所有属性的枚举。
JMS定义属性setInitProperty(…, …)JMS定义属性与应用定义属性特性相同。JMS定义属性大部分由JMS提供者来设置,可作为可选消息头,提供的JMS定义属性:JMSXUserID、JMSXAppID、JMSXProducerTXID、JMSXConsumerID、JMSXRcvTimestamp、JMSXDeliveryCount、JMSXState、JMSXGroupID、JMSXGroupID、JMSXGroupSeq。
提供者定义属性JMS_每个JMS提供者都可以在自定义一组私有属性。使用方法其方式类似。

  消息确认机制:

  消息消费者在接收消息后,需要设置消息的确认模式,以反馈给JMS提供者。确认机制共分三种:

确认机制机制描述
AUTO_ACKONWLEDGEJMS消费者在接收每条消息后自动确认。
DUPS_OK_ACKONWLEDGE允许重复消息,对重复接收同一条数据要求不严格时,可以选用此模式
CLIENT_ACKONWLEDGEJMS消费者在收到每条消息后需要显示确认。

  在基于遵循JMS标准的提供者进行系统通信时,主要涉及到以上几大部分内容。对于这几部分API的含义和使用需要比较熟练,在JMS应用中才会如鱼得水。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值