我正在构建一个简单的骆驼路由,它应该连续轮询表并将数据推送到ActiveMQ中。每轮投票只应该拉取之前未拉的数据。我能想到的最好的方法是跟踪最后一个成功处理的序列ID,然后选择序列ID大于前一个的项目。Apache Camel JDBC轮询和幂等性
有没有一个标准的方法来做到这一点?
我正在构建一个简单的骆驼路由,它应该连续轮询表并将数据推送到ActiveMQ中。每轮投票只应该拉取之前未拉的数据。我能想到的最好的方法是跟踪最后一个成功处理的序列ID,然后选择序列ID大于前一个的项目。Apache Camel JDBC轮询和幂等性
有没有一个标准的方法来做到这一点?
在多用户数据库中,对于具有较高id的行,可能会提交具有较低序列ID的行(当然,在Oracle & SQLServer中,我怀疑任何具有事务支持的dbms) 。在这种情况下,简单地跟踪最后处理的id可能会导致永远不会处理的行。
问题的最简单的解决方案,如果你有对模式的控制权并且是唯一处理这个表的方法,那就是在表中添加某种'已处理'列并更新该列(如@Arnaud所示) 。
如果这不是一个选项,然后有3个其他机构我考虑解决这个问题:
我选择了2,因为它更容易以DBMS独立的方式实现,并且只需插入一行即可将行标记为已处理。
在骆驼文档的sql component,有一个属性onConsume:
“......处理每一行则可以执行此查询,如果Exchange被成功处理,例如,以纪念行作为后处理...“