Java 8/Camel 2.19.x/AMQ 5.15.x 在这里。
我有一个 Java 应用程序,它使用 Camel 从 AMQ 队列中消费消息,处理这些消息,并用它们做一些事情。有时,路由的输出会将处理结果放回另一个队列以供进一步下游处理,但并非总是/必须。典型的 Java/Camel/AMQ 设置。
我的每条路线(我使用的是 Camel XML DSL)都有一个已配置的<onException>处理程序,通常如下所示:
<onException useOriginalMessage="true">
<exception>java.lang.Exception</exception>
<redeliveryPolicy logStackTrace="true"/>
<handled>
<constant>true</constant>
</handled>
<log message="${exception.stacktrace}" loggingLevel="ERROR"/>
<rollback markRollbackOnly="true"/>
</onException>
非常简单:记录异常并回滚。
我想做的是,作为此<onException>处理程序的一部分,将原始消息(失败并导致抛出异常,而不是异常!)放在特定于路由的DLQ(“DLQ”我的意思只是一个可以发送失败消息用于审计/报告/回放目的的队列)
意思是,如果我的应用程序有 30 条路由,每个路由都来自 30 个不同的 AMQ 队列,那么我将有 30 个不同的“DLQ”,它们各自的<onException>处理程序将向其中发送失败的消息。
理想情况下,我希望此配置位于 AMQ 端(也可能在内部activem.xml或类似端),这样如果 DLQ 目标需要更改,我就不需要更改代码或重新部署。但是,如果只能从 Camel 路由/配置内部进行,那也没关系。
我想我可以修改每个路由以包含它自己的原始消息的自定义目标 DLQ:
<onException useOriginalMessage="true">
<exception>java.lang.Exception</exception>
<redeliveryPolicy logStackTrace="true"/>
<handled>
<constant>true</constant>
</handled>
<log message="${exception.stacktrace}" loggingLevel="ERROR"/>
<rollback markRollbackOnly="true"/>
<to uri="activemq:fizzbuzz.dlq"/>
</onException>
但我希望有比这更优雅的东西......
任何想法我怎么能做到这一点?
慕森卡
相关分类