mongodb - MongoDB spring boot 事务的预提交
问题描述
我想知道是否可以进行一种“预提交”以将文档存储在 ddbb 中,因为我有以下问题:
我有一个连接到 DDBB 和 kafka 主题的 spring boot 应用程序。关键是要排队我不直接使用spring boot kafka的消息。我向外部服务打了一个休息电话(我无法更改),它会将我的消息排队(有点像边车模式,但人们是如何做一些坏事的)。关键是在正确的工作模式下,它将像这样工作:
在所有服务结束时,我调用外部服务,存储我的文档,在不到 2 秒的时间内我将收到我的事件(生产者与接收者相同,对某些东西进行一种异步处理)
关键是有时因为外部服务代码不好,他们将消息发送到kafka,而不是结束,我仍然需要等待外部服务的休息响应,比如7秒,他们实际上已经发布了事件,我收到了。
此事件需要将 DDBB 中的文档存储起来,否则会失败,因为在存储文档之前已接收到事件。实际上他们已经实现了一个重试机制,所以现在它可以工作,但我必须看到所有这些错误,我更愿意让它正常工作
解决此问题的最佳方法是外部系统将在其服务结束时发布事件,但在发布有时需要 2 秒的事件后似乎穹顶更多的东西,阻止我的应用程序等待休息响应。
我在代码中的最后两行是:
entity = entityRepository.save(entity);
eventsPublisher.publishEventToExternal(entity);
之后我只是转换为 DTO 并发送响应
我的问题是。springboot-data-mongo 中是否有任何 precommit 方法来预先提交文档或在某些时候强制事务?
我想到的另一个解决方案是在我的应用程序中调用将外部系统作为 Asych 方法调用的方法。是解决这个问题的另一种方法,但我想先知道是否有可能做到这一点。
谢谢。
解决方案
推荐阅读
- java - [java/eclipse/JAXB]当前选择的JAXB库提供者无效
- python - 为条形图比赛转换 DataFrame
- azure - 如何在 Azure 应用服务 Linux 中查找 NPM 代码
- tcp - 如何修改 Iperf TCP 连接超时?
- javascript - 将项目添加到 LocalStorage 然后使用 useState() REACT 检索它
- python - 我们可以在 PyPy 中腌制延续吗?如何?
- node.js - BigQuery NodeJS SDK 未创建原生 GEOGRAPHY 类型
- ios - Flutter fastlane ios如何通过--dart-define
- graphql - 有没有办法避免在 Apollo GraphQL 中返回具有空值的键?
- java - 如何在 JavaFX 中的 tabpane 之间添加拆分?