消息模式:命令、事件与路由的深入解析
1. 消息传递实现一致性
在与第三方服务集成时,比如构建一个允许用户通过电子邮件或短信订阅不同类型通知的应用程序,需要先更新本地数据库,然后调用电子邮件服务的 Web 服务,再调用短信服务的 Web 服务。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(Transaction):::process --> B(Update Database):::process
B --> C(Call Email Service):::process
C --> D(Call SMS Service):::process
但调用 Web 服务部分不在事务的完全控制之下,因为事务无法管理 Web 服务调用。一旦发起 Web 服务调用,无论事务是提交还是回滚,调用结果只有成功或失败两种情况。
这可能会导致以下问题:
- 部分服务调用失败 :如果数据库事务和电子邮件服务调用成功,但短信服务调用失败,回滚数据库事务会让用户看似未订阅,但他们会收到第三方的电子邮件;提交数据库事务,用户看似已订阅,但收不到想要的短信通知。
- 服务响应缓慢 :如果第三方 Web 服务变得极其缓慢,调用 Web 服务的代码可能会超时,导致数据库事务回滚,但在第三方服务器上,调用实际上可能已经成功,只是响应很慢。
使用 NSe
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



