厚積而薄發(fā)

          山不辭土,故能成其高;海不辭水,故能成其深!
          posts - 15, comments - 0, trackbacks - 0, articles - 1
          1. JMS基本概念
               JMS(Java Message Service) 即Java消息服務(wù)。它提供標(biāo)準(zhǔn)的產(chǎn)生、發(fā)送、接收消息的接口簡(jiǎn)化企業(yè)應(yīng)用的開發(fā)。它支持兩種消息通信模型:點(diǎn)到點(diǎn)(point-to-point)(P2P)模型和發(fā)布/訂閱(Pub/Sub)模型。P2P 模型規(guī)定了一個(gè)消息只能有一個(gè)接收者;Pub/Sub 模型允許一個(gè)消息可以有多個(gè)接收者。
              對(duì)于點(diǎn)到點(diǎn)模型,消息生產(chǎn)者產(chǎn)生一個(gè)消息后,把這個(gè)消息發(fā)送到一個(gè)Queue(隊(duì)列)中,然后消息接收者再?gòu)倪@個(gè)Queue中讀取,一旦這個(gè)消息被一個(gè)接收者讀取之后,它就在這個(gè)Queue中消失了,所以一個(gè)消息只能被一個(gè)接收者消費(fèi)。
              與點(diǎn)到點(diǎn)模型不同,發(fā)布/訂閱模型中,消息生產(chǎn)者產(chǎn)生一個(gè)消息后,把這個(gè)消息發(fā)送到一個(gè)Topic中,這個(gè)Topic可以同時(shí)有多個(gè)接收者在監(jiān)聽,當(dāng)一個(gè)消息到達(dá)這個(gè)Topic之后,所有消息接收者都會(huì)收到這個(gè)消息。
               
          簡(jiǎn)單的講,點(diǎn)到點(diǎn)模型和發(fā)布/訂閱模型的區(qū)別就是前者是一對(duì)一,后者是一對(duì)多。
          2. 幾個(gè)重要概念
             Destination:消息發(fā)送的目的地,也就是前面說的Queue和Topic。創(chuàng)建好一個(gè)消息之后,只需要把這個(gè)消息發(fā)送到目的地,消息的發(fā)送者就可以繼續(xù)做自己的事情,而不用等待消息被處理完成。至于這個(gè)消息什么時(shí)候,會(huì)被哪個(gè)消費(fèi)者消費(fèi),完全取決于消息的接受者。
            Message:從字面上就可以看出是被發(fā)送的消息。它有下面幾種類型:
                  StreamMessage:Java 數(shù)據(jù)流消息,用標(biāo)準(zhǔn)流操作來順序的填充和讀取。
                  MapMessage:一個(gè)Map類型的消息;名稱為 string 類型,而值為 Java 的基本類型。
                  TextMessage:普通字符串消息,包含一個(gè)String。
                  ObjectMessage:對(duì)象消息,包含一個(gè)可序列化的Java 對(duì)象
                  BytesMessage:二進(jìn)制數(shù)組消息,包含一個(gè)byte[]。
                  XMLMessage: 一個(gè)XML類型的消息。
              最常用的是TextMessage和ObjectMessage。
             Session:與JMS提供者所建立的會(huì)話,通過Session我們才可以創(chuàng)建一個(gè)Message。
             Connection:與JMS提供者建立的一個(gè)連接??梢詮倪@個(gè)連接創(chuàng)建一個(gè)會(huì)話,即Session。
             ConnectionFactory:那如何創(chuàng)建一個(gè)Connection呢?這就需要下面講到的ConnectionFactory了。通過這個(gè)工廠類就可以得到一個(gè)與JMS提供者的連接,即Conection。
             Producer:消息的生產(chǎn)者,要發(fā)送一個(gè)消息,必須通過這個(gè)生產(chǎn)者來發(fā)送。
             MessageConsumer:與生產(chǎn)者相對(duì)應(yīng),這是消息的消費(fèi)者或接收者,通過它來接收一個(gè)消息。
              前面多次提到JMS提供者,因?yàn)镴MS給我們提供的只是一系列接口,當(dāng)我們使用一個(gè)JMS的時(shí)候,還是需要一個(gè)第三方的提供者,它的作用就是真正管理這些Connection,Session,Topic和Queue等。

              通過下面這個(gè)簡(jiǎn)圖可以看出上面這些概念的關(guān)系。

          ConnectionFactory---->Connection--->Session--->Message
          Destination + Session------------------------------------>Producer
          Destination + Session------------------------------------>MessageConsumer


              那么可能有人會(huì)問: ConnectionFactory和Destination 從哪兒得到?
              這就和JMS提供者有關(guān)了. 如果在一個(gè)JavaEE環(huán)境中, 可以通過JNDI查找得到, 如果在一個(gè)非JavaEE環(huán)境中, 那只能通過JMS提供者提供給我們的接口得到了.

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长岛县| 化德县| 嘉黎县| 繁峙县| 邓州市| 循化| 当涂县| 亚东县| 辽阳市| 遂溪县| 正安县| 静安区| 醴陵市| 金寨县| 望奎县| 福鼎市| 多伦县| 彝良县| 临颍县| 阿克陶县| 海安县| 榆林市| 湘潭市| 塘沽区| 浪卡子县| 古田县| 昌都县| 庆安县| 巫山县| 南通市| 黑水县| 临江市| 尉氏县| 本溪| 德保县| 安国市| 图们市| 资中县| 沙河市| 威宁| 昔阳县|