2012-11-09 96 views
0

I'introducin彈簧集成,而不是我們項目中的遺留集成架構。這種架構支持發送者和接收者。每個發件人可以配置3個目的地。彈簧整合備份通道

  1. 主要數據流,消息應該交付。那可以是 文件系統,jms,郵件等
  2. 備份流程。將每個收到的消息存儲到備份目標。通常它是文件appender,每個消息存儲在文件末尾。這也可以是jms隊列。如果整個系統發生故障並且數據丟失,備份使我們有機會獲得消息並重放
  3. 失敗流程。如果我們無法發送消息到目的地(無連接,格式化失敗,無法創建消息),則消息將被放入此隊列中。

春季集成網關看起來很合適。我可以使用主流的默認請求通道,錯誤流的錯誤通道。備份流的問題。如何複製網關傳入的消息並將其置於備份通道?

PS 更確切地說,這裏是測試和代碼。

https://github.com/semenodm/Coding-Exercises/tree/master/spring-integration/spring-integration/src

測試i_want_my_sender_put_message_into_fail_queue_when_sending_failed是失敗了,因爲搭線將始終把消息到其隊列無論失敗或主流的成功。

我不想添加自定義攔截器來處理這個邏輯,並使用配置來處理這個問題。

回答

0

如果您訂閱這兩個適配器的直接通道,無負載均衡,並設置每個用戶的訂單屬性,框架將自動如果第一個拋出一個異常,故障轉移到第二個適配器。

<int:channel id="foo> 
    <int:dispatcher load-balancer="none" /> 
</int:channel> 

<... id="primary" order="1" .../> 

<... id="secondary" order="2" .../> 

默認的負載平衡器是循環法(round-robin)。

另一種選擇是使用新ExpressionEvaluatingMessageHandlerAdvice在即將到來的2.2版本...

http://blog.springsource.org/2012/10/09/spring-integration-2-2-retry-and-more/