【发布时间】:2014-10-10 22:43:07
【问题描述】:
我正在使用 Camel 进行集成工作,并使用 HTTP 端点作为代理将某些消息路由到 HTTP 端点。我将路由配置为使用我的自定义错误处理程序,它将失败的消息放置在我指定的队列中(死信通道模式)。
<route>
...
<to uri="direct:MessageTypeGuaranteed"/>
</route>
<route errorHandlerRef="MyCustomErrorHandler">
<from uri="direct:MessageTypeGuaranteed">
<to uri="http://dummyUri?throwExceptionOnFailure=true"/>
</route>
当任何东西未能传递到我的 http 端点时,它会被添加到我的自定义队列(“CustomFailedMessageQueue”)中,并且我有一个单独的路由来尝试重试这些消息:
<route>
<from uri="jms:queue:CustomFailedMessageQueue">
<to uri="direct:MessageTypeGuaranteed"/>
</route>
我想做的是能够指定我只想让一条消息存活 10 秒。所以我正在尝试设置时间来生活在我的 http 目的地本身。
例如,我有一个处理器可以做这样的事情:
exchange.getIn().setHeader(Exchange.HTTP_URI, "http://localhost/nodeserver?timeToLive=10000");
但是,我认为我误解了文档。 timeToLive 选项仅在将其传递给 jms 组件时才有效,对吗?换句话说,如果我想利用时间来忍受这个端点,我需要在处理器中处理自己,对吗?
【问题讨论】:
-
只是为了弄清楚,消息在队列中存活 10 秒对吗?
-
是的,没错。
-
所以我认为你应该把这个写在你的 jms 上!你能在路由中显示你的 DeadLetterChannel 配置吗?
标签: java apache-camel integration activemq