千万级用户数据推送项目总体流程图原版
2020-11-10 18:51:09 10 举报
千万级用户数据推动项目总体流程图
作者其他创作
大纲/内容
GroupSendService.save()
获取公众号:参数:项目id: appId、公众号id: officialAccountId
微信公众号推送服务内部流程图
消费者
ProducerGroupSendByTemplate.send()
生产者
ProducerTaskSyncCustomer.send()
ProducerTaskSyncFans.send()
结束
过滤条件
ConsumerGroupSendByGeneral.receive()
callback()
BatchCalculateCallback.callback()
Source
GroupSendBatchService.get()
删除需要过滤的粉丝的Redis key
groupSendBatchService.create();
群发接口
核心模块
GroupSendService.send()
ConsumerTaskSyncFans.receive()
SourceAndSinkTaskFilterFans
回调方法callback()
GroupSendBatchService.doSendTemplate()
判断是订阅号或者是服务号
ConsumerTaskSyncCustomer.receive()
分群
服务号
同步粉丝
合并Customer数据源1、收集来源数集合GroupSendBatchService.getSyncCustomerConditionByBatch() 若集合为空,则代表发送全部客户,记录BatchStep状态为INTERSECT_CUSTOMER_FAILED,并退出合并方法 若集合大小为1,则标识唯一来源客户源,不需要合并,重命名key即可 若集合大小大于1,则标识客户源从多种方式获得,需执行过滤唯一Key操作,防止重复发送现象。2、若合并成功,则记录BatchStep状态为INTERSECT_CUSTOMER_SUCCEED 若合并失败,则记录BatchStep状态为INTERSECT_CUSTOMER_FAILED
GroupSendBatchService.doSyncFansByOfficialAccount()
纯文本、图片、图文方式推送信息
过滤粉丝方法: checkSubTasksForFilterFans(),每次更新一个task任务 (1) 更新一个task任务 (2) 若失败进行重试,重试次数+1 (3) 若重试次数大于预设阈值,退出
服务号批量发送:参数:GroupSend对象、GroupSendBatch对象采用异步的方式发送:调用 asyncTaskProcessBatch.doTask()
(1) 发送一条消息(2) 若失败进行重试,重试次数+1(3) 若重试次数大于预设阈值,退出
GroupSendBatchService.syncFans()
模板方式推送信息
同步粉丝1、通过客户找粉丝,GroupSendBatchService.syncFansByOfficialAccount()。2、异步分task任务将需要推送消息的粉丝存入Redis,每个task任务10000条3、若同步成功,则记录BatchStep状态为SYNC_FANS_SUCCEED 若同步失败,则记录BatchStep状态为SYNC_FANS_FAILED
GroupSendBatchService.syncCustomer()
订阅号
更新粉丝方法: checkSubTasksForSyncFansByOfficialAccountId(),每次更新一个task任务 (1) 更新一个task任务 (2) 若失败进行重试,重试次数+1 (3) 若重试次数大于预设阈值,退出
SourceAndSinkTaskSyncFans
微信推送服务入口:接口:/{app_id}/official-account/{official_account_id}/group-sends1、判断推送消息内容类型是否符合内置标准,不符合则抛出异常 消息内容类型:0:纯文本; 1:图片; 2、多图文; 4、模板
GroupSendBatchService.doTaskSyncCustomer()
asyncTaskProcessBatch.doTask()
ProducerTaskFilterFans.send()
GroupSendBatchService.intersectCustomer()
SourceAndSinkSendGeneral
GroupSendBatchService.doFilterFans()
ConsumerTaskFilterFans.receive()
距上次活跃时间
GroupSendBatchService.filterFans()
同步客户
GroupSendBatchService.doSendGeneral()
订阅号发送:参数:GroupSend对象1、封装消息体2、调用restTemplate远程调用向客户订阅号发送消息
ConsumerGroupSendByTemplate.receive()
向数据库中持久化微信订阅号群发实体对象:参数:GroupSend对象
groupSendBatchService.doTask()
1、更新群发状态2、根据消息类型选择发送方式:异步 类型: (1)纯文本、图片、图文 producerGroupSendGeneral.send(msg); (2)模板 producerGroupSendByTemplate.send(msg);
过滤粉丝
同步Customer数据源span style=\"font-size: inherit;\
更新Redis
异步发布-订阅模块设计
开始
GroupSendResource.create
更新Customer数据源方法: checkTaskSyncCustomer(),每次更新一个task任务 (1) 更新一个task任务 (2) 若失败进行重试,重试次数+1 (3) 若重试次数大于预设阈值,退出
new GroupSend()
GroupSendService.create()
ProducerGroupSendGeneral.send()
向数据库中持久化微信服务号群发实体对象:参数:GroupSend对象
SourceAndSinkTaskSyncCustomer
0 条评论
下一页