Austin项目开发过程中遇到的问题

在Austin消息推送平台中,需要完成一个向指定人群定时推送消息的动作,这就要求我去创建一个定时任务,这里我选用的是通过接入xxl-job来启动一个定时任务,而指定人群的输入是通过导入一个.csv文件,读取这个文件里面的信息去支持批量导入信息的。当这个定时任务被调度的时候,需要读取这个文件,解析出来向哪些人群去做推送消息的这个动作。

一开始我认为「读取文件以及业务端远程调用xxl-job接口」是一件比较耗时的工作,所以我这里直接就用线程池做了层异步,避免定时任务超时。

而在读取.csv文件的时候,我最初是设计的一次性读取,然后返回一个list列表List<CrowInfoVo>,但是后边出现了内存不足的问题。我通过排查分析,判断应该是.csv文件数据过大的时候,存到内存里面的数据体量太大了。

所以,我修改成每当从文件读取一行,我就处理一行。我在拿到每一行数据的时候,封装了一个VO,扔给了内存队列LazyPending,内存队列里会起一个线程去消费队列里的数据,只是为了减少接口调用导致网络传输的次数过于频繁,设置了必须等到积压到给定的size或者timeout才给到实际消费者进行处理。

最后通过批量发送能够实现减少每次远程调用接口带来的网络资源消耗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值