我正在使用命令事件驅動的系統,使用JMS和Apache Camel進行路由。在以下情況下:駱駝異常/錯誤處理事務處理路由,而不會導致客戶端異常
我向系統發送一個請求 - 應答命令「X」。
系統通過交易駱駝路線收到「X」。
在處理「X」系統發出的幾個事件,「Y」 &「Z」, 但隨着成交的路線,這些不應該被刷新 ,直到交易完成它的一部分。
發生運行時異常 - 這應導致事務回滾到 。
我希望能夠攔截異常並以真正的消息(而不是例外)回覆客戶端。因此我開始實現錯誤處理程序:
onException(RuntimeException.class)
.handled(true)
.markRollbackOnly()
.filter(header(Header.REPLY_TO.getName()).isNotNull())
.to(DESTINATION_FOR_EXCEPTION_HANDLING)
.to(DESTINATION_FOR_REPLIES);
其中:
- DESTINATION_FOR_EXCEPTION_HANDLING是一個bean,是以異常,並返回一個消息對象
- DESTINATION_FOR_REPLIES是設定了身體豆到郵件對象
我的問題是,如果我包含「markRollbackOnly()」它:
- 防止被刷新 「Y」 & 「Z」 - GOOD
- 導致客戶端使得requestReply在交易所例外 - BAD
,如果我不包括它,則:
- 「Y」 & 「Z」 就臉紅 - BAD
- 我收到了客戶端上的真正的消息對象 - 好
如何配置駱駝以防止事務中的消息刷新,並且能夠將異常轉換爲處理的錯誤消息?
將是仍不會導致客戶端出現異常,因爲原始組件仍會響應交換異常? – James 2015-03-03 13:11:31