JMS要点

来源:互联网 发布:淘宝运动服秋装男 编辑:程序博客网 时间:2024/05/01 17:27

主要接口:

ConnectionFactory: 一个创建Connection的受管理对象
 P2P: QueueConnectionFactory
 Pub/Sub: TopicConnectionFactory

 方法:
  createConnection(): 提供可以被JNDI检索的受管理对象, 返回Connection

Connection: 连接到提供者的活动连接
 P2P: QueueConnection
 Pub/Sub: TopicConnection

 方法:
  createSession(boolean, int): 返回Session对象
  start(): 激活提供者发送消息
  stop(): 零时停止发送, 可以重新开始发送
  close(): 关闭到提供者的连接, 释放资源

Destination: 一个封装消息目的地的身份的受管理的对象, 如消息的来源地和目的地
 P2P: Queue
 Pub/Sub: Topic

 方法:

Session: 发送和接受消息的单线程环境
 P2P: QueueSession
 Pub/Sub: TopicSession

 方法:
  createProducer(Destination): 返回一个MessageProducer对象, 向指定的Destination发送消息
  createConsumer(Destination): 返回一个MessageConsumer对象, 接收来自指定的Destination的消息
  commit(): 提交当前事务所有使用的和产生的消息
  rollback(): 回滚当前事务所有使用的和产生的消息
  create<MessageType>Message(...): 一组返回如MapMessage, TextMessage的方法

MessageProducer: 用于发送消息
 P2P: QueueSender
 Pub/Sub: TopicPublisher

 方法:
  send(Message): 发送指示的Message
  setDeliveryMode(int): 设置后续消息的发送模式
  setPriority(int): 设置后续消息的发送优先级
  setTimeToLive(long): 设置后续消息失效前的持续时间

MessageConsumer: 用于接受消息
 P2P: QueueReceiver, QueueBrowser
 Pub/Sub: TopicSubscriber

 方法:
  receive(): 返回下一个到达的消息, 可能会被阻塞
  receive(long): 接收下一个long毫秒内到达的消息, 如果时间限制内没有消息, 返回null
  receiveNoWait(): 如果有一个消息立即可用, 则接收下一个消息, 否则返回null
  setMessageListener(MessageListener): 对象在消息到达时接受它们

MessageListener: 提供消息的异步接受和处理
 onMessage(Message): 提供消息的异步接受和处理

消息系统的组成
 header: 一组标准字段, 客户机和提供者利用它们来标示和路由消息
  JMSMessageID: 标识提供者发送的每一条消息, 发送过程中由提供者设置
  JMSDestination: 消息发送的Destination, 由提供者设置
  JMSDeliveryMode: 包括DeliveryMode.PERSISTENT(被且只被传输一次)和DeliveryMode.NON_PERSISTENT(最多被传输一次)
  JMSTimestamp: 提供者发送消息的时间, 由提供者设置
  JMSExpiration: 消息失效的时间, 是发送方法的生存时间和当前时间值的和, 0表明消息不会过期
  JMSPriority: 由提供者设置, 0最低, 9最高
  JMSCorrelationID: 用来链接响应消息和请求消息, 由发送消息的JMS程序设置
  JMSReplyTo: 请求程序用它来指出回复消息应发送的地方
  JMSType: JMS程序用来指出消息的类型
  JMSRedelivered: 消息被过早的发送给了JMS程序, 程序不知道消息的接受者是谁

 Properties: 给消息提供可选标题字段的实用工具
  JMSXUserID: 发送消息的用户的身份
  JMSXAppID: 发送消息的应用程序的身份
  JMSXDeliveryCount: 尝试发送消息的次数
  JMSXGroupID: 该消息所属的消息组的身份
  JMSXGroupSeq: 该消息在消息组中的序号
  JMSXProducerTxID: 生成该消息的事物的身份
  JMSXConsumerTxID: 使用该消息的事物的身份
  JMSXRcvTimestamp: JMS将消息发送给客户的时间

 body: 发送到接受应用程序的内容, 每个消息接口都专用于它所支持的内容类型
  StreamMessage: 提供一组Java原始值, 这些值是通过标准流操作按顺序来填充和读取的
  MapMessage: 包含一组名-值对
  TextMessage: 包含一个String
  ObjectMessage: 包含一个Serializable Java对象
  BytesMessage: 包含一些未解释字节, 允许对正文进行编码来匹配现有的格式

细节描述
 事务
  Session 可控制事务, 创建Session时将他标注为transacted

 确认
  确认是通知提供者已经成功接收到消息的一种机制。
  如果被处理的是接受消息的Session, 则自动确认

  Session创建时指定确认类型
   Session.DUPS_OK-ACKNOWLEDGE: 消息发送的延迟确认, 只有在预计和处理重复消息时使用
   Session.AUTO_ACKNOWKEDGE: 完成接受消息的方法是自动确认消息的发送
   Session.CLIENT_ACKNOWLEDGE: 调用Message的acknowledge()方法显示确认消息的发送

 消息选择
  利用 Message Selector机制, 对收到的消息进行过滤和分类