2016-01-03 171 views
1

我正在爲我的公司開發新的Web服務原型,我們正在考慮Apache Camel作爲我們的集成框架。這裏是高層建築的快速破敗:Apache Camel架構

-IBM WebSphere MQ作爲排隊的解決方案

1)我們收到的http請求

2)異步堅持這一要求

圖3a)做所述請求一些處理

3B)發送到另一個層用於進一步處理

4)異步更新DB

5的請求記錄)迴應呼叫者

我想要做的是:

當一個HTTP請求時,把它放在要處理的隊列,等待n秒。如果網絡處理程序在n秒內沒有得到響應,請使用自定義消息回覆調用者 一旦請求在處理隊列中,駱駝路由正在偵聽此隊列進行處理。當它從隊列中提取消息時,將請求的副本放在不同的隊列中以異步持久化。對請求做一些處理。然後將其發送到另一個隊列以進一步處理並等待響應。然後將其放回持久隊列以異步更新。 然後迴應網絡監聽器。然後網絡監聽器響應網頁調用者。

我正在閱讀關於Apache Camel的所有信息,並且有關於此的大量信息。我可能會在信息過載的一點點,並在下面的擔憂任何幫助,將不勝感激:

1) 如果Web偵聽器使用沒有的replyTo隊列一個INOUT交換(與第一處理層)定義它會爲響應創建一個臨時隊列。如果這個請求超時會發生什麼?我知道我可以在交易所設置requestTimeout,如果超時,可以捕獲該異常並設置自定義消息。但是,這個臨時隊列會被殺死嗎?或者隨着時間的推移,它們會隨着時間的推移而增加?

2) 當涉及到擴展處理層(在不同機器上添加更多相同路由的實例)時,通常情況下,如果提取響應的實例(使用固定的隊列答覆)是不同的而不是提取請求的實例,所有關於原始請求的信息都在消息中,因此不需要跨實例共享數據(除非共享數據(例如聚合等)。

當構建這樣的系統時,任何其他技巧和竅門都會非常有幫助。

謝謝!

+1

您是在請求/回覆場景中工作還是將對調用者的響應發送到另一個URI? –

+1

用於啓動http請求,即req/reply ...儘管如此,會有一些異步請求沒有回覆,有些請求/回覆使用臨時/固定回覆隊列 – A2345sooted

回答

1

我想說這個解決方案太複雜了,太多的領域在維護和複雜性方面都很難。混合異步和同步通信的步驟太多。

爲什麼不能簡單地解決以下步驟:

  1. 的同期http請求
  2. 上MQ
  3. Put消息與回覆到標題
  4. 消息被拾取並傳送到後端
  5. 如果答覆在給定時間內沒有收到交易終止。
  6. 對隊列的回覆被刪除
  7. 請求者被通知。