Apache camel 如何在集群环境中使用ApacheCamel丰富从SFTP到JMS的文件内消息路由?

Apache camel 如何在集群环境中使用ApacheCamel丰富从SFTP到JMS的文件内消息路由?,apache-camel,jms,integration,camel-ftp,header-enricher,Apache Camel,Jms,Integration,Camel Ftp,Header Enricher,我们将从SFTP读取一个文件,并将员工放入数据库 下面是XML结构 <employees> <employee></employee> <employee></employee> <employee></employee> <employees> 我认为策略是: 从SFTP中选取XML文件-> 从XML->获取员工编号(24000名员工) 根据xml文件

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

下面是XML结构

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

我认为策略是:

  • 从SFTP中选取XML文件->
  • 从XML->获取员工编号(24000名员工)
  • 根据xml文件中的员工编号从“系统1和系统2”中提取数据,所有数据一起存储在内存中->
  • 从XML中拆分员工->
  • 将“系统1和系统2”中的数据分配给每个员工交换->
  • 将每个员工XML放入JMS队列(在集群环境中读取)
  • 在abve路由或路由2(Jms队列)中的ApacheCamel中,是否有其他最佳策略来处理此场景


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

    上述步骤可以通过

  • 在第4步之后,通过并行处理(例如使用threadpool)加快您的进程
  • 第3步后,通过释放芯线(例如,使用窃听器)紧固SFTP工艺
    • 为了防止数据丢失,将交换存储到另一个持久性存储(例如JMS队列)
    • 应用程序的内存使用将增加

  • 如果可以同时执行步骤3(从“系统1和系统2”获取数据),则使用幂等元(利用外部缓存或DB)启动多个应用程序实例可能有助于获取大量文件。

    数据和员工/XML文件之间的关系是什么?@hk6279:更新的方案。它是基于IDS获取的员工数据,感谢您的见解。如果5变为4,4变为5,场景应该是什么?这取决于数据分配的性质。如果根据全套/员工名单分配数据,则无法进行并行处理。如果数据是基于每个员工分配的,请保持当前方法。确定数据是XML格式的。因此,考虑读取xml,然后获取员工id,从系统中获取相关数据,丰富xml并进一步发送到body.split()方法,该方法进一步发送到streaming().inOnly(队列)。不确定这是否是一种好方法,如果您能够实现您的目标(速度和内存使用以及您关心的任何其他因素都可以接受),那么这是一个足够好的解决方案