Camel 3.12.0结合MongoDB 4.4变更流(ChangeStreams)更新操作时Exchange体为空问题:如何配置FullDocument.UPDATE_LOOKUP
解决方案:无需修改Camel源码,用配置参数即可解决
不用去修改Camel的MongoDbChangeStreamsThread.java类!Camel 3.12.0的MongoDB变更流组件已经提供了专门的配置参数来设置FullDocument.UPDATE_LOOKUP,完全不需要自己维护修改后的库,能有效降低后续维护成本。
具体操作步骤:
- 在你的MongoDB端点URI中添加
fullDocument=UPDATE_LOOKUP参数,这会告诉MongoDB在update类操作发生时,返回更新后的完整文档,而不是仅返回变更字段和_id。
修改后的路由代码如下:
from("mongodb:mongoClient?consumerType=changeStreams&database=test&collection=accounts&fullDocument=UPDATE_LOOKUP") .process(new MongoIdProcessor()) .to("solrCloud://minikube:8983/solr?zkHost=minikube:2181,minikube:2182,minikube:2183&collection=accounts&autoCommit=true")
为什么之前会出现空Body的问题?
默认情况下,MongoDB的变更流在处理updateOne/updateMany操作时,只会返回变更的字段以及_id,而Camel的MongoDB组件默认没有配置fullDocument选项,导致你拿到的Exchange Body为空。设置UPDATE_LOOKUP后,MongoDB会自动查询并返回更新后的完整文档,这样你的exchange.getIn().getBody()就能获取到完整的文档数据了。
这样配置后,你就不用修改任何Camel源码,直接通过端点参数就能实现需求,完全避免了维护自定义库的麻烦。
内容的提问来源于stack exchange,提问作者C C H
相关产品推荐
相关产品推荐

