Grails 使用OriginalMessage()和多个';从';节点
我正在使用Grails路由插件,该插件允许使用与JavaDLS语法非常相似的Groovy DSL语法定义驼峰路由 假设我有以下RouteBuilder: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
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”跨路由重用相同的线程/交换…在某些方面很好,但这是我过去不得不解决的一个案例…如果您找到更好的方法,请告诉我