从路由后插入骆驼JdbcMessageIdRepository键,而不是onCompletion

时间:2018-07-03 02:48:38

标签: apache-camel idempotent

我正在使用Camel JdbcMessageIdRepository来实现HA群集,但是我在实现方面遇到问题。

如果未找到密钥,请立即插入,而不要插入密钥“完成”路由。

由于此问题,文件被处理了两次。

有人可以帮忙吗?如果找不到,如何立即插入Key?

关于, 萨拉达。

1 个答案:

答案 0 :(得分:0)

我扩展了JdbcMessageIdRepository类,并覆盖了 queryforInt

public class FuseJDBCMessageIdRepository extends JdbcMessageIdRepository {

    public FuseJDBCMessageIdRepository() {
    }

    public FuseJDBCMessageIdRepository(DataSource dataSource, String processorName) {
        super(dataSource, processorName);
    }

    public FuseJDBCMessageIdRepository(DataSource dataSource, TransactionTemplate transactionTemplate, String processorName) {
        super(dataSource, transactionTemplate, processorName);
    }

    public FuseJDBCMessageIdRepository(JdbcTemplate jdbcTemplate, TransactionTemplate transactionTemplate) {
        super(jdbcTemplate, transactionTemplate);
    }

    @Override
    public int queryForInt(String key) {
        int value = super.queryForInt(key);

        if (value == 0 && insert(key) >0){
            return value;
        }
            return value;

    }

    @Override
    public int insert(String key) {
        return super.insert(key);
    }

    @Override
    public int delete(String key) {
        return super.delete(key);
    }
}