有时候我们在开发过程中,很容易犯这样一个错误,就是在服务中写一个定时任务,然后也没做其它的处理就上线了。然后微服务架构为了保证高可用,一般都会部署多个服务,这个时候问题就来了,时间一到定时任务一启动,发现你部署多少个服务,就会跑多少个定时任务。如果服务器性能一般,定时任务占用内存又多,服务器跑死都有可能。
问题:那基于SpringCloud的架构中,这种情况我们应该如何处理呢?
简单的来说,我们可以分为以下步骤:
- 第一步先获取当前服务ip
- 第二步获取springcloud集群ip信息
- 最后将当前ip和集群的ip进行对比,如果当前ip是集群中最小的ip则执行定时任务业务,如果不是则return掉。
我们先来看一下定时任务:
/**
* @author zhangzhixiang
* @date 2019/12/07
*/
@Component
public class WrokTask {
@Autowired
private IJobService jobService;
private static String serviceName="provider";
/**
* 5秒更新一次