2

我正在使用从另一个进程返回结果的骆驼代理。

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 是否可以重新建立连接,以便我可以继续等待?

4

2 回答 2

2

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

(同步)请求/回复通常具有由原因设置的超时值。如果您在给定时间内没有收到回复,请重试或跳过它。在 JMS 案例中,您设置 requestTimeout 和 timeToLive 来实现这一点。阅读节。在 Camel 中,您可以通过重新交付和错误处理程序来实现这些目标。

无论如何,如果您将该值设置为“永远”(或至少很长,例如几个小时) - 那么服务器/应用程序重新启动仍然会使请求失败。

于 2013-05-02T06:34:17.853 回答
1

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

jms:queue:processPreview?requestTimeout=xxxx
于 2013-05-02T02:45:56.663 回答