Grails 使用OriginalMessage()和多个';从';节点

Grails 使用OriginalMessage()和多个';从';节点,grails,groovy,apache-camel,Grails,Groovy,Apache Camel,我正在使用Grails路由插件,该插件允许使用与JavaDLS语法非常相似的Groovy DSL语法定义驼峰路由 假设我有以下RouteBuilder: class MyRoute extends RouteBuilder { from('activemq:route1') .to('someProcessor1') .to('direct:route2') from('direct:route2') .to('someProcessor2') onExc

我正在使用Grails路由插件,该插件允许使用与JavaDLS语法非常相似的Groovy DSL语法定义驼峰路由

假设我有以下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:route1
开始的状态结束。。。但那不是我想要的。如果我在
someProcessor2
中出现故障,我希望消息在
direct:route2
处启动(同样,如果我在
someProcessor1
中出现故障,我希望
activemq:route1
消息在我的故障队列中)


是否有任何Apache Camel功能允许我在RoutedFinition(即
from()
)开始时“重置”原始消息?

使用除
直接:
之外的其他功能加入您的路由(seda、vm、activemq),它将按照您的建议运行……否则,您还可以在头中显式保留消息的相关状态,并在OneException子句中还原它,等等。

有趣的是,是否有任何类似于
direct
的东西具有我想要的行为(简单同步消息)?您列出的所有备选方案都是异步的,会改变我的路由的语义。我目前正在使用您描述的显式保存/还原方法,但我想确保我不会重新发明轮子。“direct”跨路由重用相同的线程/交换…在某些方面很好,但这是我过去不得不解决的一个案例…如果您找到更好的方法,请告诉我