Camel route POSTs服务需要20多分钟才能响应

时间:2016-08-03 21:18:20

标签: web-services rest apache-camel

我有一个Apache Camel(版本2.15.3)路由,配置如下(使用XML和Java DSL的混合):

  1. 从FTP站点上的多个文件夹之一中读取文件。
    • 设置标题以指示从中读取的文件夹。
  2. 进行一些处理和审核。
  3. 同步POST到外部REST服务(jax-rs 1.1,Glassfish,Java EE 6)。
    • REST服务需要很长时间才能完成工作,超过20分钟。
  4. 收到回复。
  5. 进行更多处理和审核。
  6. 将响应写入FTP站点上的多个文件夹之一。
    • 使用开头设置的标题来了解要写入的文件夹。
  7. 这是在单个链接路径路径中配置的。

    问题是当服务仍在处理时,与外部REST服务的连接将超时。基础设施有点复杂(边缘服务器,负载平衡器,Glassfish),而且我不认为增加超时是正确的解决方案。

    我如何实现这条路线,以便在满足我的所有要求的同时避免超时:(1)将响应写入相应的FTP文件夹,(2)审核交易,以及(3)满足其他交易/背景 - 具体要求?

    我对Camel和REST比较陌生,所以也许这很简单,但我不知道使用Camel和REST工具和技术。

    (欢迎提出改进的问题和建议。)

2 个答案:

答案 0 :(得分:1)

这是一个典型的异步用例。在您点击它们后,其余服务是否可以立即为您提供令牌ID或某个唯一ID?

这样你就可以拥有一个批处理作业或其他一些骆驼路线,这些路线将从数据库/缓存中获取此ID,并在20分钟后再次点击其余服务。

如果其他服务可以提供此功能,这是我能想到的理想解决方案。

你是对的,在同步通话上等待20分钟是一个疯狂的想法。您计划发布到其余服务的文件/有效负载的估计大小是多少?

答案 1 :(得分:1)

是不是可以打破一个部分的两个主要步骤并进行两次异步操作?

我会这样做。

  1. 从FTP站点上的多个文件夹之一中读取文件。
  2. 设置标题以指示从中读取的文件夹。
  3. 将标题和文件名以及其他相关信息保存在缓存中。有一个名为camel-cache的camel组件相对容易设置,你可以存储键值或任何其他对象。
  4. 进行一些处理和审核。 异步 POST到外部REST服务(jax-rs 1.1,Glassfish,Java EE 6)。请注意,我们在此处异步发布。
  5. 第2步。

    1. 收到回复。
    2. 查找回复标识符,即缓存中的文件名或其他标识符,以匹配回复,然后获取标题。
    3. 进行更多处理和审核。
    4. 将响应写入FTP站点上的多个文件夹之一。
    5. 这样,您无需等待,处理可能需要20分钟或更长时间。您只需将缓存值设置为24小时不过期。