2013-05-02 69 views
0

業務情況是,我們希望我們的應用程序每隔一段時間通知第三方,以便在應用程序中發生某個事件時向他們發送一些數據。我們可以說我們是發佈商,第三方是訂戶。如何從java異步發送肥皂消息

如果他們有一個soap服務期望soap消息作爲通知,那麼與他們的服務進行通信的最佳實踐方式是什麼?我希望它是異步的,因爲我不希望我們的應用程序放慢速度來通知它們。我還需要保證交付,如果他們的服務停止,請重試。

從周圍看,它看起來像我可以使用activeMQ - 但不會要求他們有一個JMS目的地,可以連接到他們的MQ端?

我理想地喜歡的是某種透明的消息代理,它將代表我發送肥皂請求,然後重試,直到獲得成功的響應。像這樣的東西存在,並且這是一個明智的建築選擇這種情況?

非常感謝!

回答

1

SOAP是一個請求/響應協議。雖然底層傳輸可以是異步的,但它通常隱藏在它似乎同步的客戶端。

處理這類通知的最好方法純粹是通過JMS/MQ。但是,這確實假設您已經控制或希望更改客戶端,以便它可以使用隊列中的消息。

如果情況並非如此,那麼隊列仍然是一條路。

通知應發佈到隊列中。進程或線程需要使用來自該隊列的通知,並使用適當的重試邏輯進行SOAP調用,以便在該通話失敗時重新排隊通知。根據您的要求,這可能與內存隊列一樣簡單,或者,如果您需要通知來保存進程重新啓動,則可以使用外部隊列服務器,如ActiveMQ。

無論哪種方式,該模式是一樣的:

  • 你排隊的通知在另一個線程或另一個進程
  • 消費者消費的通知,使SOAP調用
  • 如果SOAP調用失敗你重新排隊的通知
+0

感謝您的回覆 - 這是非常有用的..所以你從你自己的隊列消耗,使肥皂調用在一個單獨的線程,並重新排隊,如果他們失敗.. 太好了謝謝! – Bruce 2013-05-02 13:10:52