admin管理员组文章数量:1794759
redis zset 延迟合并任务处理
redis zset 延迟合并任务处理
代码语言:javascript代码运行次数:0运行复制@Autowired
public RedisTemplate redisTemplate;
##1.发送端:在接口中收集任务ID,累计时间段之后,合并处理。
##redis zset 主键,任务ID(不重复),时间戳
String key = "任务分组名称";
//延时
redisTemplate.opsForZSet().add(key,taskId,System.currentTimeMillis());
System.out.println("加入任务, taskId: " + taskId + ", exeTime: " + System.currentTimeMillis() + ", 当前时间:" + LocalDateTime.now() +",key = " + key);
##2.接收端
@Configuration
public class ExecutorServiceConf {
@Bean
public ExecutorService executorService() {
return new ThreadPoolExecutor(
20,
40,
0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1024),
new ThreadFactoryBuilder().setNameFormat("myMergeTask-pool-%d").build(),
new ThreadPoolExecutor.AbortPolicy());
}
}
@Service
public class ConsumerTask {
@Autowired
public RedisTemplate redisTemplate;
@Autowired
ExecutorService executorService;
@Value("${delayTime:2}")
private Integer delayTime;
//服务启动的时候加载
@PostConstruct
public void consumer() {
//启动线程池
executorService.submit(new Runnable() {
@Override
public void run() {
while (true) {
String key = "任务分组名称";
//rangeByScore 主键,0,当前时间,0,偏移量1000
Set<Integer> taskIdSet = redisTemplate.opsForZSet().rangeByScore(key, 0, System.currentTimeMillis(), 0, 1000);
if (taskIdSet == null || taskIdSet.isEmpty()) {
logger.info("没有任务");
} else {
//1.查询任务ID关联的记录
//2.任务合并处理
//3.处理成功后,清理redis
taskIdSet.forEach(id -> {
//4.根据taskId更新任务状态
//5.根据taskId删除redis
long result = redisTemplate.opsForZSet().remove(key, id);
if (result == 1L) {
logger.info("从延时队列中获取到任务,taskId:" + id + ",当前时间:" + LocalDateTime.now());
}
});
}
try {
//间隔2分钟时间
TimeUnit.MINUTES.sleep(delayTime);
} catch (InterruptedException e) {
logger.error("定时扫描exception:",e);
}
}
}
});
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-08-30,如有侵权请联系 cloudcommunity@tencent 删除服务接口线程池redis队列本文标签: redis zset 延迟合并任务处理
版权声明:本文标题:redis zset 延迟合并任务处理 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754983580a1709034.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论