【问题标题】:Camel JMS Proxy Timeout occurred after 20000 millis waiting for reply message在等待回复消息 20000 毫秒后发生 Camel JMS 代理超时
【发布时间】:2013-04-25 11:21:36
【问题描述】:

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

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

【问题讨论】:

    标签: java jms apache-camel


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的反馈。我认为“永远”是“不是一个好策略”。我会将超时与 ExceptionHandler 结合起来再次重试请求。比永远等待要聪明得多。交易
    • +1 表示“服务器/应用程序重启仍然会使请求失败”。
    【解决方案2】:

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

    jms:queue:processPreview?requestTimeout=xxxx
    

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2015-01-05
      • 2016-11-27
      • 1970-01-01
      • 2019-09-16
      • 2016-02-17
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      相关资源
      最近更新 更多