所谓最大努力通知,换句话说就是并不保证100%通知到。这种分布式事务的方案,通常也是借助异步消息进行通知的。
发送者将消息发送给消息队列,接收者从消息队列中消费消息。在这个过程中,如果出现了网络通信故障或者消息队列发生了故障,就有可能导致消息传递失败,即消息被丢失。因此,最大努力通知无法保证每个接收者都能成功接收到消息,但是可以尽最大努力去通知。
下面是一个简单的例子来说明最大努力通知的过程。假设有一个在线商城系统,顾客可以下订单购买商品。当顾客成功下单后,通知顾客订单已经确认。这个通知就可以采用最大努力通知的方式。
。顾客下单后,商城订单系统会生成订单并记录订单信息。
。商城订单系统通过最大努力通知机制,将订单确认通知发送给用户通知服务。
。用户通知服务把下单消息通过电子邮件发送给用户。
。商城系统不会等待顾客的确认,而是将通知放入消息队列中,并尽力发送通知。如果通知发送成功,那就很好,顾客会尽快收到订单确认邮件。但如果由于网络问题、电子邮件服务器问题或其他原因导致通知发送失败,商城系统可能会做一些尝试,尽可能的通知,重试多次后还是不成功,则不再发夺。
需要注意的是,在最大努力通知的过程中,可能会出现消息重复发送的情况,也可能会出现消息丢失的情况。因此,在设计最大努力通知系统时,需要根据实际业务需求和风险承受能力来确定最大努力通知的策略和重试次数以及对消息进行去重等处理。
最大努力通知这种事务实现方案,一般用在消息通知这种场景中,因为这种场景中如果存在一些不一致影响也不大。