我需要在骆驼(2.23.0)中实现idempotent consumer pattern,并正在研究可能的实现。目前,我只能实现JdbcMessageIdRepository或JpaMessageIdRepository,并且想知道这些实现在处理并发请求时是否是线程安全的?我在Camel Github中检查了这些类的源代码,但找不到任何阻止/处理并发访问的代码。
有人可以确认吗?非常感谢!
答案 0 :(得分:2)
简短答案:是(在具有主键的数据库表上)
长答案:我今天尝试了一下(使用 JMeter 的 Parallel Controller 插件),并且注意到如果我没有设置作为CAMEL_MESSAGEPROCESSED
表上的主键,当同时触发多个HTTP请求时,我得到重复的条目。但是,如果我向该表添加主键(骆驼文档也建议这样做),则idempotent
使用者将按预期方式工作。
可以肯定地说,同步是由表上的主键机制来完成的吗?
我的意思是,只有一个Request-thread
成功地向CAMEL_MESSAGEPROCESSED
表添加了一行,并且根据我在测试过程中观察到的结果,另一个Request
被标记为重复
Camel (exchangeProperty(Exchange.DUPLICATE_MESSAGE)=true)