hu (@eager4ever) 在 开发-批量推送任务问题 中发帖
佬友们,问个问题:
比如有个给100w人推送push的任务,该任务放在redis的zset中,用户的id每1000个放在redis的一个list key中,现在如何使用多台机器多个线程同时发送这些push(每个用户id调用push接口,也支持批量推送,也有调用速度限流控制),如果其中一台机器宕机后也不影响推送任务,应该怎么做呢?
现在是这样做的:有个分配任务线程,当zset的score超过当前时间,就可以开始执行推送任务了,项目启动时就开几个推送线程,一直死循环判断,如果能从list获取到用户id后就进行推送,当推送任务的list全部为空时,才会删除zset对应的任务,推送就结束了。
还有其他更好的解决方案吗?能做到有推送任务才提交给推送线程池处理吗?