美文网首页
61.分布式事务解决方案-消息中间件

61.分布式事务解决方案-消息中间件

作者: LANSHENGYANG | 来源:发表于2020-06-12 18:29 被阅读0次

可靠消息服务

  • 基于可靠消息服务的方案是通过消息中间件保证上,下游应用数据操作的一致性。假设有A和B两个系统,分别可以处理任务A和任务B。此时存在一个业务流程,需要将任务A和任务B在同一个事务中处理。就可以使用消息中间件来实现这种分布式事务。


    image
第一步:消息由系统A投递到中间件
  • 1.在系统A处理任务A前,首先向消息中间件发送一条消息
  • 2.消息中间件收到后将该条消息持久化,但并不投递。持久化成功后,向A回复一个确认应答
  • 3.系统A收到确认应答后,则可以开始处理任务A
  • 4.任务A处理完成后,向消息中间件发送Commit或者Rollback请求。该请求发送完成后,对系统A而言,该事务的处理过程就结束了5
  • 5.如果消息中间件收到Commit,则向B系统投递消息;如果收到Rollback,则直接丢弃消息。但是如果消息中间件收不到Commit和Rollback指令,那么就要依靠”超时询问机制“。
    • 超时询问机制
    • 系统A除了实现正常的业务流程外,还需要提供一个事务询问的接口,供消息中间件调用。当消息中间件收到发布消息便开始计时,如果到了超时没收到确认指令,就会主动调用系统A提供的事务询问接口询问该系统目前的状态。该接口会返回三种结果,中间件根据三种的结果做出不同反应:
      • 提交:将该消息投递给系统B
      • 回滚:直接将条消息丢弃
      • 处理中:继续等待
第二步:消息由中间件投递到系统B
  • 消息中间件向下游系统投递完消息后便进入阻塞等待状态,下游系统便立即进行任务的处理,任务处理完成后便向消息中间件返回应答。
    • 如果消息中间件收到确认应答后便认为该事务处理完毕
    • 如果消息中间件在等待确认应答超时之后就会重新投递,直到下游消费者返回消费成功响应为止。一般消息中间件可以设置消息重试的次数和时间间隔,如果最终还是不能成功投递,则需要手工干预。这里之所以使用人工干预,而不是使用让A系统回滚,主要是考虑到整个系统设计的复杂度问题。
  • 基于可靠消息服务的分布式事务,前半部分使用异步,注重性能;后半部分使用同步,注重开发成本。

相关文章

网友评论

      本文标题:61.分布式事务解决方案-消息中间件

      本文链接:https://www.haomeiwen.com/subject/rzyntktx.html