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