【问题标题】:How to enrich message in File Route from SFTP to JMS in clustered environment using Apache Camel?如何使用 Apache Camel 在集群环境中丰富从 SFTP 到 JMS 的文件路由中的消息?
【发布时间】:2020-02-20 11:11:50
【问题描述】:

我们将从 SFTP 读取文件并将员工放入数据库。

以下是 XML 结构

 <employees>
     <employee></employee>
     <employee></employee>
     <employee></employee>
 <employees>    

我认为的策略是:

  1. 从 SFTP 选择 XML 文件 ->
  2. 从 XML 中获取员工编号 ->(24000 名员工)
  3. 根据员工编号从“系统 1 和系统 2”获取数据。在内存中的 xml 文件中 ->
  4. 从 XML 拆分员工 ->
  5. 将“系统 1 和系统 2”中的数据分配给每个员工 Exchange ->
  6. 将每个员工 XML 放入 JMS 队列(在集群环境中读取)

在 Apache Camel 中的 abve route 或 route 2 (Jms Queue) 中是否有任何其他最佳策略来处理这种情况?

注意:因为是集群环境;我们无法从服务器本身的 System1 和 System2 获取数据,然后我们需要通过将批处理 id 分配给一个文件内容来保持跟踪。您也可以在其他集成中考虑这种情况

【问题讨论】:

  • “数据”和员工/XML文件有什么关系?
  • @hk6279:更新场景。它是根据 ID 获取的员工数据

标签: apache-camel jms integration camel-ftp header-enricher


【解决方案1】:

以上步骤可以改进

  1. 通过并行处理(例如使用线程池)加快第 4 步之后的进程
  2. 在第 3 步之后通过释放核心线程来加快 SFTP 进程(例如使用wireTap)
    • 为防止数据丢失,请将交换存储到另一个持久存储(例如 JMS 队列)
    • 应用程序的内存使用会增加

如果第 3 步(从“系统 1 和系统 2”获取数据)可以同时完成,则启动多个具有幂等性的应用程序实例(利用外部缓存或数据库)可能有助于处理大量文件。

【讨论】:

  • 感谢您的见解。如果5变成4,4变成5,应该是什么场景?
  • 这取决于数据分配的性质。如果根据员工的完整集合/列表分配数据,则无法进行并行处理。如果根据每个员工分配数据,请保持当前方法。
  • OK 数据以 XML 格式出现。因此考虑读取 xml,然后获取员工 id 并从系统中获取相关数据并丰富 xml 并进一步发送到 body.split() 方法,该方法进一步发送到 streaming().inOnly(Queue)。不确定这是否是好方法
  • 如果你能实现你的目标(以可接受的速度和内存使用以及你关心的任何其他因素),这是足够好的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2013-02-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多