2011-02-11 142 views
2

我們有一個Java API,需要使用SOAP/REST Web服務層進行補充/向前。如何使用帶Java的SOAP/REST Web服務異步回調

怎樣才能實現異步跨進程/服務器的界限呼叫使用
一)SOAP Web服務
B)的RESTful web服務

一些方法可能需要多次調用響應請求。

我們將使用Java/J2ee使用像CXF或Axis這樣的庫來實現SOAP /平安服務,或者使用Jax-RS/WS。

任何示例?陷阱?

謝謝,

+0

見http://stackoverflow.com/questions/10877223/asynchronous-web-service-soap – cemsbr 2013-03-28 23:36:36

回答

1

您的問題不清楚。我正在解釋您的問題,因爲您希望您的服務器端代碼以異步方式調用遠程REST Web服務。如果是這樣,那麼你最好的選擇就是使用java.util.concurrent的Futures特性,它將完成你想要的。如果我對問題的解釋是錯誤的,請更新您的問題,確切地說明異步操作需要發生的地方。

0

對於REST Web服務(除了GET)其他所有內容(POST/PUT ..)是異步的,它會返回操作的HTTP狀態代碼。

如果你想讓GET也是異步的,那麼你將不得不使用線程,我們在Spring框架中使用@Async註釋(它在內部產生一個線程)做了一次。

從get返回回調URL作爲響應並使用線程異步處理請求。

除此之外,對於SOAP/REST,一旦獲得請求,您就可以將其發佈到JMS隊列中以使服務異步。

1

阿卡http://akka.io/

大框架,強大的性能 - 這是他們的權利:

「」」

簡單的併發

編寫使用演員,STM &交易者簡單正確的併發應用程序。

事件驅動架構

異步事件驅動架構的完美平臺。永不阻止。

真正可擴展性多核或使用異步消息傳遞的多個節點

規模進行。

容錯

擁抱失敗。編寫使用Erlang式Actor監督器層次結構自我修復的應用程序。

透明遠程

遠程演員爲您提供高性能的透明的分佈式編程模型。

斯卡拉&的Java API

Scala和Java的API以及Spring和Guice的整合。部署在您的應用程序服務器中或獨立運行。 「」」

1

Async Http Client是專爲這種類型的問題,設計了一個開源庫,它利用期貨和包裝了很多細節和麻煩了使異步調用的。

作者有一個很好的getting started guide並且有一個活躍的discussion group作者是一位非常有才華的開發者和項目正在不斷髮展

從文檔:。

該庫使用Java非阻塞I/O 來支持異步 操作。默認異步 提供商是建立在Netty的 (http://www.jboss.org/netty)時,Java NIO 客戶端服務器插槽框架 從JBoss的頂部,但庫暴露了 配置提供SPI允許 輕鬆插入其他框架。

1

@Vivek

GET是異步和其他HTTP方法 不是。

這是不正確的。請繼續閱讀AJAX :-)

0

實現異步操作的最佳方法之一是使用回調函數。對於REST API,API和Rest客戶端的設計應該支持這一點。例如,客戶端類應該自己傳遞或者它的內部類作爲列表器。服務器端的Rest API應該維護請求標識並在地圖中回調監聽器。一旦處理完成,它可以根據來自地圖的請求ID調用監聽器的方法。

0

真正的問題:你爲什麼要稱它爲異步?查看了Java EE方面的並行處理解決方案之後,不建議您自己在容器內生成子線程。

在你的情況下,它看起來像下面這樣: 1.你打算在WSDL(REST或SOAP或兩者)中創建一個包裝合同,如果你的客戶不只是瀏覽器(AJAX)(我的意思是你如果是需要從採用者(服務器端)調用的REST端點,則可以創建一個@CallBack結束ponint(http://docs.oracle.com/cd/E15051_01/wls/docs103/webserv_adv/callback.html) 或
-side),使用jAX_RS 2。0功能

注:以上假定它是點對點的,但在一個異步的方式

這裏有幾個選項:

  1. 如果你正在尋找調用REST或SOAP或其它一些功能異步,你可以使用WorkManager的API(JSR) 或
  2. 使用JMS和使用一個請求 - 應答模式,如果你需要它(短期運行)和平行
  3. 使用調用多個端點WS-BPEL(僅WSDL結束點) - 這是一個O ASIS標準以及
  4. 使用SCA(與任何技術的任何組分),其可以包含WS-BPEL組件的組件(無狀態或有狀態)在BPEL引擎如Apache ODE或IBM過程服務器和其它組件和運行領域展開合作。這是一個標準