其他分享
首页 > 其他分享> > 可靠消息最终一致性

可靠消息最终一致性

作者:互联网

 

先上图:

 

1. 首先会发送事务消息给MQ Server

2. MQ 会回复一个发送成功的消息,此时MQ Server并不能投递消息,因此还没有收到发送的确认

3. MQ发起方会执行本地事务。

4. 执行完以后就发送commit 或者Rollback 如果是commit的话就开始投递消息; 如果是Rollback,MQ Server 就会删除消息,不投递。

如果 执行完之后发送没有收到怎么办?

5. 未收到确认时候,MQ Serrver会回查事务状态。

6. MQ发送方会检查本地事务的状态。

7. 将本地事务状态进行Commit/Rollback消息给MQ Server。

 

这个方案的保障主要是通过RecketMQ 保证发送方的一致性。

 

 

最大努力通知方案:

先上图:

  

 

   这个是方案1:接收方主动发起调用,保证自己获取消息

  

 

  方案2:通过一个通知程序来通知接收通知方,  这样做是为了有些业务情况下(你作为接收通知方),你不能去监控MQ,因此你就会尬住,只能通过另外一个程序来发送给你,而这个你也是需要主动发起并通知到发起通知方,让它再发一次。

 

 

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

具体包括:

  1、有一定的消息重复通知机制

    因为接收通知方可能没有接收到通知,此时要有一定的机制对消息重复通知。

  2、消息校对机制

    如果尽最大努力通知也没有通知到接收方,或者接收方消费消息后要再次消费,此时可由接收方主动向通知方查询消息信息来满足需求。

 

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

  1、解决方案思想不同

    可靠消息一致性,发起通知方需要保证将消息发出去,并且将消息发到通知方,消息的可靠性关键由发起通知方保证。(发起通知方)

    最大努力通知,发起通知方尽最大努力将业务处理结果通知为接收通知方,但是消息可能接收不到,此时需要接收通知方主动调用发起通知方的接口查询业务处理结果,通知的可靠性关键在接收通知方,(可靠性关键在通知方)

  

  2、业务应用场景不同

    可靠消息一致性关注的是交易过程的事务一致,以异步的方式完成交易(异步)

    最大努力通知关注的是交易后的通知事务,将交易结果可靠的通知出去。

  

  3、技术解决方向不同

    可靠消息一致性要解决消息从发出到接收的一致性,即消息发出并且被接收到。  (消息发出到接收的一致性)

    最大努力通知无法保证消息从发出到接收的一致性,只是提供消息接收的可靠性机制。  最大努力的将消息通知给接收方,当消息无法被接收方接收时,由接收方主动查询消息   (业务处理结果)  重点不是调用方是谁,而是通知方是谁

    

    

  

标签:发起,可靠消息,通知,最终,MQ,消息,一致性,接收
来源: https://www.cnblogs.com/followers/p/16660237.html