簡體   English   中英

同一個tomcat服務器中WAR之間的通信 - JNDI與REST API

[英]Communication between WARs within the same tomcat server - JNDI vs REST API

我有一個要求,前端應用程序(用Spring MVC編寫)需要與另一個后端應用程序通信。 兩個應用程序都將在同一個tomcat實例中運行WAR。 為了理解目的,我們將其命名為frontend.war和backend.war。

我在各種論壇上發過很多帖子,發現了很多不同的策略, 其中一些如下:

1) 使用EJB - 排除,EJB是維護開銷,我們沒有計划創建專用的EAR來實現這一目標; 因為我們計划添加更多不同的forntnd戰爭(應用程序模塊),這些戰爭將與同一個backend.war進行通信。

2) 使用JNDI :看起來很有希望,但它需要有一場戰爭來了解第二次戰爭暴露的“界面”,它的簽名。 因此,它使它彼此緊密耦合。 服務合同的未來變化可能成為噩夢。

3) 使用REST API :這看起來是一種理想的方法,只有一點需要通過HTTP調用,因此它可能很慢。

其他方法如commonContext(在Spring中)。 ContextSwitching在應用程序中確實有自己的問題。

我傾向於使用REST API方法來實現這個解決方案; 因為它更清潔,易於維護。 此外,http協議已經成熟,並且具有許多可用於未來開發的專有技術。

我的查詢: A)是否有可能讓tomcat意識到特定的webservice調用確實是對運行相同JVM / Server的應用程序的調用(類型為'internal'); 而不是“外部”網絡服務電話?

B)如果我使用的網址如' http:// localhost:8080 / rest / ...'(請注意,backend.war不適用於外部世界,因此不需要域名); 它能做到嗎?

我正在尋找一種方法,它可以讓我獲得JNDI(同一JVM內的通信)的性能和REST的靈活性(只要公共URL完好無損,您就可以隨時更改任何內容)。

如果你有數千戰爭,也許嘗試企業服務總線方法。 WSO2將是一個很好的候選人。 您可以隨時更改入口點定義,同時保持后端完好無損。

增加的好處:您的戰爭可以部署在多個服務器上和/或移動,但您只保留一個入口點; 只有一個地址要改變。

創建一個常用函數的jar文件,將它們打包為兩個項目 - 一個服務層!

或者,使用rest並堅持使用不同的tomcat實例/服務器 - 微服務!

我會使用任何“遠程調用”方法,如Java RMI或CORBA。 后者也適用於Java世界之外。 這些比其他人有一些好處:他們使用TCP而不是HTTP,因此更輕,序列化對象而不是創建新對象(如json或其他)。 另外,我認為RMI很容易理解和使用。

暫無
暫無

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

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