【发布时间】:2021-06-07 14:42:46
【问题描述】:
假设 2 个银行系统(假设它们是 A 和 B)使用 IBM MQ 通过发送消息来相互通信,假设一个场景是 RecordA 在 A 处,RecordB 在 B 处。当在 RecordA 需要的地方发起事务时当且仅 RecordB 更新时更新。 MQ 是如何实现的?
例如,一笔资金转账,从 A 的 AccountA 中扣除 100 美元,并在 B 的 AccountB 中增加 100 美元,
一种可能性是: A 首先启动事务并向 B 发送消息,一旦 MQ 保证消息的传递,它就会执行扣除,此时 B 也将执行加法。如果 MQ 未能保证消息的传递而实际上它可能已经传递了怎么办?在这种情况下,A 会怎么做? (其中一种情况是消息被传递,但由于通信介质故障,确认在传输过程中丢失,当然我们可以确认确认,但同样的问题再次出现)
我无法想象 IBM MQ 正在使用的那个问题的解决方案。我错过了什么?该问题是否存在解决方案?
【问题讨论】:
-
IBM MQ 提供有保证的交付,但没有将其称为有保证的交付。这仅适用于持久消息。持久消息在每个跃点写入磁盘,并在 MQ 服务器之间进行确认。
标签: transactions ibm-mq messaging soa banking