欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
消息傳遞和 Java 消息服務(wù)(JMS)

消息傳遞和 Java 消息服務(wù)(JMS)

消息傳遞系統用于構建高可靠、可伸縮及靈活的分布式應用程序。本文從大體上討論了消息傳遞系統,簡(jiǎn)要敘述了它們的特性及類(lèi)型,然后描述開(kāi)發(fā)人員如何可以使用 Java 消息服務(wù)(Java Message Service ,JMS) 編寫(xiě)基于消息的應用程序。

正如許多以前在同步、可靠性、可伸縮性和安全性方面的未知問(wèn)題一樣,分布式應用程序潛在的問(wèn)題也是不斷增長(cháng)的。一種解決方案是建立在松散耦合組件基礎上的消息傳遞系統,這些組件之間通過(guò)消息進(jìn)行通信。

Java 消息服務(wù)提供了一致的 API 集合,讓開(kāi)發(fā)人員可以訪(fǎng)問(wèn)許多消息傳遞系統產(chǎn)品的公共特性。

什么是消息傳遞系統?
從它的本質(zhì)上講,消息傳遞系統允許不同的非耦合應用程序以異步方式進(jìn)行可靠通信。消息傳遞系統體系結構一般用各個(gè)組件間的點(diǎn)對點(diǎn)關(guān)系代替客戶(hù)端/服務(wù)器模型,其中每個(gè)點(diǎn)可以發(fā)送消息到其他點(diǎn),或從其他點(diǎn)接收消息。

相對于更加傳統的分布式計算模型,消息傳遞系統提供了許多強大的優(yōu)勢。首先,它們倡議在消息消費者和消息生產(chǎn)者之間進(jìn)行“松散耦合”。在生產(chǎn)者和消費者之間存在著(zhù)高級匿名:對于消息消費者,它不關(guān)心 誰(shuí) 產(chǎn)生消息,在網(wǎng)絡(luò )上生產(chǎn)者在 哪里,或者消息是 何時(shí) 產(chǎn)生的。

這使得可以構建動(dòng)態(tài)、可靠和靈活的系統,由此可以修改子應用程序的整體組合,而不會(huì )影響到系統的其余部分。 消息傳遞系統的其他優(yōu)勢包括高可伸縮性(商業(yè)實(shí)現鼓吹可以支持好幾萬(wàn)個(gè)客戶(hù)端,以及支持每秒進(jìn)行好幾萬(wàn)個(gè)操作)、容易集成到異構網(wǎng)絡(luò )以及由于減少了單點(diǎn)故障而提高了可靠性。

由于消息傳遞系統固有的可靠性和可伸縮性,所以它們用于解決許多商業(yè)和計算科學(xué)問(wèn)題。例如,它們是這樣的一些不同的應用程序的基礎:工作流、網(wǎng)絡(luò )管理、通信服務(wù)(通過(guò) IP 的語(yǔ)音、有聲郵件、尋呼機和電子郵件)、客戶(hù)服務(wù)、天氣預報和供應鏈管理等系統。此外,消息傳遞系統是無(wú)價(jià)的,因為它作為“glue”(膠水)把完全不同的系統聯(lián)系在一起,使之能夠合并和獲取消息。

消息系統類(lèi)型
通常使用兩種消息傳遞系統模型。

發(fā)布/訂閱
發(fā)布/訂閱 (pub/sub) 消息傳遞系統支持事件驅動(dòng)模型,在這種模型中,信息消費者和生產(chǎn)者參與消息的傳輸。生產(chǎn)者“發(fā)布”事件,而消費者“訂閱”感興趣的事件并消費事件。生產(chǎn)者把消息把與特定主題關(guān)聯(lián)起來(lái),然后消息傳遞系統根據消費者所注冊的感興趣主題,把消息路由給消費者。

點(diǎn)對點(diǎn)
在點(diǎn)對點(diǎn)消息傳遞系統中,消息是被路由到各個(gè)消費者的,該消費者維護“傳入”消息隊列。消息傳遞應用程序發(fā)送消息到指定隊列,然后客戶(hù)端從隊列中檢索消息。 供應商經(jīng)常會(huì )支持點(diǎn)對點(diǎn)模型或發(fā)布/訂閱消息傳遞模型,或者同時(shí)支持這兩種模型。

既然已經(jīng)從大體上認識了消息系統,現在讓我們來(lái)看一下 Java 開(kāi)發(fā)人員是如何可以利用它們的能力的。

Java 消息服務(wù)
Java 消息服務(wù)是 J2EE (Java 2 Enterprise Edition) 套件的一部分,它提供了標準 API,Java 開(kāi)發(fā)人員可以使用這些 API 來(lái)訪(fǎng)問(wèn)企業(yè)消息系統的共同特性。JMS 支持發(fā)布/訂閱和點(diǎn)對點(diǎn)模型,并允許創(chuàng )建由任意 Java 對象組成的消息類(lèi)型。

設計目標
JMS 的基本設計目標是為了提供一組一致的接口,消息傳遞系統客戶(hù)端可以獨立地使用這些接口,而不必關(guān)心基礎消息系統的提供商。 這樣,客戶(hù)端應用程序不僅可以跨計算機體系結構和操作系統進(jìn)行移植,而且也可以跨消息傳遞產(chǎn)品進(jìn)行移植。寫(xiě)到 JMS 的客戶(hù)端應用程序將正常工作,而不用在所有符合 JMS 的消息傳遞系統上做修改(這可以與組件所運行的基礎中間件上的 Enterprise Java Beans 組件的獨立性進(jìn)行比較)。

JMS 也設計成:

最小化消息傳遞系統提供商為其產(chǎn)品實(shí)現 JMS API 所需的工作量。
提供了普通消息傳遞系統的大多數功能。
許多消息系統提供商已經(jīng)為它們的產(chǎn)品實(shí)現了 JMS,允許 Java 訪(fǎng)問(wèn)它們系統的功能。

JMS 客戶(hù)端可以使用 Java 設施
由于 JMS 客戶(hù)端是基于 Java 的,因此它們可以利用現有的 Java API,比如:用于數據庫訪(fǎng)問(wèn)的 JDBC、JavaBeans 組件模型、用于命名服務(wù)的 JNDI、用于客戶(hù)端事務(wù)控制的 JTA 或用于企業(yè)應用程序服務(wù)的任何 J2SE 和 J2EE API。

JMS 細節
現在,我們從消息開(kāi)始,來(lái)看一下使用 JMS 構建消息傳遞系統客戶(hù)端的細節。

什么是消息?
在消息傳遞系統中,應用程序之間的通信點(diǎn)是消息本身,因此使用 JMS 的開(kāi)發(fā)人員必須理解消息。

盡管消息傳遞系統之間消息定義區別甚大,但 JMS 提供了統一的方式用于描述和訪(fǎng)問(wèn)消息。JMS 消息由三部分組成:

消息標題
用于消息標識。例如,標題用于確定指定的消息是否適合于“訂閱者”。
屬性
用于特定于應用程序、特定于提供商及可選的標題字段。
消息體
保存消息的內容。支持幾種格式,其中包括:TextMessages——用于包裝簡(jiǎn)單的 String; 和 ObjectMessages——用于包裝任意的 Java 對象(它們必須是可序列化的)。也支持其他的格式。
TextMessages
TextMessage 用于包裝簡(jiǎn)單的 String 對象。在只傳遞字符串的情形下,這是有用的。期望許多消息傳遞系統將以 XML 為基礎,TextMessages 是它們的自然容器。

創(chuàng )建 TextMessage 對象是簡(jiǎn)單的,如下面兩行代碼所指出的那樣:

TextMessage message =
session.createMessage();
message.setText("hello world");

(在下一節,我們將看到 session 對象)。

以這種方式創(chuàng )建的 TextMessage 準備發(fā)布到消息傳遞系統中。

ObjectMessages
顧名思義,ObjectMessage 是包裝了 Java 對象的消息。任何可序列化的 Java 對象均可用作 ObjectMessage。如果多個(gè)對象必須在單個(gè)消息中傳輸,那么可以使用包含幾個(gè)可序列化對象的 Collection 對象(比如 List 或 Set)。

下面展示了如何創(chuàng )建 Object 消息:

ObjectMessage message = session.createObjectMessage();
message.setObject(myObject);

關(guān)于 JNDI
像許多 J2EE API 一樣,JMS 利用了 JNDI(Java 命名和目錄接口)來(lái)發(fā)現所需資源。詳細討論 JNDI 超出了本文的范圍,但可從如下地址找到更多的進(jìn)一步信息:Java 命名和目錄接口 (JNDI)。

構建 JMS 客戶(hù)端
可以遵循下面的基本步驟來(lái)構建典型的 JMS 客戶(hù)端:

創(chuàng )建到消息傳遞系統提供商的連接。
創(chuàng )建會(huì )話(huà)用于發(fā)送和接收消息。
創(chuàng )建 MessageProducers 和 MessageConsumers 來(lái)創(chuàng )建或接收消息。
一旦這些步驟執行完畢,消息生產(chǎn)的客戶(hù)端將創(chuàng )建消息,并把它們發(fā)布到主題,而消息消費的客戶(hù)端將偵聽(tīng)與主題有關(guān)的消息,并在它們到達時(shí)消費它們。

為了詳細展示它是如何工作的,我們研究了典型的消息生產(chǎn)者,它用于在 pub/sub 消息傳遞系統中把消息發(fā)布到特定的主題。注意,為簡(jiǎn)潔起見(jiàn),省略了所有異常處理代碼。

創(chuàng )建連接
連接為客戶(hù)端提供了對基礎消息傳遞系統的訪(fǎng)問(wèn),并執行資源分配和管理。連接是使用 ConnectionFactory 創(chuàng )建的,而 ConnectionFactory 通常是使用 JNDI 查找的。

下面這些代碼展示了創(chuàng )建連接過(guò)程中涉及的一些步驟:

Context messaging = new InitialContext();
// get JNDI context
TopicConnectionFactory topicConnectionFactory =
(TopicConnectionFactory)
messaging.lookup("TopicConnectionFactory");
TopicConnection topicConnection =
topicConnectionFactory.createTopicConnection();


創(chuàng )建會(huì )話(huà)
會(huì )話(huà)是輕量級 JMS 對象,它提供了用于生產(chǎn)和消費消息的上下文。會(huì )話(huà)用于生成消息生產(chǎn)者和消息消費者,以及用于生成消息本身。

TopicSession session =
topicConnection.createTopicSession(false,
Session.CLIENT_ACKNOWLEDGE);

createTopicSession() 的兩個(gè)參數控制事務(wù)和消息的確認。

查找主題
主題(也稱(chēng)標題、組或頻道)是通過(guò) JNDI 來(lái)查找的。主題標識了發(fā)送中或接收中的消息。在發(fā)布/閱系統中,訂閱者訂閱了指定的主題,而發(fā)布者把主題與它們發(fā)布的消息關(guān)聯(lián)。

這里我們創(chuàng )建了一個(gè)稱(chēng)為“WeatherData”的主題。

Topic weatherTopic = messaging.lookup("WeatherData");

啟動(dòng)連接
在上面的初始化過(guò)程中,為了防止初始化期間出現不可預知的行為,消息流是被禁止的。一旦初始化完成,必須告訴連接開(kāi)始消息流。

topicConnection.start();

創(chuàng )建消息生產(chǎn)者
在發(fā)布/訂閱領(lǐng)域中,生產(chǎn)者把消息發(fā)布到指定主題。下面代碼展示了發(fā)布者的創(chuàng )建及后續的簡(jiǎn)單文本消息的生成和發(fā)布。

TopicPublisher publisher =
session.createPublisher(weatherData);
TextMessage message = session.createMessage();
message.setText("temperature: 35 degrees");

publisher.publish(message);


創(chuàng )建訂閱者及點(diǎn)對點(diǎn)系統的 JMS 客戶(hù)端遵循相似的過(guò)程??梢栽?[1] 中找到這一過(guò)程的完整細節。

結束語(yǔ)
我們已經(jīng)看到在使用 JMS 來(lái)構建基于消息傳遞的應用程序的過(guò)程中涉及的基本概念。在編寫(xiě) JMS 代碼之前,你將需要訪(fǎng)問(wèn)符合 JMS 的消息傳遞系統??蓮娜缦碌刂帆@取符合 JMS 的供應商的列表:

JMS 供應商


創(chuàng )建和構建基于 JMS 的應用程序是簡(jiǎn)單的,可是它為構建強大、可伸縮和高可靠的分布式系統提供了基礎。

注意,JMS 遠遠比本文討論的要復雜,并為下面的這些提供了支持:管理、安全、錯誤處理和恢復、優(yōu)化、分布式事務(wù)、消息排序和消息確認等。

有關(guān) Java Message Service 的進(jìn)一步信息和文檔,請參閱:

Java Message Service 文檔

參考資料
本文中的許多內容是以 Java Message Service 文檔 為基礎的。

本文的再版須有 SunServer 許可。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JMS應用的簡(jiǎn)單例子
JMS簡(jiǎn)介
JMS與MQ詳解
JavaEE7 新特性 JMS 2.0 公共審查草案發(fā)布
JMS入門(mén)之實(shí)例
使用 JMS 技術(shù)作為數據復制的解決方案
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久