【问题标题】:Need for transacional outbox pattern on microservices微服务中需要事务发件箱模式
【发布时间】:2020-10-01 17:09:33
【问题描述】:

我看到了使用事务发件箱模式 (https://microservices.io/patterns/data/transactional-outbox.html) 的建议,在这种情况下,应该在数据库中进行一些更改后将消息发布到代理,因此它可以是“ACID”。我的问题是:为什么不把消息发布放在这样的交易中?

try {
   beginTransaction()
   saveStuff()
   publishMessage() 
   commitTransaction()
} catch() {
   rollbackTransaction()
}

这样,只要消息发布失败,事务就会回滚。我只看到一个问题:您可能不想在消息发布失败时回滚事务,稍后再试。这种方法还有其他问题吗?

【问题讨论】:

  • 在问了这个问题之后,我发现了这个关于没有分布式事务的可靠消息传递的 Udi Dahan 视频。我认为可能对其他有相同问题的人有用:vimeo.com/channels/1105173/111998645

标签: design-patterns microservices messaging messagebroker


【解决方案1】:

publishMessage 可以工作(消息已发送)但 commitTransaction 可能会失败(例如,与数据库的连接丢失或应用程序在发送消息后和调用 commit 之前崩溃)

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2021-03-16
    • 1970-01-01
    • 2018-08-19
    • 2023-03-11
    • 2019-04-06
    • 2019-01-02
    • 2018-11-14
    • 1970-01-01
    相关资源
    最近更新 更多