我有一个使用 mongoDB 作为持久性和 RabbitMQ 作为消息代理的系统。我有一个挑战,我只想为 RabbitMQ 发布失败场景实现事务发件箱。我不确定这是否可能,因为我也有使用相同 mongoDB 持久性的消费者,所以当我编写涵盖 RabbitMQ 发布失败场景的事务发件箱的代码时,发布的消息在 mongoDB commitTransaction 之前到达消费者,所以我的消费者不能由于延迟,无法在 mongoDB 中找到消息。
我的代码如下所示;
1-开始会话事务
2-插入带有会话的文档(因此在我调用提交之前它不会持续存在)
3-发布rabbitMQ
4- 如果成功 commitTransaction
5-如果错误插入到带有会话的发件箱文档中而不是 commitTransaction
6-如果 mongoDB abortTransaction 出现问题(如果发布成功且 mongoDB 失败,我的消费者首先检查 mongoDB 是否存在,如果不存在则不执行任何操作。)
所以问题在于消息在 mongoDB 持久性之前到达消费者,你有什么解决方案可以解决我的问题吗?