国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

WebLogic消息服務的運行時管理

2019-11-18 12:43:41
字體:
來源:轉載
供稿:網(wǎng)友

  隨著Internet服務的發(fā)展,其分布越來越廣泛,這使得企業(yè)消息傳遞逐漸成為Web應用基礎架構最重要的部分之一。應用程序可以在短時間內傳輸大量的消息,而且通常傳輸?shù)臄?shù)據(jù)是底層的業(yè)務流程非常必需的。

  但是,無論這些數(shù)據(jù)有多么重要,很多企業(yè)應用程序的配備不足以使它們在碰到常見的消息傳遞問題時恢復正常。當然,消息可以保存在數(shù)據(jù)存儲區(qū)中,但系統(tǒng)經(jīng)常缺少可靠且足夠靈活的監(jiān)控和治理機制——像失敗消息的適當處理這么重要的功能也可能被忽略掉。

  本文將從治理的角度討論WebLogic消息傳遞和java消息服務(Java Message Service,JMS)。我們將看看如何給予業(yè)務要害型消息以應有的關注,以及如何使用治理工具確保應用程序的消息流順暢無阻。

  企業(yè)應用程序中介體

  企業(yè)消息傳遞基本上全是異構系統(tǒng)間的數(shù)據(jù)交換,是一種計算機間通信形式,它始終都需要專門的措施以確保其成功運行。假如缺少某種中介體,那么維護跨網(wǎng)絡的進程間通信會非常困難,因此我們使用諸如WebLogic JMS之類的面向消息中間件(message-oriented-middleware,MOM)系統(tǒng)來為我們解決保證交付、消息通知以及其他所有的固有復雜問題。可以將MOM視為企業(yè)應用程序的郵政服務。

  Weblogic JMS是一種高度可靠的服務,假如它對已發(fā)送的消息做出確認,那么用戶就完全可以確信該消息已被接收。但是,確切地說,保證就到此為止了;客戶端應用程序(消息生產者)無法了解接收端應用程序(消息消費者)是否已成功地處理了該消息,除非用戶實現(xiàn)自己的確認系統(tǒng)。

  假如存在問題,那到底是什么問題呢?

  只要兩臺計算機進行通信,那么遲早會出現(xiàn)故障。無法訪問子系統(tǒng)、網(wǎng)絡故障、消息溢出、死鎖等等,這些全是用戶可能碰到的一些常見問題。不要試圖保證永遠不會發(fā)生故障,而是要確保做好應對故障的預備。需要針對每一種處理失敗的情況找出其各自的糾正措施。通過自動重試可以很輕易地修復某些問題(如:子系統(tǒng)忙),而另外一些問題則需要人工干預。況且,許多服務不支持任何形式的重新處理或錯誤處理等,這使得故障恢復必須由客戶端應用程序來完成。

  我們假設:用戶的業(yè)務模型將首先使用戶盡一切可能處理消息,不行的話才會放棄并向客戶端應用程序發(fā)出否定確認。在這種情況下,用戶可能要自動重試幾次處理;若無效,那么應有人能夠對失敗消息做人工檢查。現(xiàn)在來看一種在實踐中達成此目的的常見方法。

  消息治理的兩種方法

  一種非常健壯的消息治理技術是將全部的失敗消息發(fā)送至一個錯誤隊列,并讓消費者將其包括的數(shù)據(jù)和屬性保存到一個數(shù)據(jù)庫中。隨后,治理員會對該消息進行分析,并選擇是否要重新創(chuàng)建消息,然后再次發(fā)送。使用數(shù)據(jù)庫來存儲消息使得數(shù)據(jù)具有高度完整性且操作方便。下面是該實現(xiàn)所需的主要步驟:

  1.在config.xml文件中為目的地配置一個持久性錯誤隊列。錯誤隊列又稱為死消息隊列,失敗消息將被自動發(fā)送到這個常規(guī)JMS目的地。通過在用戶的當前目的地(active destination)中添加ErrorDestination參數(shù)可將消息定向至錯誤隊列。

  2.為錯誤隊列配置消費者,通過使用javax.jms.Message類的accessor方法使其讀取已存儲的失敗消息的數(shù)據(jù)和屬性。

  3.將恢復性數(shù)據(jù)與消息的原始目的地名稱一起保存到一個數(shù)據(jù)庫表格中。可以通過使用Message類的getJMSDestination()方法獲得原始目的地。

  4.編寫幾個方法,以便從數(shù)據(jù)庫讀取數(shù)據(jù),顯示數(shù)據(jù),通過根據(jù)已保存的數(shù)據(jù)重新創(chuàng)建消息、并將其發(fā)送至原始目的地,從而提供重新發(fā)送消息的選擇。

  完成上述步驟后,就可以得到一個非常靈活的治理消息傳遞問題的系統(tǒng)。該實現(xiàn)需要大量的工作,但是假如用戶熟悉JMS并了解其基本知識,那么執(zhí)行起來就十分簡單。雖然這種解決方案非常不錯并且經(jīng)常被使用,但是還有一種更易于實現(xiàn)的方法,它無需使用數(shù)據(jù)庫,并且可以為用戶提供額外的好處,即,可以使用戶在運行時看到任何隊列的內容。

  用于瀏覽隊列的QueueBrowser

  JMS API中包括支持全面訪問排隊消息的工具。下面要討論的工具是javax.jms.AueueBrowser接口及消息選擇器(message selector)。QueueBrowser是一種可在給定隊列中檢索消息而不消費這些消息的接口。它可返回全部消息,在消息選擇器的幫助下還可以返回全部消息的一個子集。

  另一種可供選擇的隊列治理方法是使用消極錯誤隊列來存儲失敗消息,并使用QueueBrowser列出這些失敗消息。然后可挑選出單個消息,對其進行重新發(fā)送、復制或刪除操作。  

  下文是關于開發(fā)簡單的處理失敗消息的隊列治理系統(tǒng)的分步說明:

  在config.xml文件中為目的地配置持久性錯誤隊列。不需要為錯誤隊列配置或編寫任何消費者。

  使用QueueBrowser接口顯示錯誤隊列中的全部消息。對隊列中消息的瀏覽非常簡單,只需編寫幾行代碼即可實現(xiàn)(見清單)。

  清單1:瀏覽隊列內容

public Enumeration getQueuedMessages(
 javax.jms.Queuesession qSession,
 javax.jms.Queue queue)
 throws javax.jms.JMSException
{
 javax.jms.QueueBrowser browser =
    qSession.createBrowser(queue);
 return browser.getEnumeration();
}



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石屏县| 苍溪县| 平舆县| 井冈山市| 鲜城| 兴业县| 永和县| 西充县| 武汉市| 怀集县| 湛江市| 南木林县| 通州市| 林芝县| 漠河县| 正定县| 游戏| 星座| 彭水| 宝清县| 遵化市| 汤阴县| 阿拉善盟| 黄骅市| 五指山市| 平度市| 科技| 宜兴市| 吉安市| 博爱县| 大冶市| 连江县| 绩溪县| 浪卡子县| 崇州市| 长岭县| 拉孜县| 安丘市| 连城县| 东平县| 花垣县|