Camel JMS代理超时发生在20000毫秒之后等待回复消息

时间:2013-05-01 12:57:45

标签: java jms apache-camel

我正在使用Camel Proxy从另一个进程返回结果。

public interface DataProcessingInterface {
   public List<ResponseData> processPreview(ClientData criteria, Config config);
}

这是配置链接此

<camel:proxy
id="processPreviewProxy"
serviceInterface="model.jms.DataProcessingInterface"
serviceUrl="jms:queue:processPreview"/>

但有时候其他进程需要很长时间才能返回结果,而我正在收到超时异常

TemporaryQueueReplyManager - Timeout occurred after 20000 millis waiting for reply message with correlationID [Camel-ID-PC01-2661-1367403764103-0-15]. Setting ExchangeTimedOutException on (MessageId: ID-PC01-2661-1367403764103-0-17 on ExchangeId: ID-PC01-2661-1367403764103-0-16) and continue routing.

如何告诉Camel等待响应准备就绪。如果这需要多长时间,它应该永远。客户端在不同的线程中进行管理,因此它所用的持续时间不会影响客户端。

如果抛出TimeoutException,也可以重新建立连接,这样我可以继续等待吗?

2 个答案:

答案 0 :(得分:2)

“永久”?不,你不能永远等待。

(同步)请求/回复通常具有由原因设置的超时值。如果您未在指定时间内收到回复,请再试一次或跳过它。在JMS情况下,您可以设置requestTimeout和timeToLive来实现此目的。阅读this部分。在Camel中,您可以通过重新传递和错误处理程序来实现这些功能。

无论如何,如果你将值设置为“Forever”(或者至少很长,例如多个小时) - 那么服务器/应用程序重启仍会使请求失败。

答案 1 :(得分:1)

您可以在jms端点上设置非常高的请求超时。

jms:queue:processPreview?requestTimeout=xxxx