0%

如何保证消息一致性

如何保证消息一致性

消息发送一致性

消息发送一致性是指业务操作成功了,有这个操作产生的消息一定要发送出去,否则就丢失消息了

会出现的问题?

  • 业务操作成功了,但是此时应用宕机,导致消息没有发送出去
  • 业务成功了,消息发送时消息系统挂掉了,导致消息没有发送出去

如何解决?

消息一致性

  1. 业务处理应用首先把消息发送给消息中间件,标记消息的状态为未处理
  2. 消息中间件收到消息,将消息存储在消息存储中,但是不进行消息投递
  3. 消息中间件返回消息入库成功/失败
  4. 业务放收到消息中间件返回结果进行处理
    • 收到的结果为失败,则放弃业务处理
    • 收到的结果为成功则进行业务处理
  5. 业务处理完成后,把结果发送给消息中间件
  6. 消息中间件收到业务处理的结果,根据结果进行处理
    • 如果业务失败,则删除消息存储中的消息
    • 如果业务成功,则将消息存储中的消息状态改为可发送,进行消息投递

消息处理时要进行持久化操作,表示收到消息了,此时就可以恢复给发布者消息已收到,然后在进行业务操作,如果业务操作失败,则进行补偿机制(定时任务),重新执行失败的任务

欢迎关注我的其它发布渠道