WIKI使用導(dǎo)航
站長百科導(dǎo)航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導(dǎo)航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應(yīng)用
- 美國十大主機
JMS
JMS(Java Message Service),即Java消息服務(wù),是一組Java應(yīng)用程序接口(Java API),它提供創(chuàng)建、發(fā)送、接收、讀取消息的服務(wù)。由Sun公司和它的合作伙伴設(shè)計的JMS API定義了一組公共的應(yīng)用程序接口和相應(yīng)語法,使得Java程序能夠和其他消息組件進(jìn)行通信。
概述[ ]
JMS是一種與廠商無關(guān)的API,用來訪問消息收發(fā)系統(tǒng)。它類似于JDBC (Java Database Connectivity):這里,JDBC是可以用來訪問許多不同關(guān)系數(shù)據(jù)庫的API,而JMS則提供同樣與廠商無關(guān)的訪問方法,以訪問消息收發(fā)服務(wù)。許多廠商目前都支持 JMS,包括 IBM 的 MQSeries、BEA的Weblogic JMS service和Progress的SonicMQ。
JMS使您能夠通過消息收發(fā)服務(wù)(有時稱為消息中介程序或路由器)從一個JMS客戶機向另一個JML客戶機發(fā)送消息。消息是JMS中的一種類型對象,由兩部分組成:報頭和消息主體。報頭由路由信息以及有關(guān)該消息的元數(shù)據(jù)組成。
消息主體則攜帶著應(yīng)用程序的數(shù)據(jù)或有效負(fù)載。根據(jù)有效負(fù)載的類型來劃分,可以將消息分為幾種類型,它們分別攜帶:簡單文本 (TextMessage)、可序列化的對象 (ObjectMessage)、屬性集合 (MapMessage)、字節(jié)流 (BytesMessage)、原始值流 (StreamMessage),還有無有效負(fù)載的消息 (Message)。
消息收發(fā)系統(tǒng)是異步的,也就是說,JMS 客戶機可以發(fā)送消息而不必等待回應(yīng)。比較可知,這完全不同于基于RPC的基于遠(yuǎn)程過程的系統(tǒng),如EJB 1.1、CORBA和Java RMI的引用實現(xiàn)。在 RPC 中,客戶機調(diào)用服務(wù)器上某個分布式對象的一個方法。在方法調(diào)用返回之前,該客戶機被阻塞;該客戶機在可以執(zhí)行下一條指令之前,必須等待方法調(diào)用結(jié)束。
在 JMS 中,客戶機將消息發(fā)送給一個虛擬通道(主題或隊列),而其它 JMS 客戶機則預(yù)訂或監(jiān)聽這個虛擬通道。當(dāng) JMS 客戶機發(fā)送消息時,它并不等待回應(yīng)。它執(zhí)行發(fā)送操作,然后繼續(xù)執(zhí)行下一條指令。消息可能最終轉(zhuǎn)發(fā)到一個或許多個客戶機,這些客戶機都不需要作出回應(yīng)。
JMS的通用接口集合以異步方式發(fā)送或接收消息。異步方式接收消息顯然是使用間斷網(wǎng)絡(luò)連接的客戶機,諸如移動電話和PDA的最好的選擇。另外, JMS采用一種寬松結(jié)合方式整合企業(yè)系統(tǒng)的方法,其主要的目的就是創(chuàng)建能夠使用跨平臺數(shù)據(jù)信息的、可移植的企業(yè)級應(yīng)用程序,而把開發(fā)人力解放出來。
兩種消息模型[ ]
Java消息服務(wù)支持兩種消息模型:Point-to-Point消息(P2P)和發(fā)布訂閱消息(Publish Subscribe messaging,簡稱Pub/Sub)。JMS規(guī)范并不要求供應(yīng)商同時支持這兩種消息模型,但開發(fā)者應(yīng)該熟悉這兩種消息模型的優(yōu)勢與缺點。
P2P消息模型[ ]
P2P消息模型是在點對點之間傳遞消息時使用。如果應(yīng)用程序開發(fā)者希望每一條消息都能夠被處理,那么應(yīng)該使用P2P消息模型。與Pub/Sub消息模型不同,P2P消息總是能夠被傳送到指定的位置。
Pub/Sub模型[ ]
Pub/Sub模型在一到多的消息廣播時使用。如果一定程度的消息傳遞的不可靠性可以被接受的話,那么應(yīng)用程序開發(fā)者也可以使用Pub/Sub消息模型。換句話說,它適用于所有的消息消費程序并不要求能夠收到所有的信息或者消息消費程序并不想接收到任何消息的情況。
JMS應(yīng)用程序接口[ ]
- ConnectionFactory 接口(連接工廠)
用戶用來創(chuàng)建到JMS提供者的連接的被管對象。JMS客戶通過可移植的接口訪問連接,這樣當(dāng)下層的實現(xiàn)改變時,代碼不需要進(jìn)行修改。管理員在JNDI名字空間中配置連接工廠,這樣,JMS客戶才能夠查找到它們。根據(jù)消息類型的不同,用戶將使用隊列連接工廠,或者主題連接工廠。
- Connection 接口(連接)
連接代表了應(yīng)用程序和消息服務(wù)器之間的通信鏈路。在獲得了連接工廠后,就可以創(chuàng)建一個與JMS提供者的連接。根據(jù)不同的連接類型,連接允許用戶創(chuàng)建會話,以發(fā)送和接收隊列和主題到目標(biāo)。
- Destination 接口(目標(biāo))
目標(biāo)是一個包裝了消息目標(biāo)標(biāo)識符的被管對象,消息目標(biāo)是指消息發(fā)布和接收的地點,或者是隊列,或者是主題。JMS管理員創(chuàng)建這些對象,然后用戶通過JNDI發(fā)現(xiàn)它們。和連接工廠一樣,管理員可以創(chuàng)建兩種類型的目標(biāo),P2P模型的隊列,以及Pub/Sub模型的主題。
- MessageConsumer 接口(消息消費者)
由會話創(chuàng)建的對象,用于接收發(fā)送到目標(biāo)的消息。消費者可以同步地(阻塞模式),或異步(非阻塞)接收隊列和主題類型的消息。
- MessageProducer 接口(消息生產(chǎn)者)
由會話創(chuàng)建的對象,用于發(fā)送消息到目標(biāo)。用戶可以創(chuàng)建某個目標(biāo)的發(fā)送者,也可以創(chuàng)建一個通用的發(fā)送者,在發(fā)送消息時指定目標(biāo)。
- Message 接口(消息)
是在消費者和生產(chǎn)者之間傳送的對象,也就是說從一個應(yīng)用程序創(chuàng)送到另一個應(yīng)用程序。一個消息有三個主要部分:
消息頭(必須):包含用于識別和為消息尋找路由的操作設(shè)置。
一組消息屬性(可選):包含額外的屬性,支持其他提供者和用戶的兼容??梢詣?chuàng)建定制的字段和過濾器(消息選擇器)。
一個消息體(可選):允許用戶創(chuàng)建五種類型的消息(文本消息,映射消息,字節(jié)消息,流消息和對象消息)。
消息接口非常靈活,并提供了許多方式來定制消息的內(nèi)容。
- Session 接口(會話)
表示一個單線程的上下文,用于發(fā)送和接收消息。由于會話是單線程的,所以消息是連續(xù)的,就是說消息是按照發(fā)送的順序一個一個接收的。會話的好處是它支持事務(wù)。如果用戶選擇了事務(wù)支持,會話上下文將保存一組消息,直到事務(wù)被提交才發(fā)送這些消息。
在提交事務(wù)之前,用戶可以使用回滾操作取消這些消息。一個會話允許用戶創(chuàng)建消息生產(chǎn)者來發(fā)送消息,創(chuàng)建消息消費者來接收消息。
JMS的目標(biāo)[ ]
- 定義一組消息公用概念和實用工具。
- 最少化程序員使用消息時必須學(xué)習(xí)的概念。
- 最大化消息應(yīng)用程序的可移植性。
- 最小化實現(xiàn)一個提供者所需的工作量。
- 為點對點和 pub/sub 域 提供客戶機接口?!坝颉笔怯糜谠谇懊嬗懻摰南⒛P偷?JMS 術(shù)語。(注意:提供者不需要實現(xiàn)兩個域。)