2014-05-19 64 views
1

這是一個相當普遍的問題,但是您會使用使用JAX-RS在兩臺不同主機上運行的兩個服務器服務(利用Resteasy客戶端)進行通信嗎? 或者你會堅持更傳統的EJB遠程調用嗎?用於服務器到服務器通信的JAX-RS 2.0(Resteasy客戶端)

我有點擔心以下潛在問題: - 保持HTTP連接池 - 將每個客戶端,而不是全球應用服務器 - 不優化如果兩個服務都在同一臺主機上(EJB在這種情況下,調用將是本地的) - 授權(憑證):在配置RestClient與容器管理的應用程序本身管理的EJB - 還有什麼?

有沒有反饋意見? 感謝您的幫助。

回答

0

JAX-RS的大多數實現都有一個客戶端API,因此如果在兩個項目之間共享註釋接口,安裝應該很容易。通訊可能比其他解決方案慢,因爲您必須序列化/反序列化所有參數和響應,通常採用XML或JSON格式。我並不擔心優化進程間通信,因爲與本地主機的通信仍然比遠程機器快得多。如果您希望公開部分此API,REST將是最佳選擇,無論性能如何。

如果通訊只會在內部,而您確實關心性能,您可以使用更專門的框架,如Protocol Buffers。 JAX-RS是JavaEE標準,REST雖然已經很成熟,但可能比性能更重要。對於更大,更復雜,基於JavaEE的系統,一個通用的解決方案是使用消息和集成框架,如Apache ActiveMQ和Apache Camel,它們也支持像Apache CXF這樣的JAX-WS/JAX-RS框架,並且應該優化進程間通訊。對於小型應用程序來說,這看起來像是過度殺傷。

我從來沒有使用EJB,所以我無法真正地將它與其他解決方案進行比較。從我聽說的情況來看,整個EJB方法是複雜的,並且在業界還沒有很好地適應。我也會擔心一些關於跨平臺兼容性的問題。

我會選擇一個不太複雜且易於設置的解決方案。最後一件事:根據我的經驗,當您希望兩個應用程序經常在同一臺計算機上運行並希望對其進行優化時,它們可能首先應該合併到單個服務器應用程序中,或者可能是其中一個服務器應該是另一個可選的插件。