2012-11-28 31 views
2

我正在使用Grails路由插件,它允許使用非常類似於Java DLS語法的Groovy DSL語法定義Camel路由。useOriginalMessage()和多個'from'節點

假設我有以下RouteBuilder:

class MyRoute extends RouteBuilder { 
    from('activemq:route1') 
    .to('someProcessor1') 
    .to('direct:route2') 

    from('direct:route2') 
    .to('someProcessor2') 

    onException(Throwable.class).useOriginalMessage().handled(true) 
    .to('activemq:route.failed') 
} 

如果我有開始於activemq:route1的消息,然後移動通過direct:route2,但無法在someProcessor2,那麼我最終的消息,因爲它開始在activemq:route1在我的activemq:route.failed隊列中...但這不是我想要的。如果我在someProcessor2中發生故障,我希望消息在direct:route2開始(同樣,如果我在someProcessor1中發生故障,我希望在我的故障隊列中發送activemq:route1消息)。

是否有任何Apache Camel功能允許我在RouteDefintion開頭(即from(<uri>))「重置」原始消息?

回答

1

除了使用direct:之外的其他東西來加入你的路由(seda,vm,activemq)並且它將按照你的建議行事......否則,你也可以明確地在報頭中保留消息的相關狀態並在onException子句等。

+0

有趣的是,有什麼可以比得上'直接'具有我想要的行爲(簡單同步消息)?你列出的所有選項都是異步的,並且會改變我的路線的語義。我目前正按照你所描述的明確的保存/恢復方法,但是想確保我不重新發明輪子。 –

+0

'直接'重複使用同一個線程/交換跨越路線......它在某些方面很有用,但這是我過去必須解決的一種情況......如果您找到了更好的方法,請告訴我 –