前言:我是相當新的駱駝,並在行動中消化駱駝儘可能地後,我就適應一個項目,我在。在這個項目中,我們有一些相當複雜的錯誤處理,並且我們要確保我們可以在我們將代碼進行駝峯化時進行復制。駱駝重試控制與多個異常
在我們的項目中(大多數情況下)有一組我們想要重試的異常和一組我們沒有的 - 但更具體地說,有一組我們想要比其他人更重試(不是所有可恢復的錯誤可以被視爲相同)。在這種情況下,我試圖定義一個onException
塊來更改重新傳送策略。然而,似乎交易所保持計數(Exchange.REDELIVERY_COUNTER
),並且這個數量是不依賴於它拋出異常。有沒有辦法讓這個計數特定於特定的例外?
例如 - 我有兩個例外FooException
和BarException
。在我的路線(或者真的在整個上下文中),我要重新FooExceptions 10倍,但BarException
S的關係僅重試2倍。所以上下文將包含:
<onException>
<exception>my.exception.FooException</exception>
<redeliveryPolicy maximumRedeliveries="10" redeliveryDelay="2000"
</onException>
<onException>
<exception>my.exception.BarException</exception>
<redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="5000"
</onException>
現在,值得關注的 - 如果我的應用程序將引發FooException
和重試4次(每次投擲FooException
),然後在第5的嘗試,它拋出一個BarException
,似乎這種工作方式是,交易所將有5 REDELIVERY_COUNTER
,當我復位政策只嘗試了兩次,它(邏輯)的結論是,路線不應該重試,並拋出異常退了出去。然而,在我的應用BarExceptions
應該重試兩次,不管有多少FooExceptions
拋出。同樣,如果它交替拋出Foo和Bar異常,我希望它只增加給定異常的計數器。
駱駝在行動的最後一步促進使用retryWhile
- 這是抓住我正在尋找的那種控制的唯一方法嗎?我是否需要創建一個有狀態的bean,以瞭解每個異常的計數?還是我忽略了簡單的事情?我想確保在我接近這個重構時,我不會在醜陋的道路上開始我們。
使用駱駝2.10.1
,重新排序似乎並沒有改變輸出。當我有機會時,我會試着在Spring配置中進行測試。 – RitterGT