Apache camel 驼峰JdbcMessageIdRepository键插入在from路由之后,而不是onCompletion

Apache camel 驼峰JdbcMessageIdRepository键插入在from路由之后,而不是onCompletion,apache-camel,idempotent,Apache Camel,Idempotent,我正在使用Camel JdbcMessageIdRepository来实现HA集群,但我在实现方面遇到了问题 如果找不到密钥,请立即插入,而不是在完成路径上插入密钥。 由于此问题,文件将被处理两次 请有人帮忙,如果找不到钥匙,如何立即插入 问候,, Sarada。我扩展了类JdbcMessageIdRepository,并覆盖了queryforInt public class FuseJDBCMessageIdRepository extends JdbcMessageIdRepository

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

如果找不到密钥,请立即插入,而不是在完成路径上插入密钥。

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

请有人帮忙,如果找不到钥匙,如何立即插入

问候,,
Sarada。

我扩展了类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);
    }
}

我认为如果你使用这个,在幂等消费EIP上有一个迫切的选择。但你的问题需要更详细一点,以便我们提供帮助you@ClausIbsenJdbcMessageIdRepository在幂等消费者处引用时工作正常,但当作为参数添加到From route时,它与生命周期相关,仅在完成时插入。默认值为true。