Apache camel 驼峰和源/目标系统可用性策略

Apache camel 驼峰和源/目标系统可用性策略,apache-camel,recovery,availability,service-not-available,Apache Camel,Recovery,Availability,Service Not Available,我是骆驼队的新手,正在寻找模式或策略来管理骆驼路线中目标系统的可用性 例如,假设我想要: -从文件服务器读取输入数据的步骤 -处理数据(数据->目标数据) -使用Rest服务(称为TargetSystem)将目标数据(TargetData)发送到目标网站 我的问题是,如果目标系统瘫痪,最好的策略是什么 我知道,如果一条路由失败,则可以回滚整个流程。但是如果TargetSystem是一个外部系统,并且可能会关闭数小时,我认为在目标系统启动之前尝试回滚该过程不是一个好方法 有没有适合这个问题的模式或

我是骆驼队的新手,正在寻找模式或策略来管理骆驼路线中目标系统的可用性

例如,假设我想要: -从文件服务器读取输入数据的步骤 -处理数据(数据->目标数据) -使用Rest服务(称为TargetSystem)将目标数据(TargetData)发送到目标网站

我的问题是,如果目标系统瘫痪,最好的策略是什么

我知道,如果一条路由失败,则可以回滚整个流程。但是如果TargetSystem是一个外部系统,并且可能会关闭数小时,我认为在目标系统启动之前尝试回滚该过程不是一个好方法

有没有适合这个问题的模式或策略

问候


Gilles

这是我在几个系统中使用的模式

  • 将您的TargetData持久化到某个地方(数据库表、JMS队列、Redis等)
  • 创建一条读取未发送的TargetData的路由,并将其发送到TargetSystem
    • 如果传输正常,则相应地标记TargetData(例如:在表行中设置标志、从队列中删除等)
  • 从计时器和/或其他路由定期触发此类路由。您甚至可以使用shell命令触发它,手动“强制”重新发送未发送的数据
您可以根据自己的需要对此进行自定义,例如,在适当的情况下添加日志记录,在DB表中跟踪每次尝试发送的时间、失败的次数、重试次数等等

现在,您可以将应用程序模块化为两个模块:一个模块接收数据并将其处理到TargetData,另一个模块管理TargetDataTargetSystem的传输
模块可能意味着2个CamelContextes、2个OSGi包、2个完全独立的Java应用程序