# 《分布式IM系统》大后端平台-群组服务-第03节:业务事件的发送与接收设计和实现

作者:冰河
星球: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/17xtVNR6i (opens new window)

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

  • 本节难度:★★☆☆☆
  • 本节重点:对大后端平台中群组微服务业务事件的设计发送与接收进行设计和实现,掌握异步处理业务事件的落地方案与实现技巧,掌握在DDD领域架构模式下,采用Cola框架与RocketMQ发送并接收领域事件的方法,并能够将其灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/17xtVNR6i (opens new window)

大家好,我是冰河~~

在大后端平台的群组微服务中,用户创建群聊、修改群聊信息、解散群聊、邀请好友进群、退出群聊、踢人出群时,会对外发布一个业务事件,具体的业务方法会立即返回。由单独的领域服务监听对应的事件,接收到事件后,去更新分布式缓存中的数据。

# 一、前言

在大后台平台的群组微服务中,获取群组和群成员信息时,会将先从分布式缓存中查询数据,如果缓存中不存在数据,则获取分布式锁,同一时刻只允许一个线程查询数据库中对应的数据,随后将数据保存在分布式缓存并返回。

可以看出,数据是会同步到缓存的,当用户创建群聊、修改群聊信息、解散群聊、邀请好友进群、退出群聊、踢人出群时,就需要更新分布式缓存中的数据。

# 二、本节诉求

对大后端平台中群组微服务业务事件的发送与接收进行设计和实现,掌握异步处理领域事件的落地方案与实现技巧,掌握在DDD领域架构模式下,采用Cola框架与RocketMQ发送并接收领域事件的方法,并能够将其灵活应用到自身实际项目中。

# 三、流程设计

在群组微服务中,当业务执行完修改数据库中数据的逻辑后,可以对外发布一个领域事件,由应用层订阅相关的领域事件,当应用层接收到领域事件后,异步处理分布式缓存中的数据,整体流程如图3-1所示。


可以看到,更新完群组和群成员数据库中的数据后,业务会将事件封装成对应的事件模型发布出去,至于是发布到Cola,还是发布到RocketMQ,完全由配置决定,后续不需要修改代码即可实现。而应用层会监听并接收Cola或者RocketMQ中的事件,并更新分布式缓存中的群组和群成员数据。

同时,不管是将事件发布到Cola还是发布到RocketMQ,统一实现了对应的事件模型,而不必单独为每种事件的发布方式单独设计事件模型,体现了事件模型在设计上的通用性和高度可扩展性。

# 四、编码实现

由于在群组微服务中,我们在GroupServiceImpl类中聚合了群组功能和群成员功能,整体处理完业务后,会对外发送事件,所以,事件是从GroupServiceImpl类发出的。

具体的实现步骤如下所示。

(1)修改GroupServiceImpl类

主要是在GroupServiceImpl类中,创建群聊、修改群聊信息、解散群聊、邀请好友进群、退出群聊、踢人出群时,会对外发布一个业务事件,具体的业务方法会立即返回,具体源码详见本节源码分支。

# 查看完整文章

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