本文介绍系统账号发送消息的实践方案。

实践介绍

消息业务一般有系统账号向一批账号批量发消息的场景,比如钉钉工作通知、淘宝交易物流通知,这个场景有以下特征:
  • 存在短时间内向大量账号发送消息的需求。
  • 系统账号实际上是虚拟账号,不会在客户端登录。
系统账号发送消息

实现

系统账号和普通账号是业务侧的概念,对AIM来说两者没有区别。

AppServer以系统账号(SysAccount)作为发送者给用户(User)发消息,消息默认会自身同步给SysAccount,如下图流程所示。系统账号发送消息原理

AIM消息默认多端同步,发送者登录其他客户端也是一个接收者,AIM有单账号收消息频率的限制,这个场景下SysAccount是相同的,容易命中单账号限流的策略。

系统账号不会登录客户端,不需要多端同步,这个场景我们可以设置消息发送请求中的Options来避免:
  • ReceiveScopeOption.ReceiverIds不为空,要包含接收者(User),不要包含系统账号(SysAccount)。
  • SingleChatCreateRequest.UserConversation不要包含系统账号(SysAccount)。

使用了以上Option后,上面的流程图步骤4就不会执行,从而避开单账号限流。