我想實現以下種類配器與CAMEL:駱駝Apache:我可以使用retryWhile重新發送請求嗎?
- 客戶端發送一個HTTP POST請求駱駝
- CAMEL發送HTTP POST請求外部端點(服務器)
- 外部服務器回覆一個200 OK
- CAMEL發送HTTP GET請求到外部端點(服務器)
- 外部服務器回覆
在步驟5之後,我想檢查回覆:如果回覆是200 OK並且state = INPROGRESS(該狀態可以從接收到的XML主體中檢索),那麼我想要將HTTP GET重新傳輸到外部端點直到狀態與INPROGRESS不同。
我想使用retryWhile語句,但我不知道如何在路由中構建例程。 例如,爲了檢查答覆是否爲200 OK並且state = INPROGRESS,我可以很容易地引入一個謂詞。所以retryWhile已經變得像:
.retryWhile(Is200OKandINPROGRESS)
,但我應該在哪裏把它的路由,這樣HTTP GET將被重新傳輸?
如:(僅取第4和第5到賬戶)
from("...")
// here format the message to be sent out
.to("external_server")
// what code should I write here ??
// something like:
// .onException(alwaysDo.class)
// .retryWhile(Is200OKandINPROGRESS)
// .delay(2000)
// .end()
// or maybe it should not be here ??
我也有點糊塗了「alwaysDo.class」應該怎麼樣子? 或...我應該使用完全不同的東西來解決這種編排問題嗎? (我只是想重新發送,只要我得到一個200 OK與INPROGRESS狀態...)
在此先感謝您的幫助。
實際上,當你使用.stop()時,它會停止wh ole路線,這可能是不希望的。成像是這樣的: '從( 「直接:富」)。爲了 ( 「直接:噓」) .process(someProcessor());' '從( 「直接:噓」) .loop( 100) .choice() 。當(stopPredicate())停止() .END() .END() .process(someOtherProcessor());' 的.stop()將導致,即someProcessor()和someOtherProcessor()將不會被調用。這可能是不可取的。 – Slimer 2014-11-12 14:26:48