使用jdbcMessageIdRepository线程安全性实现Apache Camel-幂等消费者模式吗?

时间:2019-05-20 14:14:39

标签: java jdbc apache-camel apache-karaf idempotent

我需要在骆驼(2.23.0)中实现idempotent consumer pattern,并正在研究可能的实现。目前,我只能实现JdbcMessageIdRepositoryJpaMessageIdRepository,并且想知道这些实现在处理并发请求时是否是线程安全的?我在Camel Github中检查了这些类的源代码,但找不到任何阻止/处理并发访问的代码。

有人可以确认吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

简短答案:是(在具有主键的数据库表上)


长答案:我今天尝试了一下(使用 JMeter Parallel Controller 插件),并且注意到如果我没有设置作为CAMEL_MESSAGEPROCESSED表上的主键,当同时触发多个HTTP请求时,我得到重复的条目。但是,如果我向该表添加主键(骆驼文档也建议这样做),则idempotent使用者将按预期方式工作。

  

可以肯定地说,同步是由表上的主键机制来完成的吗?

我的意思是,只有一个Request-thread成功地向CAMEL_MESSAGEPROCESSED表添加了一行,并且根据我在测试过程中观察到的结果,另一个Request被标记为重复

Camel (exchangeProperty(Exchange.DUPLICATE_MESSAGE)=true)