# 《分布式IM系统》大后端平台-消息服务-第01节:单聊消息的发送流程设计和实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/17cbNBard (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★★☆☆☆
  • 本节重点:对单聊消息的流程进行设计和实现,从源码级别掌握单聊消息的发送流程,掌握基于可靠消息最终一致性分布式事务解决方案,理解单聊消息在整个分布式IM即时通讯系统中的流转过程,结合自身实际项目思考,将本节学到的知识灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/17cbNBard (opens new window)

大家好,我是冰河~~

消息微服务主要承担着大后端平台的消息收发与消息流转,用户通过大后端平台发送的消息,最终会通过消息微服务整合的即时通讯SDK将消息发送到即时通讯后端服务,再由即时通讯后端服务将消息推送到用户的终端设备。

# 一、前言

在前面的文章中,我们对大后端平台的用户微服务、好友微服务和群组微服务进行了设计和实现,并初步完善了相关的功能。对于用户微服务、好友微服务和群组微服务来说,我们也是精简了复杂的业务,保留了最核心的基础能力,当其他业务系统想要对接分布式IM即时通讯系统时,只需要对接即时通讯SDK即可,不必关心分布式IM即时通讯系统内部的具体实现。

即时通讯的本质还是实时收发消息,大后端平台的消息微服务就是从整个大后端平台中分拆独立出来的,专门用于大后端平台承接消息发送与消息流程的微服务。

# 二、本节诉求

对分布式IM即时通讯系统中大后端平台的消息微服务进行设计和实现,从源码级别实现消息的发送和流转流程,保证消息发送和消息持久化的一致性,掌握基于可靠消息最终一致性的分布式事务解决方案,理解单聊消息在整个分布式IM即时通讯系统中的流转过程,结合自身实际项目思考,将本节学到的知识灵活应用到自身实际项目中。

# 三、单聊流程

在前面的文章中,我们对单聊消息的发送流程进行了梳理和总结,为了让大家能够更好的结合代码来理解流程,这里我们再将单聊消息的交互链路图放出来,单聊消息的整体交互链路如图1-1所示,


可以看到,用户A向用户B发送消息时,如果用户B在线,就可以按照发送消息的交互链路向用户B发送消息了。如果用户B不在线,此时就无法向用户B正常推送消息。当用户B登录分布式IM即时通讯系统后,就会调用后端平台的接口拉取所有未读消息,并通过用户B在线流程向用户B推送消息。

备注:关于单聊消息的交互链路更多细节内容,大家可以阅读《需求设计-第04节:分布式IM即时通讯系统技术流程梳理 (opens new window)》一文。

在实现单聊消息时,我们还有一个重点关注的事项,那就是当用户调用消息微服务的接口发送单聊消息时,为了保证消息持久化与调用即时通讯SDK发送消息的一致性,这里使用了基于消息最终一致性分布式事务解决方案来解决分布式事务问题。有关基于消息最终一致性分布式事务解决方案的内容,大家可以阅读《Seckill秒杀系统》专栏的《第51章:基于可靠消息最终一致性模型解决分布式事务问题 (opens new window)》一文。

# 四、编码实现

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码