【发布时间】: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