首页 > 解决方案 > 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 方法调用的方法。是解决这个问题的另一种方法,但我想先知道是否有可能做到这一点。

谢谢。

标签: mongodbspring-boottransactionscommitspring-data-mongodb

解决方案


推荐阅读