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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章