JMS

1 企业消息系统
    1.1 面向消息的中间件(MOM)
    1.2 提供了基于存储和转发的应用程序之间的异步数据发送
    1.3 特点
        1.3.1 消息灵活性
            1.3.1.1 如果网络不可用,mom可以存储消息知道链接可用再发送给接收者
            1.3.1.2 发送消息时,接收者可以不再执行状态,mom将保留消息直到接收者检索消息为止
        1.3.2 松耦合
            1.3.2.1 可以随时替换消息接收者
        1.3.3 pub/sub 发布和订阅
            1.3.3.1 mom起到代理作用将一个主题已发表的消息发送给所有该主题的订阅者
2 概述
    2.1 应用程序组成
        2.1.1 jms客户机
            2.1.1.1 用jms发送和接受消息的java程序
        2.1.2 非jms客户机
        2.1.3 消息
        2.1.4 jms提供者
    2.2 管理对像
        2.2.1 ConnectionFactory
            2.2.1.1 用于创建到消息提供者的底层消息系统的链接
        2.2.2 Destination
            2.2.2.1 指定发送消息的目的地或接受消息的来源
    2.3 接口
        2.3.1 ConnectionFactory
            2.3.1.1 创建Connection的受管理对象
            2.3.1.2 ptp:QueueConnectionFactory
            2.3.1.3 pub/sub:TopicConnectionFactory
        2.3.2 Connction
            2.3.2.1 到提供者的活动连接
            2.3.2.2 ptp:QueueConnection
            2.3.2.3 pub/sub:TopicConnection
        2.3.3 Destination
            2.3.3.1 封装消息目的地的受管理对象
            2.3.3.2 ptp:Queue
            2.3.3.3 pub/sub:Topic
        2.3.4 Session
            2.3.4.1 发送和接收消息的单线程环境
            2.3.4.2 ptp:QueueSession
            2.3.4.3 pub/sub:TopicSession
        2.3.5 MessageProducer
            2.3.5.1 用于发送消息
            2.3.5.2 ptp:QueueSender
            2.3.5.3 pub/sub:TopicPublisher
        2.3.6 MessageConsumer
            2.3.6.1 用于接收消息
            2.3.6.2 ptp:QueueReceiver,QueueBrowser
            2.3.6.3 pub/sub:TopicSubscriber
    2.4 开发jms程序步骤
        2.4.1 通过jndi查询ConnectionFactory
        2.4.2 通过jndi查询一个或多个destination
        2.4.3 用ConnectionFactory创建一个Connection
        2.4.4 用Connection创建一个或多个Session
        2.4.5 用session和Destination创建所需要的MessagePriducer和MessageConsumer
        2.4.6 启动Connection
    2.5 Message接口
        2.5.1 所有消息都是从该接口继承
        2.5.2 组成
            2.5.2.1 header
                2.5.2.1.1 一组标准字段,用于标识和路由消息
                2.5.2.1.2 String:JMSMessageID:唯一标识提供者发送的每条消息,由提供者设置,client只能在                                    message  发送后才能确定id
                2.5.2.1.3 Destination:JMSDestination:消息发送的目的地,由提供者设置
                2.5.2.1.4 int:JMSDeliverMode:传递模式,可能值->DeliveryMode.PERSISTENT(只被传递一次),
                    DeliveryMode.NON_PERSISTENT(最多传递一次,可能不传递)
                2.5.2.1.5 long:JMSTimestamp:发送消息的时间,由提供者设置
                2.5.2.1.6 long:JMSExpiration:消息失效时间,值是在发送过程中计算的,是发送方法的生存时间                                    (time-to-live)值和当前时间值的和
                2.5.2.1.7 int:JMSPrioritymessage优先级,由提供者设置,0为最低,9为最高
                2.5.2.1.8 String:JMSCorrelationID:用来链接响应消息与请求消息,发送消息的 JMS 程序设置
                2.5.2.1.9 Destination:JMSReplyTo:回复消息应发送的地方,由发送消息的 JMS 程序设置
                2.5.2.1.10 String:JMSType:消息的类型,一些提供者维护着一个消息类型仓库,并用该字段引用仓库中的定义类型,JMS 程序不应该使用这个字段
                2.5.2.1.11 boolean:JMSRedelivered:是否多次传递
            2.5.2.2 Properties
                2.5.2.2.1 添加标准字段之外的header
                2.5.2.2.2 标准属性
                    2.5.2.2.2.1 String:JMSXUserID:发送消息的用户的身份
                    2.5.2.2.2.2 String:JMSXApplID:发送消息的应用程序的身份
                    2.5.2.2.2.3 int:JMSXDeliveryCount:已经尝试发送消息的次数
                    2.5.2.2.2.4 String:JMSXGroupID:消息组id
                    2.5.2.2.2.5 int:JMSXGroupSeq:消息组序号
                    2.5.2.2.2.6 String:JMSXProducerTXID:生成消息的事务身份
                    2.5.2.2.2.7 String:JMSXConsumerTXID:使用该消息的事务的身份
                    2.5.2.2.2.8 Long:JMSXRcvTimestamp:将消息发送给客户的时间
            2.5.2.3 body
                    2.5.2.3.1 包含将发送到接收应用程序的内容。每一个消息接口都专用于它所支持的内容类型
                    2.5.2.3.2 格式
                        2.5.2.3.2.1 每一种格式都是由一个扩展 Message 的接口定义的
                        2.5.2.3.2.2 StreamMessage:包含一组 Java原始值,这些值是通过标准流操作按顺序进行填充和读取的。
                        2.5.2.3.2.3 MapMessage:包含一组名称-值对,名称是 string,值是 Java 原始值
                        2.5.2.3.2.4 TextMessage:包含一个String
                        2.5.2.3.2.5 ObjectMessage:包含一个Serializable Java 对象
                        2.5.2.3.2.6 BytesMessage: 包含一些未解释字节
    2.6 事务
        2.6.1 将一组已产生的消息和一组已使用的消息组织为原子工作单位
        2.6.2 Session 对象控制事务,创建 Session 时将它标注为 transacted
        2.6.3 已处理的 Session 总是有一个当前事务,也就是说,它begin();commit() 和 rollback() 可以终止一个

事务并自动开始另一个事务
    2.7 确认
        2.7.1 通知提供者已经成功接收到消息的一种机制
        2.7.2 被处理的是接收消息的 Session ,则确认的处理是自动的
        2.7.3 如果被处理的不是 Session ,则在创建 Session 时确定确认的类型
        2.7.4 类型
            2.7.4.1 Session.DUPS_OK_ACKNOWLEDGE:消息发送的延迟回执,它通过最小化工作的重复来减少开销,只有在可以预计和处理重复消息时,才可以使用这种确认
            2.7.4.2 Session.AUTO_ACKNOWLEDGE:完成接收消息的方法时自动确认消息的发送
            2.7.4.3 Session.CLIENT_ACKNOWLEDGE:通过调用 Message 的 acknowledge() 方法显式确认消息发送
    2.8 消息选择
        2.8.1 对收到的消息进行过滤和分类
        2.8.2 消息选择器是一个包含表达式的 String ,该表达式的语法是基于 SQL92 的子集的
        2.8.3 选择是基于与标题字段和属性的匹配度的,正文值不能用于选择
3 公用接口
    3.1 公用接口独立于域,但cilent代码的行为与运行时处于操作状态的域的特定于域的行为是相匹配
    3.2 ConnectionFactory
        3.2.1 可以从JNDI检索的受管理对象
        3.2.2 建立了到提供者的连接
        3.2.3 createConnection()
    3.3 Connection
        3.3.1 createSession(boolean, int):返回一个 Session 对象。boolean 参数指出 Session 是否被处理, int 则指出确认模式
        3.3.2 start():激活提供者发送消息
        3.3.3 stop():临时停止消息的发送,可以用 start() 重新开始发送
        3.3.4 close():关闭到提供者的连接,并释放以它的名义占用的所有资源
    3.4 Session
        3.4.1 用来发送和接收消息的单线程的上下文
        3.4.2 createProducer(Destination):返回一个 MessageProducer 对象,向指定的 Destination 发送消息
        3.4.3 createConsumer(Destination):返回一个 MessageConsumer 对象来接收来自指定 Destination 的消息
        3.4.4 commit(): 提交当前事务的所有使用的或者产生的消息
        3.4.5 rollback():
        3.4.6 create<MessageType>Message(...):一组返回 <MessageType>Message 的方法
    3.5 Destination
        3.5.1 封装消息的目的地。它是一个从 JNDI 检索的受管理对象
    3.6 MessageProducer
        3.6.1 send(Message):发送指示的 Message
        3.6.2 setDeliveryMode(int): 设置后续消息的发送模式
        3.6.3 setPriority(int):后续发送消息的优先级
        3.6.4 setTimeToLive(long):后续发送消息失效前的持续时间,以毫秒计
    3.7 MessageConsumer
        3.7.1 receive():返回下一发到达的消息,该方法在消息可用之前会受到阻塞
        3.7.2 receive(long):接收在 long 毫秒内到达的下一个消息,如果在时间限制内没有消息到达,则该方法返回 null
        3.7.3 receiveNoWait:如果有一个消息立即可用,则接收下一个消息,如果没有消息可用,则该方法返回 null
        3.7.4 setMessageListener(MessageListener):
    3.8 MessageListener
        3.8.1 有一个单一方法——onMessage(Message)——的接口,它提供了消息的异步接收和处理
4 PTP
    4.1 QueueConnectionFactory
        4.1.1 createQueueConnection()
    4.2 QueueConnection
        4.2.1 createQueueSession(boolean, int)
        4.2.2 start()
        4.2.3 stop()
        4.2.4 close()
    4.3 QueueSession
        4.3.1 createSender(Queue):返回 QueueSender来向指定的 Queue 发送消息
        4.3.2 createReceiver(Queue):返回 QueueReceiver 对象来接收来自指定的 Queue 的消息
        4.3.3 createBrowser(Queue):返回一个 QueueBrowser 对象来浏览指定 Queue 上的消息
        4.3.4 commit()
        4.3.5 rollback()
        4.3.6 create<MessageType>Message(...)
    4.4 Queue
        4.4.1 封装了点对点目的地
        4.4.2 是一个从 JNDI 中检索的受管理对象
    4.5 QueueSender
        4.5.1 send(Message)
        4.5.2 setDeliveryMode(int)
        4.5.3 setPriority(int)
        4.5.4 setTimeToLive(long)
    4.6 QueueReceiver
        4.6.1 receive()
        4.6.2 receive(long)
        4.6.3 receiveNoWait
        4.6.4 setMessageListener(MessageListener)
        4.6.5 接收消息时,在接收消息后从队列中删除她们
    4.7 QueueBrowser
        4.7.1 可以查看队列中的消息而不删除它们
        4.7.2 getEnumeration():返回一个可以用来扫描队列中消息的java.util.Enumeration
5 Pub/sub
    5.1 TopicConnectionFactory
        5.1.1 createTopicConnection()
    5.2 TopicConnection
        5.2.1 createTopicSession(boolean, int)
        5.2.2 start()
        5.2.3 stop()
        5.2.4 close()
    5.3 TopicSession
        5.3.1 createPublisher(Topic):返回 TopicPublisher 对象来向指定的 Topic 发送消息
        5.3.2 createSubscriber(Topic):返回 TopicSubscriber 对象来接收指定 Topic 中的消息,订阅只持续到对象的生存周期,只在它对象处于活动状态时才接收消息
        5.3.3 createDurableSubscriber(Topic, String):String 给出订阅者的名字。如果对象没有处于活动状态,则通过 JMS 保留 持久的 订阅者的消息,并将它发送给以后用相同名称创建的订阅者对象
        5.3.4 unsubscribe(String):结束名为 String 的订阅者的订阅
        5.3.5 commit()
        5.3.6 rollback()
        5.3.7 create<MessageType>Message(...)
    5.4 Topic
        5.4.1 封装了一个 pub/sub 目的地
    5.5 TopicPublisher
        5.5.1 publish(Message)
        5.5.2 setDeliveryMode(int)
        5.5.3 setPriority(int)
        5.5.4 setTimeToLive(long)
    5.6 TopicSubscriber
        5.6.1 receive()
        5.6.2 receive(long)
        5.6.3 receiveNoWait
        5.6.4 setMessageListener(MessageListener)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值