簡體   English   中英

架構師迫切希望在JMS上使用SOAP

[英]Architect desperately wants to use SOAP over JMS

我過去曾使用JMS來構建應用程序,它運行良好。 現在我和想要使用Spec:SOAP over Java Message Service 1.0的Architects一起工作。

這個規格過於復雜。 我沒有看到很多實現(除了供應商推動規范)。

這里有人在生產環境中使用此規范嗎? 使用此規范的主要好處是什么?

鏈接: http//www.w3.org/TR/2009/CR-soapjms-20090604/

我使用SOAP over JMS運氣不好。 如果它用於fire-and-forget操作(WSDL中沒有定義響應消息),那么它確實有意義。 在這種情況下,您可以使用WSDL生成客戶端框架,並且可以將WSDL存​​儲在服務注冊表中。 此外,您還可以獲得JMS的所有常見優勢(解耦發送方和接收方,負載平衡,優先級排序,安全性,橋接到多個目的地 - 例如非侵入式審計)。

另一方面,SOAP主要用於請求/回復類型操作。 通過JMS實現請求/回復模式會引入以下問題:

  • 無法正確處理超時。 您永遠不知道請求是否仍在等待傳遞或被卡在被調用的組件中。
  • 響應通常在臨時隊列上發送。 如果客戶端在接收響應之前斷開連接並且沒有明確的時間設置在響應消息上,則臨時隊列可能會卡在JMS服務器中,直到您重新啟動它。
  • 在中間使用JMS服務器會大大增加往返時間並增加不必要的復雜性。
  • JMS提供了一種可靠的傳輸介質,可以將發送方與接收方分離,但在請求/回復的情況下,客戶端不應與服務器分離。 客戶端需要知道服務器是否已啟動且可用。

我能想到的唯一優勢是可以在客戶端不知道的情況下移動或負載均衡服務器,但使用UDDI和HTTP負載均衡器是一種更好的解決方案。

我想說,從建築師的探礦中,同樣的問題是關於為什么要有一個5層互聯網模型,第五個是應用程序,當一個人可以簡單地在套接字級編碼整個應用程序。 從您的應用程序生成或使用的內容(SOA消息)中抽象出傳輸層(在您的情況下為JMS)是一個很好的做法,其中可能的原因是獨立的單元測試以及將來遷移到其他平台的第一個出現在我的腦海中

天哪,我討厭與建築師宇航員合作。 我覺得你的痛苦兄弟。 除了“這是一個標准”之外,他們實際上是否有實際的功能性原因? 這個決定是否會將它們鎖定到特定的EE容器供應商(比如WebSphere)? 那是2002年; 很少有人真正需要它; 事實上,大多數實際的,成功的實現都忽略了SOAP。 除非他們真正需要比JMS或SOAP-over-HTTP單獨提供的更多可靠性,否則您就是在旅途中。

查看Apache CFX站點以獲取一些示例(特定於CFX)。

http://cxf.apache.org/docs/soap-over-jms-10-support.html

經驗法則是真正使用最小的最小值,而不是完整的堆棧。 如果你的建築師宇航員仍然堅持使用整個東西,你可能只是走進一個痛苦的世界。 抱歉。


編輯:

順便說一下,你將使用什么應用容器? WebLogic,JBoss,WebSphere? 哪個Web服務框架? Apache CFX,Axis?

建築師宇航員會喜歡說那些是實施細節。 公牛。 對系統的任何決策都是一個架構決策,這個系統的變化承擔了巨大的成本(或者其實施帶來了顯着的節省)。 這幾乎決定了事情將如何實施(以及變更的成本),因此盡早確定您將使用的是一個架構決策,除非有非常獨立的系統。

關於這個有爭議的主題的一些鏈接:

http://www.subbu.org/blog/2005/03/soap-over-jms http://parand.com/say/index.php/2005/03/29/soap-over-jms-no-such -事情/

SOAP / JMS和SOAP / HTTP用於不同的場景,盡管Message Fire和Request / Response。 SOAP / JMS實際上很簡單,只需使用SoapAction和targetService就可以將發現的(如果需要轉換的)消息傳播到多個sourec。 JMS規范還使用標頭幫助進行復雜路由。

事實上,UDDI以及構建服務器可以用AND作為源來發現從大規模中間件部署(無論引擎架構)作為SOAP / JMS消息到單一SOA Repository Sinks的已發布WSDL(內聯)。 在企業治理中非常重要

因此,當異步性至關重要時,對於線接頭模式來說,這是至關重要的。

SOAP / HTTP和現在的REST(使用動詞名詞模型)最適合可信的子系統調用

你實現了一個經常使用的Web服務的圖像,它往往會運行你的線程,而你承諾,沒有任何消息會丟失。

在會話bean上運行的Web服務實現(服務器)帶有有限數量的線程(比如池中的n個活動PE),它可以同時運行n個Web服務請求。 n + 1請求會發生什么?

MRDE,你沒有答應你的應用程序所有者,沒有消息會丟失。 因此,JMS會保留此功能。 Web服務框架只需將數據存儲在隊列中,這也為負載峰值提供了可靠性。

WS over JMS的有趣之處在於,正在運行的WS請求所用的時間非常短,因此計算重新將立即返回給服務器下一個請求。

這里

SOAP over JMS為SOAP over HTTP提供了另一種消息傳遞機制。 雖然它尚未標准化,因此可能無法跨平台進行互操作,但SOAP over JMS提供比SOAP over HTTP更可靠和可擴展的消息傳遞支持。 隨着JAX-RPC和JSR-109成為J2EE標准的組成部分,使用SOAP over JMS的Web服務中的企業消息傳遞將變得非常成熟。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM