分布式事务解决方案之最大努力通知(六)

最大努力通知的目标是发起通知方通过一定机制,最大努力将业务处理结果通知到接收方。

具体包括:

  1. 有一定的消息重复通知机制。因为接收方可能没有接收到通知,此时要有一定的机制对消息进行重发。
  2. 消息校对机制。如果尽最大的努力也没有通知到接收方,或者接收方消费消息后再次消费,此时可由接收方主动发起查询请求至发起方。

最大努力通知与可靠消息一致性有什么不同?

  1. 解决方案思路不同:可靠消息一致性,是发起通知方需要保证将消息发出,并且将消息发送到接收方,消息可靠性由发起方保证;最大努力通知,发起方尽最大努力将业务处理结果通知给接收方,假如消息通知不到,则需要由接收方主动调用发起通知方的接口查询业务处理结果,通知的可靠性关键在于接收方。
  2. 两者业务应用场景不同:可靠消息一致性关注是交易过程的事务一致性,以异步的方式完成交易;最大努力通知关注的是交易之后的通知事务,即将交易结果可靠的通知出去。
  3. 技术解决方向不同:可靠消息一致性要解决消息从发出到接收的一致性,即消息发出并且被接收到;最大努力通知无法保证消息从发出到接收的一致性,只提供消息接收的可靠性机制。可靠机制是,接收方通过查询确认业务结果。

解决方案 

通过对最大努力通知的理解,使用MQ的ack机制就可以实现最大努力通知。

方案1:

分布式事务解决方案之最大努力通知(六)

上述图示方案是利用MQ的ack机制由MQ向接收方发送通知,流程如下:

  1. 发起方将通知发给MQ.使用普通消息机制将通知发给MQ.
  2. 接收通知方监听MQ。
  3. 接收通知方接收消息,业务处理完成回应ack。
  4. 接收通知方若么有回应ack,则MQ会重复通知。MQ会按照间隔1分钟,5分钟,10分钟,30分钟,1h,2h,5h,10h的方式,逐步拉大通知间隔,直到达到通知要求的最大时间窗口上限。
  5. 接收方可通过消息校对接口来校对消息的一致性。

方案2:

本方案也是利用MQ的ack机制,与方案1不同的是AP向接收方发起通知,如下图:

分布式事务解决方案之最大努力通知(六) 

交互流程如下:

  1. 发起方将通知发给MQ,使用可靠消息一致方案中的事务消息保证本地事务与消息的原子性,最终将通知发给MQ.
  2. 通知程序监听MQ,接收MQ消息。方案1中接收通知方直接监听MQ,方案2中由通知程序监听MQ.通知程序若没有回应ack,则MQ会重复通知。
  3. 通知程序通过互联网协议调用接收方接口,完成通知。
  4. 接收方通过消息校对接口来校对消息的一致性。

 方案1和方案2不同点:

  1. 方案1中,接收方通知方案监听MQ,此方案是主要应用与内部应用之间的通知。
  2. 方案2中,接收方与通知程序关联,通知程序与MQ关联。此方案主要应用于外部应用之间的通知,例如支付宝、微信的支付结果通知。

小结:

 最大努力通知方案是分布式事务中对一致性要求最低的一种,适用于一些最终一致性时间敏感低的业务。

需要实现消息的重发通知机制和消息校对机制。

推荐鹰潭SEO(优化推广)

相关推荐