2017-08-10 34 views
3

我使用歡樂連接3.5.0.8232。 我有一個數據庫讀取器作爲源連接器和JavaScript編寫器作爲目標連接器。我決定在目的地中輸入一些奇特的代碼,做四件獨立的事情,應該一個接一個地進行。基本上我只是寫了代碼,在我看來它太長而且太笨拙,所以我決定通過「等待以前的目的地」選項將它分成4個目的地,這些目的地將以菊花鏈方式連接。歡樂連接停止消息傳播通過目的地

問題是:如果在其中一個目標上發生錯誤,我該如何中斷此執行鏈?

我發現了一個JIRA問題,從2013年說,實際上這將發生在目的地連接器的主體的錯誤不會阻止去其他目的地的消息。並且它聲明2.X版本行爲仍然是最新的,即在Destination Transformer中發生的錯誤將實際上阻止消息傳播。

我想在這兩個目標身上引發錯誤,並在目的地響應變壓器,並在兩種情況下,消息將繼續到其他目的地。我也嘗試從Destination體中返回ResponseFactory.getErrorResponse,但沒有運氣。我也嘗試將目標響應變換器中的responseStatus設置爲ERROR,但無濟於事。他們是不是指普通的變壓器/濾波器?

而且 - 也許我的拆分任務分成4個不同的目的地,特定的解決方案是不爲什麼目的地是擺在首位創建的原因是什麼?我認爲該文檔指出目的地基本上是Destination的實際字眼所代表的內容。

如果上述情況屬實,也許有更好的方式來組織代碼在功能上在歡樂?我認爲在JavaScript編寫器中不允許包含外部JS文件 - 即使是這樣,我寧願將所有內容都放在Channel本身內,並且可以作爲單個文件導出/導入。

謝謝。

回答

2

是的,當一個錯誤被從過濾器/變壓器拋出,它被認爲是真正的「特殊」等消息流被停止(後續目的地在同一鏈不執行)。

如果從實際的目的地調度程序或響應變換器發出錯誤,則該目標被標記爲錯誤,但後續目標仍將被執行。

如果你想要的話,你仍然可以停止消息流。在你以後的目標使用過濾器: Filter

+0

謝謝你,尼克,這也正是我一直在尋找。 btw $('dX')似乎與相應目的地返回的響應相似,其中X是目的地的標識。當你創建一個過濾器時,它們會在「可用變量」列表中看到,以及其他通道變量(起初我想知道那是什麼..) –