环境
springboot, rocketmq, nacos, feign
定义
- [消费服务 A], rocketmq 消费服务, 触发任务处理
- [数据服务 B], 本地数据库, 相关业务逻辑
- [分析服务 C], 对接三方服务, 发送本地数据, 返回结果. 三方结果有同步, 有异步.
流程
- [消费服务 A]触发事件, [数据服务 B]提供数据, 状态更新. [分析服务 C]通过第三方处理数据, 返回结果写入[数据服务 B].
关键因素
- 一次任务,由[数据服务 B]提供任务数据列表(多条), [分析服务 C]因三方接口限制, 数据不能一次性发送给第三方, 需要多次发送. 总请求是 数据条数*n, [分析服务 C]处理一条数据总体时间长.
- [消费服务 A]需要等待任务执行完, 确定是消费重试, 还是消费成功.
迷惑
- 结构 1 [消费服务 A]触发事件调用[数据服务 B], [数据服务 B]读取数据, 发送给[分析服务 C], [分析服务 C]处理数据, 返回结果给[分析服务 C]
([消费服务 A] -> [数据服务 B] -> [分析服务 C])
- 结构 2 [消费服务 A]触发事件从[数据服务 B]拉取任务数据, [消费服务 A]将数据发送给[分析服务 C], [分析服务 C]将结果返回给[消费服务 A], [消费服务 A]将结果回写给[数据服务 B].
([消费服务 A] <-> [数据服务 B], [消费服务 A] <-> [分析服务 C], [消费服务 A] <-> [数据服务 B])
想法
- 根据[数据服务 B]的数据列表, 开启线程, 并行处理, 提高[分析服务 C]处理速度.
- 结构 1, 内聚强一点, 但需要处理[消费服务 A]的超时情况, 因为一个请求超过设定的时间, 会直接返回超时, 实际[数据服务 B]还在执行. 需考虑幂等性.可能上次任务还在执行,因为超时, [消费服务 A]再次触发任务.
- 结构 2, [消费服务 A]通过在[数据服务 B]获取的数据(本地拉取数据快), 开启多线程, 调用[分析服务 C]处理数据,避免结构 1 中,一次请求等待超时问题.
- 想让大家帮忙分析分析,有没有好的方案.