全部产品
云市场

异步消息处理流程

更新时间:2019-09-05 20:08:38

普通消息接收与投递流程

普通消息是相对于事务型消息而言的,普通消息的接收与投递流程如下图所示:

common

消息重试投递流程

当消息投递异常时,消息代理组件会按照预定时间间隔策略重新投递消息,直至订阅端系统消费成功。

消息投递异常的常见原因如下:

  • 订阅端系统未连接到消息代理组件(Message Broker)。
  • 订阅端系统收到消息后处理超时,默认消息投递超时时间是10秒。
  • 订阅端系统收到消息后处理异常。
  • 订阅端系统收到消息后主动回滚。

消息重试投递流程如下图所示:

redelivery

事务型消息接收与投递流程

事务型消息涉及的角色是消息发送端系统和消息代理组件,与消息订阅端系统无关。

事务型消息是否被投递与发送端系统本地数据库事务保持一致,如果本地数据库事务提交则消息会被投递给订阅端;如果本地数据库事务回滚,则直接丢弃消息不投递给订阅端系统。

事务型消息接收与投递流程如下图所示:

transaction message

事务型消息回查流程

事务型消息涉及典型的两阶段消息流程:

  • 第一阶段:消息发布端发送消息到消息代理组件
  • 第二阶段:消息发布端发送提交或者回滚指令到消息代理组件,消息代理组件根据此指令决定是否投递消息到订阅端系统。

当第二阶段指令出现异常时,消息代理组件在一定时间后主动回查消息发送端系统,确认对应的事务型消息是否投递。

事务型消息回查流程如下图所示:

transaction callback