design-patterns - 微服务中需要事务发件箱模式

标签 design-patterns microservices messaging messagebroker

我看到了使用事务发件箱模式 ( https://microservices.io/patterns/data/transactional-outbox.html ) 的建议,用于在数据库发生某些更改后应将消息发布到代理的场景,因此它可以是“ACID”。我的问题是:为什么不像这样将消息发布内部交易?

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

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

最佳答案

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

关于design-patterns - 微服务中需要事务发件箱模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62334856/

相关文章:

c# - 访客模式的实现。小行星/宇宙飞船碰撞问题

spring-boot - 应用程序发起调用时如何处理微服务之间的身份验证

ruby - 考虑 Ruby 中的 'self' 关键字的正确方法是什么?

java - 在 Java 中寻找简单的持久消息缓冲区

architecture - 顺序很重要时丢失消息

java - 用于将请求最多的图像存储在 map 对象中的设计模式

design-patterns - 您是否曾经从大自然中获得过编程解决方案?

mysql - 与其他服务共享的微服务数据库

tomcat - 将请求路由到微服务架构中相关服务的方法

java - 设计一个仅监听某些属性的 PropertyChangeListener