我正在使用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,也可以重新建立连接,这样我可以继续等待吗?
答案 0 :(得分:2)
“永久”?不,你不能永远等待。
(同步)请求/回复通常具有由原因设置的超时值。如果您未在指定时间内收到回复,请再试一次或跳过它。在JMS情况下,您可以设置requestTimeout和timeToLive来实现此目的。阅读this部分。在Camel中,您可以通过重新传递和错误处理程序来实现这些功能。
无论如何,如果你将值设置为“Forever”(或者至少很长,例如多个小时) - 那么服务器/应用程序重启仍会使请求失败。
答案 1 :(得分:1)
您可以在jms端点上设置非常高的请求超时。
jms:queue:processPreview?requestTimeout=xxxx