我正在構建一個簡單的駱駝路由,它應該連續輪詢表並將數據推送到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被成功處理,例如,以紀念行作爲後處理...「