首页 > 解决方案 > 微服务 - 在事务中持久化到 RDBMS 和队列

问题描述

我有一个 REST 服务——它的所有请求都保存到它自己的关系数据库中。到目前为止,很好。但是,还有一个小型企业功能(电子邮件通知、短信警报)应该在新接收/更新的数据上运行。为了让这个过程在后台处理数据,它需要某种方式来了解持久化的数据——消息队列可以解决这个问题。我看到设计这个的三种常见方式,

  1. REST 服务插入到数据库中,也发布到队列中。

    • 这里的问题是,分布式事务 - 在一个事务中组合不同的类型 - 关系数据库和队列。有些工具可能支持,有些可能不支持。
  2. 像往常一样,REST 服务只保留到它的数据库中。此外,它还将数据插入到另一个表中,计划作业查询到该表,将它们发布到队列(后台作业应该从该队列开始工作)。

    • 我看到的问题是调度程序 - 不是反应式的,批处理,受时隙限制,不是实时的,慢的等等。
  3. REST 端点将数据直接发布到topic. 一个消费者将它持久化到数据库中,而另一个在后台处理它。

    • 类似事件外包的东西。TMU,随着服务数量的增长,实现起来有点复杂。此外,如果数据库关闭,持久服务将无法保存数据,但是后台服务(例如,电子邮件)会发送功能错误的电子邮件。这可能会导致服务和功能之间的不一致。

我也想过阅读数据库transaction-logs,但它似乎更复杂,需要配置工具才能使其工作,而且,它似乎更适合数据处理系统而不是我们的用例。

你对此有何看法——我错过了什么吗?你如何管理这样的场景?应该寻找什么?思考反应,说Vertx

抱歉,如果这看起来很幼稚,但我不得不问。

标签: microservicesmessage-queuemessagingvert.xdistributed-transactions

解决方案


我认为最好的方法是 2 使用像 debezium 这样的 CDC(变更数据捕获)系统。

请参阅 [ https://microservices.io/patterns/data/transactional-outbox.html][1]


推荐阅读