我有一个关于mongodb和发件箱模式的问题(我是mongo的新手)。
我正在开发一个应用程序,它使用mongodb作为主数据库,我有一些用例,其中我需要将文档保存到数据库中,然后将某个事件发布到MessageBroker(RabbitMq)。保存的文档必须与发布的事件一致-这意味着如果我保存文档,我也必须发送消息(解决方案必须是弹性的,例如在文档保存和消息发送之间的服务器关闭)所以我决定使用发件箱模式。在关系(sql)数据库中,这个问题是微不足道的:我只是启动新事务,然后持久化/更改新对象,然后持久化某种数据库调度程序记录(在提交事务后向RabbitMq发送消息),然后提交。
我如何在mongodb中实现这一点(再次强调没有数据丢失和没有'phantom'消息发送)。我应该使用mongodb事务(mongo社区强烈不建议使用事务)还是有其他更好的解决方案?
1条答案
按热度按时间cgfeq70w1#
您可以在集合级别尝试mongodb change streams。它类似于RDBMS世界中的触发器。然后,您可以监听该流以查找您选择的事件(在您的情况下是
insert
事件),然后,您可以将该事件发送到下游系统。