最大努力通知的目标是发起通知方通过一定机制,最大努力将业务处理结果通知到接收方。
具体包括:
- 有一定的消息重复通知机制。因为接收方可能没有接收到通知,此时要有一定的机制对消息进行重发。
- 消息校对机制。如果尽最大的努力也没有通知到接收方,或者接收方消费消息后再次消费,此时可由接收方主动发起查询请求至发起方。
最大努力通知与可靠消息一致性有什么不同?
- 解决方案思路不同:可靠消息一致性,是发起通知方需要保证将消息发出,并且将消息发送到接收方,消息可靠性由发起方保证;最大努力通知,发起方尽最大努力将业务处理结果通知给接收方,假如消息通知不到,则需要由接收方主动调用发起通知方的接口查询业务处理结果,通知的可靠性关键在于接收方。
- 两者业务应用场景不同:可靠消息一致性关注是交易过程的事务一致性,以异步的方式完成交易;最大努力通知关注的是交易之后的通知事务,即将交易结果可靠的通知出去。
- 技术解决方向不同:可靠消息一致性要解决消息从发出到接收的一致性,即消息发出并且被接收到;最大努力通知无法保证消息从发出到接收的一致性,只提供消息接收的可靠性机制。可靠机制是,接收方通过查询确认业务结果。
解决方案
通过对最大努力通知的理解,使用MQ的ack机制就可以实现最大努力通知。
方案1:
上述图示方案是利用MQ的ack机制由MQ向接收方发送通知,流程如下:
- 发起方将通知发给MQ.使用普通消息机制将通知发给MQ.
- 接收通知方监听MQ。
- 接收通知方接收消息,业务处理完成回应ack。
- 接收通知方若么有回应ack,则MQ会重复通知。MQ会按照间隔1分钟,5分钟,10分钟,30分钟,1h,2h,5h,10h的方式,逐步拉大通知间隔,直到达到通知要求的最大时间窗口上限。
- 接收方可通过消息校对接口来校对消息的一致性。
方案2:
本方案也是利用MQ的ack机制,与方案1不同的是AP向接收方发起通知,如下图:
交互流程如下:
- 发起方将通知发给MQ,使用可靠消息一致方案中的事务消息保证本地事务与消息的原子性,最终将通知发给MQ.
- 通知程序监听MQ,接收MQ消息。方案1中接收通知方直接监听MQ,方案2中由通知程序监听MQ.通知程序若没有回应ack,则MQ会重复通知。
- 通知程序通过互联网协议调用接收方接口,完成通知。
- 接收方通过消息校对接口来校对消息的一致性。
方案1和方案2不同点:
- 方案1中,接收方通知方案监听MQ,此方案是主要应用与内部应用之间的通知。
- 方案2中,接收方与通知程序关联,通知程序与MQ关联。此方案主要应用于外部应用之间的通知,例如支付宝、微信的支付结果通知。
小结:
最大努力通知方案是分布式事务中对一致性要求最低的一种,适用于一些最终一致性时间敏感低的业务。
需要实现消息的重发通知机制和消息校对机制。
推荐鹰潭SEO(优化推广)